Tentou utilizar tsqlquery para executar instruções de insert, update e delete e 
usar o tsqldataset apenas para instruções de select?

  ----- Original Message ----- 
  From: Luciano Calenzani Simões 
  To: delphi-br@yahoogrupos.com.br 
  Sent: Friday, May 30, 2008 4:59 PM
  Subject: Res: [delphi-br] DBExpress x FireBird 2 x UIB FireBird15


  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]



   

[As partes desta mensagem que não continham texto foram removidas]

Responder a