Problema em ATUALIZAÇÂO NO BD
om galera seguinte, tenho 3 forms e 2 tabelas no
BANCO DE DADOS, u forme de LUCRO que liga com a tabela LUCRO e o FORM
GASTO que liga com a tabela GASTOS, e o 3 form pega o total de lucro que
ta no BD e diminui pelo total de GASTOS , só que quando eu adiciono
alguma coisa na tabela LUCRO ou GASTO esta certinho , eu configo no BD e
esta adicionando na tabela na mesma hora, o problema é o seguinte ,
depois que eu adiciono e vou fazer o calculo no form 3 , ele não pega o
dado que eu coloquei na hora, eu tenho que feixar o form e abrir pro
form 3 identificar o valor que eu coloquei na tabela :S ,
alguem teria uma dica?
alguem teria uma dica?
Jonatan
Curtidas 0
Respostas
Fábio Cruz
14/06/2010
está utilizando ClientDataSet?
Se estiver está dando um ApplyUpdates?
Se estiver está dando um ApplyUpdates?
GOSTEI 0
Jonatan
14/06/2010
está utilizando ClientDataSet?
Se estiver está dando um ApplyUpdates?
Se estiver está dando um ApplyUpdates?
Estou usando ClienteDataSet sim.
não estou dando ApplyUpdates não
GOSTEI 0
Fábio Cruz
14/06/2010
Coloque após o post o applyupdates
GOSTEI 0
Jonatan
14/06/2010
está utilizando ClientDataSet?
Se estiver está dando um ApplyUpdates?
Se estiver está dando um ApplyUpdates?
seguinte eu uso este codigo
Query1. para fazer o select do LUCRO
Query2. para fazer o select do gastos
Query3. para fazer a conexão da busca
Código: procedure TForm5.BitBtn1Click(Sender: TObject);
begin
with IBQuery3 do
begin
close;
sql.clear;
sql.add (' select coalesce(sum(l.valor),0)TOTALLUCROS,');
sql.add (' (select coalesce(sum(g.valor),0) ');
sql.add(' from gastos g ');
sql.add(' where g.data between :data1 and :data2) TOTALGASTOS ');
sql.add(' from lucro l ');
sql.add(' where l.data between :data1 and :data2 ');
ParambyName('data1').asDate := strtodate(MaskEdit1.text);
ParambyName('data2').asDate := strtodate(MaskEdit2.text);
open;
end;
txtlucro.text := FormatFloat('0.00',IBQuery3.Fields[0].AsCurrency);
txtgastos.text := FormatFloat('0.00',IBQuery3.Fields[1].AsCurrency);
txtresultado.text := FormatFloat('0.00',IBQuery3.Fields[0].AsCurrency-IBQuery3.Fields[1].AsCurrency);
end;
GOSTEI 0
Fábio Cruz
14/06/2010
Mas vc está dando o ApplyUpdates após a inclusão dos novos valores?
Pq nesse código vc está realizando a busca fisica no BD. Os novos valores qndo são inseridos pelo ClientDataSet, por padrão, ficam em memória, após fechar ou dar o ApplyUpdates que são efetivados no BD.
Pq nesse código vc está realizando a busca fisica no BD. Os novos valores qndo são inseridos pelo ClientDataSet, por padrão, ficam em memória, após fechar ou dar o ApplyUpdates que são efetivados no BD.
GOSTEI 0
Jonatan
14/06/2010
Mas vc está dando o ApplyUpdates após a inclusão dos novos valores?
Pq nesse código vc está realizando a busca fisica no BD. Os novos valores qndo são inseridos pelo ClientDataSet, por padrão, ficam em memória, após fechar ou dar o ApplyUpdates que são efetivados no BD.
Pq nesse código vc está realizando a busca fisica no BD. Os novos valores qndo são inseridos pelo ClientDataSet, por padrão, ficam em memória, após fechar ou dar o ApplyUpdates que são efetivados no BD.
Assim eu estou dando um COMMIT e não ApplyUpdates.
verifique o codigo aqui
procedure TFormLucro.BitBtn2Click(Sender: TObject);
begin
IBQuery1.close;
IBQuery1.SQL.Text:= ' insert into lucro(descricao,data,valor) values (:p1,:p2,:p3)';
IBQuery1.ParamByName('p1').AsString := Edit1.text;
IBQuery1.ParamByName('p2').AsDate := StrToDate (MaskEdit1.text);
IBQuery1.ParamByName('p3').AsFloat := StrToFloat(Edit3.text);
IbQuery1.execSQL;
IBTransaction1.Commit;
Edit1.Text:= '';
MaskEdit1.Text:= '';
Edit3.Text:= '';
IBQuery2.close;
IBQuery2.Open;
Showmessage('Salvo com Sucesso!!!');
GOSTEI 0