Re: [firebase-br] Transações & Driver UIBDBExp12Win32
Francisco Thiago de Almeida
jeandeadlucky em yahoo.com.br
Qui Jan 27 09:34:58 -03 2005
Recentemente tive de retirar o Driver da UIB para FB1.5 pq ele estava
gerando sql com erros.. eu não conseguia apagar / editar nenhum registro...
Era uma aplicação Multitier usando SOAP
Extranho né?
Thiago
----- Original Message -----
From: "Rodrigo Schiavo" <schiavor em uol.com.br>
To: <delphi-br em yahoogrupos.com.br>; <lista em firebase.com.br>
Sent: Thursday, January 27, 2005 1:52 AM
Subject: [firebase-br] Transações & Driver UIBDBExp12Win32
Olá amigos.
Hoje resolvi um problema de validações de dados usando uma transação
e uma coisa muito incomum ocorreu.
No meu projeto de teste estava utilizando DBExpress com driver
Interbase e banco de dados Firebird, tudo funcionou corretamente. Porém
ao implementar a solução em meu projeto principal que também utiliza
DBExpress e banco Firebird mas os drivers são da UIB quando era gerada
uma exceção a mesma transação não efetuava o Rollback dos dados
permitindo que inconsistências fossem geradas.
Só consegui resolver este problema mudando o driver do meu projeto
principal para Interbase o que não é aconselhavel uma vez que este
driver não é mais 100% compativel com Firebird, alguém ja passou por isso?
Abaixo segue a configuração dos componentes e a rotina que estava
sendo utilizada:
CONEXAO UTILIZANDO DRIVER INTERBASE
conBase: TSQLConnection
ConnectionName = 'IBConnection'
DriverName = 'Interbase'
GetDriverFunc = 'getSQLDriverINTERBASE'
LibraryName = 'dbexpint.dll'
LoginPrompt = False
Params.Strings = (
'DriverName=Interbase'
'Database=Teste.fdb'
'RoleName=RoleName'
'User_Name=sysdba'
'Password=masterkey'
'ServerCharSet='
'SQLDialect=3'
'ErrorResourceFile='
'LocaleCode=0000'
'BlobSize=-1'
'CommitRetain=False'
'WaitOnLocks=True'
'Interbase TransIsolation=ReadCommited'
'Trim Char=False')
VendorLib = 'gds32.dll'
CONEXAO UTILIZANDO DRIVER UIB
conBase: TSQLConnection
ConnectionName = 'UIB FireBird15 Connection'
DriverName = 'UIB FireBird15'
GetDriverFunc = 'getSQLDriverINTERBASE'
LibraryName = 'dbexpUIBfire15.dll'
LoginPrompt = False
Params.Strings = (
'BlobSize=-1'
'CommitRetain=False'
'Database=database.fdb'
'DriverName=UIB FireBird15'
'ErrorResourceFile='
'LocaleCode=0000'
'Password=masterkey'
'RoleName=RoleName'
'ServerCharSet='
'SQLDialect=3'
'Interbase TransIsolation=ReadCommited'
'User_Name=SYSDBA'
'WaitOnLocks=True')
VendorLib = 'fbclient.dll'
PROCEDIMENTO
procedure TForm1.Gravar(var cds: TClientDataSet);
var
TD: TTransactionDesc;
begin
Application.ProcessMessages;
if not (cds.State in [dsInsert, dsEdit]) then Exit;
TD.TransactionID := 1;
TD.IsolationLevel := xilREADCOMMITTED;
conBase.StartTransaction(TD);
try
cds.Post;
cds.ApplyUpdates(0);
conBase.Commit(TD);
except
conBase.Rollback(TD); >>>>>>>>>>>>>>>>>> ESTE ROLLBACK NÃO É
EXECUTADO COM DRIVER UIB
cds.Edit;
raise;
end;
end;
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Mais detalhes sobre a lista de discussão lista