Fiz outro teste aqui e se houver algum erro dentro da transação (conversão, campo obrigatório, queda, ...), e não há qualquer SELECT dentro dela, o RollBack funciona perfeitamente.
Tenho lido em alguns fóruns o pessoal reclamando que não faz Rollback, na verdade ele faz sim, desde que não exista qualquer SELECT antes do erro. 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]