Fórum Muitas Dúvidas no DbGrid... #198230
01/12/2003
0
Ow, to cheio de dúvidas de como usar o DbGrid...
Criei uma tabela no paradox 7 e a exibo num Dbgrid, até aí tudo bem... eu criei um novo form e quero exibir os totais de cada coluna do DbGrid em DbEdit´s, como é que eu faço a soma de cada coluna? a parte de jogar os DbEdit´s é fácil, o problema é como somar as linhas das colunas...
Outra dúvida:
Como eu posso importar os dados dos DbEdit e do DbGrid na forma de relatório no Qreport???
E, como configurar a parte de impressão no Qreport?
Desde já agradeço pela atenção e pela paciência...
Maluco Tubaina
Curtir tópico
+ 0Posts
01/12/2003
Rafael Heise
Para a impressão, você deve colocar um QuickReport numa form, e colocar um QRBand como rbDetail e outro QRBand como rbColumnHeader e então colocar os QRDBLabel e setar a propriedade DataSet para o DataSet da sua form e o DataField para o campo respectivo que quer mostrar...
Gostei + 0
02/12/2003
Maluco Tubaina
valeu pela força...
Gostei + 0
03/12/2003
Rafael Heise
Gostei + 0
03/12/2003
Maluco Tubaina
-Criei um form1 para a exibição de um dbgrid (Tudo OK);
-Criei um botão que abre outro form2 (Tudo OK);
-A idéia é somar as linhas das colunas do form1 e exibir em edit no form2,
sendo que pra cada coluna do dbgrid do form1 exista um edit no form2.
-outro problema é como jogar esses dados (tanto o dbgrid do form1 quanto os edit do form2) em quick report para impressão no formato relatório.
OBS:
-o dbgrid deve ser impresso em um relatorio e os edit em outro.
Obrigado mais uma vez e aguardo retorno...
Gostei + 0
03/12/2003
Rafael Heise
para o relatório, veja o demo de relatório na pasta do delphi,
Delphi\Demos\Quickrpt\Qr2\, lá tem um exemplo bem claro de como fazer..
valeu
Gostei + 0
11/12/2003
Maluco Tubaina
Bom, agradeço pela dica do ´while is not eof´ mas ainda estou com alguma dúvidas:
Estou com problemas na hora de varrer a tabela, mas o código deve estar certo pois aparece apenas o 1º registro da tabela, o problema meu tá no ´while´, não estou conseguindo acertar a sintaxe do comando, segue abaixo o modo que estou fazendo:
while Db_Geral is not eof do
begin
cont_ev1 := cont_ev1 + DB_Geral.fieldbyname(´H.E. 50¬´).asfloat;
end;
O problema é ali onde tá ´Db_Geral´, ali devo colocar o Name (Db_Geral), o TableName (Tab_Func.db) ou o que? a propósito tentei com esses dois usando a sintaxe acima e nas duas deu erro indicando que o operador não é aplicavel... o que estou fazendo está correto?
Grato pela atenção e pela paciência...
Gostei + 0
11/12/2003
Rafael Heise
function ReturnSum(aDataSet: TDataSet; aField: string): extended; var soma: extended; loc: TBookmark; begin soma := 0; aDataSet.DisableControls; loc := aDataSet.GetBookmark; aDataSet.First while aDataSet is not eof do begin soma := soma + aDataSet.FieldByName(aField).AsFloat; aDataSet.Next; end; if aDataSet.IsValidBookmark(loc) then aDataSet.GotoBookmark(loc); aDataSet.EnableControls; end;
esse código retorna a soma de todos os campos da uma determinada tabela. Coloque essa função na sua unit, e então passe os devidos parâmetros.
O retorna é para uma variável do tipo extended.
valeu!
Gostei + 0
11/12/2003
Maluco Tubaina
Ow, o código q vc me passou ajudou legal, porém a linha ´while TABELA is not eof do´ continua com problema: ela não é aceita pelo compilador que indica ´Operator not applicable to thys operand type´, e isto está impedindo o procedimento de varredura da tabela...
vc faz ideia do que está acontecendo? o nome do meu dataset é DB_Geral, é ele que eu devo colocar onde está escrito TABELA, não é?
espero que possa me ajudar...
grato pela paciencia e pela paciencia...
Gostei + 0
11/12/2003
Maurício Santos
Supondo que vc tenha um edit para exibir o resultado da soma, faça assim:
var
Total: Currency;
begin
Total := 0;
tabela.DisableControls;
try
while not tabela.EOF do
begin
Total := Total + tabela.FieldByName
(´NomeDoCampoASomar´).AsCurrency;
tabela.Next;
end;
finally
tabela.EnableControls;
Edit1.Text := FormatFloat(´#,0.00´, Total);
end;
end;
Espero ter ajudado
[]´s
Gostei + 0
12/12/2003
Rafael Heise
Gostei + 0
12/12/2003
Maluco Tubaina
agradeço ao Zerneo pelos códigos, mas fiz algumas alterações deixando o código mais enxuto e funcional, pois o q preciso é coisa simples... e agradeço ao Santos por ter dado a ideia do ´while not Tabela.eof do´, pois estava tentando usar o ´while Tabela is not eof do´ e o programa não rodava...
Porém agora surgiu outra dúvida...
Tenho essa Tabela principal num FormA e tenho os Edits que gera o total dos campos em outro FormB, até aí tudo bem, tá rodando legalzinho, o problema é que eu abro o programa e a tabela tá com um valor X, clico num button pra abrir o formB e os valores estão corretos nos edits...
só que na hora que eu fecho esse formB e altero algum valor na tabela, o sistema não atualiza o formB, fazendo com que eu tenha que fechar o programa e reabri-lo para poder atualizar o formB com os totais corretos...
Tem alguma maneira de fazer essa atualização em tempo real de execução? pois era assim que deveria ser...
grato pela atenção e pela paciencia...
Gostei + 0
13/12/2003
Rafael Heise
se você está usando Table.Edit e Table.Post, você em que colocar no AfterPost a chamada para a função DbiSaveChanges(Tabela.Handle);
acho que é isso, ... dai ele vai dizer ao banco de dados que deve realmente gravar, caso contrário, ele só faz isso quando você fecha o programa. Mas se você está fazendo via SQL, dai ele faz direto, não precisa fazer isso!
valeu!
Gostei + 0
16/12/2003
Maluco Tubaina
Bom, no meu caso estou usando apenas um Tabela.First, um while e um Tabela.next dentro deste while... e logo depois mando exibir em edits o resultado...
Tipo assim:
Begin
begin
Cont1 := 0;
Tabela.First;
while not Tabela.eof do
begin
Cont1 := Cont1 + Tabela.FieldByName(´campo da Tabela´).AsFloat;
DB_Geral.Next;
end;
Edt1.Text := FloatToStr(Cont1);
end;
End;
Gostaria de saber como faço a atualização (no caso de inserir um novo dado num campo e exibir em tempo de execução o novo valor), andei tentando com DBiSaveChanges(Tabela.Handle) em várias posições dentro do código e nada, vc faz ideia de como devo fazer já que não uso nenhum table.edit, Table.post ou coisa parecida??
Gostei + 0
16/12/2003
Maluco Tubaina
Bom, no meu caso estou usando apenas um Tabela.First, um while e um Tabela.next dentro deste while... e logo depois mando exibir em edits o resultado...
Tipo assim:
Begin
begin
Cont1 := 0;
Tabela.First;
while not Tabela.eof do
begin
Cont1 := Cont1 + Tabela.FieldByName(´campo da Tabela´).AsFloat;
DB_Geral.Next;
end;
Edt1.Text := FloatToStr(Cont1);
end;
End;
Gostaria de saber como faço a atualização (no caso de inserir um novo dado num campo e exibir em tempo de execução o novo valor), andei tentando com DBiSaveChanges(Tabela.Handle) em várias posições dentro do código e nada, vc faz ideia de como devo fazer já que não uso nenhum table.edit, Table.post ou coisa parecida??
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)