GARANTIR DESCONTO

Fórum Muitas Dúvidas no DbGrid... #198230

01/12/2003

0

E aí blz?

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

Maluco Tubaina

Responder

Posts

01/12/2003

Rafael Heise

Para somar, você pode fazer um while not eof da tabela e somar os valores, ou buscar via SQL fazendo um SUM(CAMPO).
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...


Responder

Gostei + 0

02/12/2003

Maluco Tubaina

Putz! Valeu pela dica... mas teria como vc me explicar melhor a parte da criação dos campos no Qreport??? A parte de colocar os QRBDText e setar eu fiz, porém não estou conseguindo exibir os valores da tabela no relatório....


valeu pela força...


Responder

Gostei + 0

03/12/2003

Rafael Heise

Extamente o que você não conseguiu fazer?


Responder

Gostei + 0

03/12/2003

Maluco Tubaina

Bom, agradeço pela atenção e vamos ao que interessa:

-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...


Responder

Gostei + 0

03/12/2003

Rafael Heise

Bom, faça como eu falei, ao abrir a form, de um while not eof no data set da grid e faça as devidas somas para cada coluna que você quer..
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


Responder

Gostei + 0

11/12/2003

Maluco Tubaina

E aí, blz???

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...


Responder

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!


Responder

Gostei + 0

11/12/2003

Maluco Tubaina

E aí blz?
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...


Responder

Gostei + 0

11/12/2003

Maurício Santos

Olá!!!

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


Responder

Gostei + 0

12/12/2003

Rafael Heise

Não troca os nomes das coisas da função que te passei. Deixa como tá. ele não compilou porque faltou um ´;´ depois do first, logo em cima do while. Coloca que vai funcionar. é que eu não coloca no delphi pra ver se funciona ou não o código. beleza? dai fica mais fácil pra você! =) valeu!


Responder

Gostei + 0

12/12/2003

Maluco Tubaina

Putz! valeu mesmo pelas dicas! consegui fazer esse maldito negócio rodar legal...
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...


Responder

Gostei + 0

13/12/2003

Rafael Heise

desculpe pelo Table is not eof, foi mal, estava com pressa e nem percebi a cagada que eu fiz...
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!


Responder

Gostei + 0

16/12/2003

Maluco Tubaina

Ow, e aí, blz?
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??


Responder

Gostei + 0

16/12/2003

Maluco Tubaina

Ow, e aí, blz?
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??


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar