Cliente / Servidor [DBExpress Firebird ] Delphi 7
13/01/2006
0
cadastro na minha aplicação : ´DBEXPRESS ERROR: DUPLICATE TRANSACTION
ID´. Segue abaixo o meu código:
Pesquisei muito pela net, em busca de bons tutoriais sobre o
DBexpress, mas nunca encontro nada, nem mesmo em inglês, se alguém
souber onde encontrar uma boa apostila, por favor me avisem.
unit UFuncoes;
var
Transacao : TTransactionDesc;
implementation
// Cadastrar novo
procedure NewReg(aux: TClientDataSet);
begin
try
Transacao.TransactionID := 1;
Transacao.IsolationLevel := xilREPEATABLEREAD;
DM.SQLConnection1.StartTransaction(Transacao);
aux.Insert;
aux.FieldByName(´CODIGO´).AsInteger := MaxInt;
except
on Exc:Exception do
begin
ShowMessage(´Ocorreu um erro na tentativa de inclusão do
registro: ´ + Exc.Message);
DM.SQLConnection1.Rollback(Transacao);
end;
end;
end;
/ Confirmar o Registro atual
procedure ConfirmReg(aux: TClientDataSet);
var
r: integer;
begin
try
Transacao.TransactionID := 1;
Transacao.IsolationLevel := xilREPEATABLEREAD;
DM.SQLConnection1.StartTransaction(Transacao);
aux.ApplyUpdates(0);
r := aux.RecNo;
DM.TVendedores.Close;
DM.TVendedores.Open;
aux.Refresh;
aux.RecNo := r;
except
on Exc:Exception do
begin
ShowMessage(´Ocorreu um erro na tentativa de inclusão do
registro: ´ + Exc.Message);
DM.SQLConnection1.Rollback(Transacao);
end;
end;
end;
// Deletar o registro atual
procedure DelReg(aux: TClientDataSet);
begin
try
Transacao.TransactionID := 1;
Transacao.IsolationLevel := xilREPEATABLEREAD;
DM.SQLConnection1.StartTransaction(Transacao);
if aux.RecordCount = 0 then
MessageDlg(´Tabela Vazia!´,mtWarning,[mbOK],0)
else
if MessageDlg(´Deseja realmente apagar este registro?´,
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
aux.Delete;
aux.ApplyUpdates(0);
DM.SQLConnection1.Commit(Transacao);
end;
except
on Exc:Exception do
begin
ShowMessage(´Ocorreu um erro na tentativa de exclusão do
registro: ´ + Exc.Message);
DM.SQLConnection1.Rollback(Transacao);
end;
end;
end;
// Edita o registro atual
procedure EditReg(aux: TClientDataSet);
begin
try
Transacao.TransactionID := 1;
Transacao.IsolationLevel := xilREPEATABLEREAD;
DM.SQLConnection1.StartTransaction(Transacao);
aux.Edit;
DM.SQLConnection1.Commit(Transacao);
except
on Exc:Exception do
begin
ShowMessage(´Ocorreu um erro na tentativa de alteração do
registro: ´ + Exc.Message);
DM.SQLConnection1.Rollback(Transacao);
end;
end;
end;
Abraços!
Daniellqueiroz
Posts
13/01/2006
Thomaz_prg
14/01/2006
Renatacoimbra
...
16/01/2006
Daniellqueiroz
Abraços!
16/01/2006
Thomaz_prg
17/01/2006
Daniellqueiroz
Dai, ficou bem simples o código, como vcs podem ver:
// Cadastrar novo
procedure NewReg(aux: TClientDataSet);
begin
try
aux.Append;
except
on Exc:Exception do
MessageDlg(´Ocorreu um erro na tentativa de inclusão do registro: ´+ Exc.Message,mtError,[mbOK],0)
end;
end;
procedure CancelReg(aux: TClientDataSet);
begin
try
aux.cancel;
except
on Exc:Exception do
MessageDlg(´Ocorreu um erro na tentativa de cancelamento do registro: ´+ Exc.Message,mtError,[mbOK],0)
end;
end;
procedure ConfirmReg(aux: TClientDataSet);
begin
try
aux.Post;
aux.ApplyUpdates(0); // Grava os dados no servidor
aux.Close;
aux.Open; // Atualiza os dados p/ visualização
except
on Exc:Exception do
MessageDlg(´Ocorreu um erro na tentativa de confirmação do registro: ´+ Exc.Message,mtError,[mbOK],0)
end;
end;
// Deletar o registro atual
procedure DelReg(aux: TClientDataSet);
begin
try
if aux.RecordCount = 0 then
MessageDlg(´Tabela Vazia!´,mtWarning,[mbOK],0)
else
if MessageDlg(´Deseja realmente apagar este registro?´, mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
aux.Delete;
aux.ApplyUpdates(0);
end;
except
on Exc:Exception do
MessageDlg(´Ocorreu um erro na tentativa de exclusão do registro: ´+ Exc.Message,mtError,[mbOK],0)
end;
end;
// Edita o registro atual
procedure EditReg(aux: TClientDataSet);
begin
try
aux.Edit;
aux.ApplyUpdates(0);
except
on Exc:Exception do
MessageDlg(´Ocorreu um erro na tentativa de edição do registro: ´+ Exc.Message,mtError,[mbOK],0)
end;
end;
Uma forma bem simples, e que resolveu o problema. Pelo menos aqui, está tudo funcionando corretamente.
Obrigado a todos pela força!!
Clique aqui para fazer login e interagir na Comunidade :)