Fórum Dbexpress - Transações ID #326570
31/07/2006
0
Então fiquei com dúvida se a minha forma de trabalhar com as transações está deixando o ID em aberto.
Abaixo um exemplo do código que utilizo para inserir atualizar e excluir,caso existam erros por favor me ajude a corrigi-los.
Insert
TD.TransactionID:=1;
TD.IsolationLevel:=xilREADCOMMITTED;
Dm.Database.StartTransaction(TD);
Dm.Qry_Sql.Close;
Dm.Qry_Sql.CommandText:=
´INSERT INTO TESTE´+#13+
´(TESTE) ´+13+
´VALUES ´+13+
´ (:Teste)´;
Dm.Qry_Sql.ParamByName(´Teste´).AsString:=Trim(Edt_Teste.Text);
Dm.Qry_Sql.ExecSQL;
Dm.Database.Commit(TD);
Update
TD.TransactionID:=2;
TD.IsolationLevel:=xilREADCOMMITTED;
Dm.Database.StartTransaction(TD);
Dm.Qry_Sql.Close;
Dm.Qry_Sql.CommandText:=
´ UPDATE TESTE SET ´+#13+
´ TESTE =:Teste,´+13+
´ REGISTRO_TESTE =:Registro_Teste ´+13+
´ WHERE REGISTRO_TESTE=:REGISTRO_TESTE ´;
Dm.Qry_Sql.ParamByName(´Teste´).AsString:=Trim(Edt_Teste.Text);
Dm.Qry_Sql.ParamByName(´Registro_Teste´).AsInteger:=Dm.CD_TesteREGISTRO_Teste.AsInteger;
Dm.Qry_Sql.ExecSQL;
Dm.Database.Commit(TD);
Excluir
TD.TransactionID:=3;
TD.IsolationLevel:=xilREADCOMMITTED;
Dm.Database.StartTransaction(TD);
Dm.Qry_Teste.Close;
Dm.Qry_Teste.CommandText:=´DELETE FROM Teste WHERE REGISTRO_Teste=:REGISTRO_Teste´;
Dm.Qry_Teste.ParamByName(´Registro_Teste´).AsInteger:=Dm.Qry_Teste.ParamByName(´Registro_Teste´).AsInteger;
Dm.Qry_Teste.ExecSQL;
Dm.CD_Teste.Delete;
Dm.CD_Teste.ApplyUpdates(-1);
Dm.Database.Commit(TD);
Obs: Gostaria de saber tambem se existe uma forma de verificar se existe um ID em aberto antes da realização de uma nova transação.
Desde já agradeço a atenção de Todos.
Lnunes
Curtir tópico
+ 0Posts
01/08/2006
Jáder Medeiros
Toda transação de banco de dados DEVE estar dentro de um tratamento de exceção. Esse foi o seu erro. Ex:
TD.TransactionID:= 1; TD.IsolationLevel := xilREADCOMMITTED; Dm.Database.StartTransaction(TD); try Dm.Qry_Sql.Close; Dm.Qry_Sql.CommandText := ´INSERT INTO TESTE´#13´(TESTE)´13´VALUES ´13´ (:Teste)´; Dm.Qry_Sql.ParamByName(´Teste´).AsString := Trim(Edt_Teste.Text); Dm.Qry_Sql.ExecSQL; Dm.Database.Commit(TD) except Dm.Database.Rollback(TD) end
Caso você ainda encontre problemas com transação, detalhe melhor o erro informado.
Gostei + 0
01/08/2006
Jáder Medeiros
Toda transação de banco de dados DEVE estar dentro de um tratamento de exceção. Esse foi o seu erro. Ex:
TD.TransactionID:= 1; TD.IsolationLevel := xilREADCOMMITTED; Dm.Database.StartTransaction(TD); try Dm.Qry_Sql.Close; Dm.Qry_Sql.CommandText := ´INSERT INTO TESTE´#13´(TESTE)´13´VALUES ´13´ (:Teste)´; Dm.Qry_Sql.ParamByName(´Teste´).AsString := Trim(Edt_Teste.Text); Dm.Qry_Sql.ExecSQL; Dm.Database.Commit(TD) except Dm.Database.Rollback(TD) end
Caso você ainda encontre problemas com transação, detalhe melhor o erro informado.
Gostei + 0
01/08/2006
Adriano Santos
Gostei + 0
01/08/2006
Lnunes
o código completo.
Contudo como o restante do código está correto então fico mais tranquilo.
Agradeço a atenção de todos.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)