Obrigado pela atenção pessoal.

Inicialmente farei o teste de usar SQLQuery para os Inserts, Updats e Deletes e 
SQLDataSet para os Selects como o Sandro sugeriu.

Eu tinha feito um teste usando tudo SQLQuery mas ocorre o mesmo problema. 
Mesclando os dois tipos (SQLQuery - SQLDataSet) ainda não testei.

Em seguida farei os testes que o Alineri sugeriu. Vejo alguns problemas 
relacionados ao meu projeto, principalmente porque em alguns métodos, são 
disparados vários outros métodos de outras classes, que por sua vez poderão ter 
SELECTs. Vou estudar esse parâmetro UIB Default Transaction = TACommit que você 
citou.

Eduardo, também fiquei intrigado com o StartTransaction após um ExecSQL. Creio 
que no meu caso isso não servirá, porque tenho vários ExecSQLs dentro de uma 
única transação.


Estou pensando até em usar o FireBird 1.5 com o driver do Interbase.
 Luciano Calenzani Simões





----- Mensagem original ----
De: alineri <[EMAIL PROTECTED]>
Para: delphi-br@yahoogrupos.com.br
Enviadas: Sexta-feira, 30 de Maio de 2008 19:32:40
Assunto: Re: Res: [delphi-br] DBExpress x FireBird 2 x UIB  IMPORTANTE LEIAM 
POR FAVOR


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 [EMAIL PROTECTED] os.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: [EMAIL PROTECTED] os.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