Problemas atualização no Banco usando componentes DBExpress
Estou utilizando componentes de DbExpress: SQLConnection, SQLQuery, DataSetProvider, ClientDataSet.
Esta atualizando localmente, quando verfico no banco de dados as atualizações não feitas. Por favor quem puderm me ajudar agradeço.
procedure TDataModule3.GravaBanco;
var
TD: TTransactionDesc;
begin
if not SQLConnection1.InTransaction then
begin
// TD.TransactionID := 1;
TD.GlobalID := 0;
TD.IsolationLevel := xilREADCOMMITTED;
SQLConnection1.StartTransaction(TD);
end;
try
ClientDataSet1.Post;
ClientDataSet2.ApplyUpdates(-1);
ClientDataSet1.ApplyUpdates(-1);
SQLConnection1.Commit(TD);
ShowMessage(´Gravado com sucesso´);
except
SQLConnection1.Rollback(TD);
raise;
end;
end;
Esta atualizando localmente, quando verfico no banco de dados as atualizações não feitas. Por favor quem puderm me ajudar agradeço.
procedure TDataModule3.GravaBanco;
var
TD: TTransactionDesc;
begin
if not SQLConnection1.InTransaction then
begin
// TD.TransactionID := 1;
TD.GlobalID := 0;
TD.IsolationLevel := xilREADCOMMITTED;
SQLConnection1.StartTransaction(TD);
end;
try
ClientDataSet1.Post;
ClientDataSet2.ApplyUpdates(-1);
ClientDataSet1.ApplyUpdates(-1);
SQLConnection1.Commit(TD);
ShowMessage(´Gravado com sucesso´);
except
SQLConnection1.Rollback(TD);
raise;
end;
end;
Vanilsonvjm
Curtidas 0
Respostas
Vinicius2k
18/06/2004
Vanilson,
Creio que esteja existindo algum [b:b46363596f]erro[/b:b46363596f] no ApplyUpdates dos CDSs... o problema no seu código é que o método ApplyUpdates não gera exceção em caso de erros, este método retorna o número de erros que ocorreram, então Try... Except não surtem efeito...
O que eu uso, por exemplo é verificar se o número de erros foi maior q 0 então aborto, e dou rollback na transação...
Se vc precisar da mensagem de erro do banco, utilize o evento OnReconcileError do CDS... por exemplo:
Não posso afirmar que este seja o problema, mas ao menos vc terá certeza se houve um erro ou não...
Espero ter ajudado...
T+
Creio que esteja existindo algum [b:b46363596f]erro[/b:b46363596f] no ApplyUpdates dos CDSs... o problema no seu código é que o método ApplyUpdates não gera exceção em caso de erros, este método retorna o número de erros que ocorreram, então Try... Except não surtem efeito...
O que eu uso, por exemplo é verificar se o número de erros foi maior q 0 então aborto, e dou rollback na transação...
if CDS.ApplyUpdates > 0 then // houve erro else // não houve erro...
Se vc precisar da mensagem de erro do banco, utilize o evento OnReconcileError do CDS... por exemplo:
Showmessage(E.Message);
Não posso afirmar que este seja o problema, mas ao menos vc terá certeza se houve um erro ou não...
Espero ter ajudado...
T+
GOSTEI 0
Paulomad
18/06/2004
Se vc estiver utilizando Delphi 7 o DBExpress está realmente com esse e outros bugs, veja no link abaixo a listagem que a Borland publicou, esse e outros bugs serão corrigidos no update para o Delphi 7.1
http://community.borland.com/article/0,1410,32337,00.html
Falou!
http://community.borland.com/article/0,1410,32337,00.html
Falou!
GOSTEI 0
Vanilsonvjm
18/06/2004
Agradeço aos colegas que me enviaram as dicas, elas vão me ajudar a formular novamente o meu código.
Obrigado!
Vanilsonvjm
Obrigado!
Vanilsonvjm
GOSTEI 0