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, Luciano Calenzani Simões
<[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]>
> Para: delphi-br@yahoogrupos.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]
>


Responder a