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