Can you upload a sample program?
Actually, I'm using a routine that close dataset, clear columns, create new columns and open the dataset again...
Here a piece of the code:
procedure TfrRelatorios.ViewReport;
procedure NewColumn(Col: TColumn; FN: String; Cap: TCaption; Wid: Integer);
begin
with Col do
begin
FieldName := FN;
Width := Wid;
Title.Caption := Cap;
end;
end;
var
I: Byte;
stSQL: String;
begin
dmModulo.SQLdsRelatorio.Close;
case rgTipoRelatorio.ItemIndex of
0:
begin
with dmModulo.SQLdsRelatorio do
begin
stSQL := 'SELECT %s FROM produtos;';
SQL := Format(stSQL, ['produto, SUM(preco), SUM(qtde)']);
Open;
{..}
Close;
// Start TDBGrid
SQL := Format(stSQL, ['*']);
with dbgRelatorio do
begin
with Columns do
begin
Clear;
for I := 0 to 4 do
Columns.Add;
NewColumn(TColumn(Columns[0]), 'codigo', 'Código', 50);
NewColumn(TColumn(Columns[1]), 'produto', 'Produto', 450);
NewColumn(TColumn(Columns[2]), 'preco', 'Preço', 55);
NewColumn(TColumn(Columns[3]), 'vendas', 'Vendas', 50);
NewColumn(TColumn(Columns[4]), 'qtde', 'Quantidade', 60);
end;
end;
end;
end;
1:
begin
stSQL := 'SELECT %s FROM vendas ';
{...}
// Start TDBGrid
dmModulo.SQLdsRelatorio.SQL := Format(stSQL, ['*']);
with dbgRelatorio do
begin
with Columns do
begin
Clear;
for I := 0 to 5 do
Columns.Add;
NewColumn(TColumn(Columns[0]), 'codigo', 'Código', 50);
NewColumn(TColumn(Columns[1]), 'produto', 'Produto', 400);
NewColumn(TColumn(Columns[2]), 'interno', 'Interno', 50);
NewColumn(TColumn(Columns[3]), 'preco', 'Preço', 55);
NewColumn(TColumn(Columns[4]), 'data', 'Data', 75);
NewColumn(TColumn(Columns[5]), 'hora', 'Hora', 35);
end;
end;
end;
end;
dmModulo.SQLdsRelatorio.Open;
end;
Regards,
Júnior