Fiz o que Alineri sugeriu e a princípio funciona. Ou seja, para operações de Insert, Delete e Update usar TSQLQuery e para operação de Select usar TSQLDataSet. Particularmente, não gostei desse resultado, mas no momento terá de ficar assim.
Luciano Calenzani Simões ----- Mensagem original ---- De: Luciano Calenzani Simões <[EMAIL PROTECTED]> Para: delphi-br@yahoogrupos.com.br Enviadas: Sexta-feira, 30 de Maio de 2008 20:16:18 Assunto: Res: [delphi-br] DBExpress x FireBird 2 x UIB FireBird15 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! 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]