Oi Eduardo,

Isso depende, porque o execsql e uma instrucao que ira gerar
"gravacao" no banco essa "gravacao"  ainda nao esta salva, quando
inicio uma transacao comecamos a salvar essa "gravacao" identificando
atraves da transacao ( id transaction ) depois termino de salvar dando
um commit.

quando o Default Transaction = TACommit; sempre que um dataset for
fechado ele vai dar um commit; se voce chamar uma transacao em
seguida, vai dar erro, porque nao podemos iniciar transacoes em
tabelas fechadas.

no caso do nosso amigo que esta utilizando sqldatasets para as
operacoes insert , delete, update e consulta, para dar um rollback
utilizando o exemplo que passei seria assim


try 
  dataset1.close;
  
  Sqldataset1.commandtext := 'insert .....';
  Sqldataset1.parambyname( .....

  SqlDataSet.ExecSQL;
  MinhaTransacao.TransactionID := 1;
  MinhaTransacao.IsolationLevel := xilREPEATABLEREAD;
  SQLConnection.StartTransaction(Transacao)
  SQLConnection.Commit(Transacao);

  SqlDataSet.Close;


Except
  on Exc:Exception do
   begin
    SQLConnection.Rollback(Transacao);
    MessageDlg('Erro:'+#10#10+Exc.Message,mtError,[mbOK],0); 
   end; 
end;

dessa forma temos tudo transacoes commit e rollback

voltando ao assunto de compilar uma nova dll , se alguem tiver o
delphi 7 por ai, tenta compilar novamente essa dll da UIB novamente
para verificar se tiveram realmente melhorias ou nao

volto a dizer que o driver que utilizo e o UIB trabalho com meus
sistemas com o formato que coloquei acima com campos blob e esta tudo
funcionando

mas confesso que se tivesse grana hoje compraria o drive da crlab,
testei o demo, e o muito bom

um forte abarco a todos
[]s
alineri
  








--- Em delphi-br@yahoogrupos.com.br, "Eduardo Silva dos Santos"
<[EMAIL PROTECTED]> escreveu
>
> >>>Faca o seguinte:
> 
> >>> SQLDataSet1. CommandText := 'insert into table (codigo) values (1)';
> >>> SQLDataSet1. ExecSQL;
> >>> StartTransaction;
> >>> commit;
> 
> Olá Alineri... Startar a transação depois de executar o comando não faz
> sentido.. e se quiser fazer um rollback..??
> 
> 2008/5/30 alineri <[EMAIL PROTECTED]>:
> 
> >   Ola Luciano,
> >
> > Estou utilizando firebird 2.1 + dbexpress com o Driver da UIB
> > E esta tudo funcionando perfeitamente, inclusive campos Blobs.
> >
> > Vamos aos seu problema primeiro.
> >
> > Realmente o seu codigo utilizando o driver do Interbase funciona Ok, a
> > diferenca acredito que esta realmente na forma como ambos os drivers
> > tratam as transacoes no dbexpress.
> >
> > Faca o seguinte:
> >
> > SQLDataSet1. CommandText := 'insert into table (codigo) values (1)';
> > SQLDataSet1. ExecSQL;
> > StartTransaction;
> > commit;
> >
> > basta voce startar a transacao apos o execsql e nao antes.
> >
> > essa foi a unica diferenca que encontrei dos drivers para IB e FB.
> >
> > Blobs funcionam normalmente com o drive da UIB
> >
> > Testa ai e verifica se vai funcionar.
> >
> > Em relacao ao close comitar esse problema nao sei como resolver
> > principalmente se estiver setado no driver da UIB Default Transaction
> > = TACommit, ele vai comitar assim que o close for chamado.
> >
> > a unica forma para evitar seria ao dar um open em uma consulta
> > relalizar todos os procedimentos dentro das suas rotinas e ao termino
> > da um close.
> >
> > um problema que estou tendo e para compilar a a dll da UIB
> > http://www.progdigy.com/modules.php?name=UIB
> >
> > existe um pacote novo a UIB2.1 ( componente de acesso ) so que essa
> > dll utiliza as implementacoes desse pacote de componentes que ja esta
> > adaptado para firebird 2.x, entao acredito que eeses error devam estar
> > corrigidos, o problema e que nao consigo compilar,utilizo o BDS 2006,
> > e nao reconhece o tipo de dados DBINAME e OIDViewFields no BDS 2006
> > existe DBINAME32 e OIDViewField se altero no font a Dll e gerada
> > normalmente mas nao funciona.
> >
> > Em alguns foruns ja verifiquei que a Dll consegue ser compilada sem
> > problemas na versao 7 do Delphi que nao tenho no momento. Um detalhe
> > antes de compilar o pacote da UIB e compilar a Dll e necessario
> > instalar o pacote SynEdit disponivel no link abaixo
> >
> >
http://sourceforge.net/project/downloading.php?group_id=3221&use_mirror=ufpr&filename=SynEdit-2_0_6.zip&75620534
> >
> > quem sabe se com esse compilacao o problema de controle de transacao
> > nao esta resolvido ?
> >
> > um forte abarco a todos
> >
> > []s
> > alineri
> >
> > --- Em delphi-br@yahoogrupos.com.br <delphi-br%40yahoogrupos.com.br>,
> > Luciano Calenzani Simões
> > <simoesluciano@> escreveu
> > >
> > > Ninguém passou por este problema?
> > > Alguém está usando FireBirs 2 com esse driver UIB FireBird15?
> > >
> > > Luciano Calenzani Simões
> > >
> > >
> > >
> > >
> > >
> > > ----- Mensagem original ----
> > > De: Luciano Calenzani Simões <simoesluciano@>
> > > Para: delphi-br@yahoogrupos.com.br <delphi-br%40yahoogrupos.com.br>
> > > Enviadas: Quinta-feira, 29 de Maio de 2008 19:39:41
> > > Assunto: [delphi-br] DBExpress x FireBird 2 x UIB FireBird15
> > >
> > >
> > > O UIB FireBird15 para DBExpress com FireBird 2 tem problemas no
> > gerenciamento de transação. Além daquele do campo BLOB já relatado
> > nesta lista.
> > >
> > > Explico: Se dentro do contexto da transação tiver um
> > SQLDataSet/SQLQuery /... fazendo um select em uma tabela, ao executar
> > o SQLDataSet.Close ele" commita" a transação, e continua o
> > procedimento normalmente. Se ocorrer algum erro após esse
> > SQLDataSet.Close, as operações de I/O que foram feitas no início não
> > serão desfeitas, mesmo sendo executado o RoolBack. Não deve estar
> > acreditando, na hora eu também não acreditei.
> > >
> > > Fiz um teste com o mesmo código com o dirver Interbase e funciona
> > perfeitamente. Mas esse driver não funciona perfeitamente com o
> > FireBird 2.
> > > Isso só acontece com operação de SELECT, se dentro da transação só
> > tiver INSERT, UPDATE e DELETE irá funcionar perfeitamente.
> > >
> > > Código exemplo (síntese):
> > >
> > > begin
> > > ...
> > > StartTransaction;
> > > try
> > > SQLDataSet1. CommandText := 'insert into table (codigo) values (1)';
> > > SQLDataSet1. ExecSQL;
> > > SQLDataSet1. Close;
> > >
> > > SQLDataSet1. CommandText := 'select * from table';
> > > SQLDataSet1. Open;
> > > SQLDataSet1. Close; // Aqui ele comita a transação automaticamente.
> > >
> > > // Quando chegar aqui, o 1º insert já está comitado, se houver erro
> > daqui para frente ele não será desfeito.
> > > SQLDataSet1. CommandText := 'insert into table (codigo) values (2)';
> > > SQLDataSet1. ExecSQL;
> > > SQLDataSet1. Close;
> > >
> > > CommitWork;
> > > except
> > > RollBack;
> > > end;
> > > end;
> > >
> > > Luciano Calenzani Simões
> > >
> > >
> > >
> > > Abra sua conta no Yahoo! Mail, o único sem limite de espaço
> > para armazenamento!
> > > http://br.mail.yahoo.com/
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> >
> >  
> >
> 
> 
> 
> -- 
> .......................................................
> Eduardo Silva dos Santos
> DRD Sistemas.
> (27) 3218-4201
> MSN: [EMAIL PROTECTED]
> Site: http://www.drdsistemas.com.br/
> .......................................................
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>


Responder a