Acabo de generar este código, con Firebird 2.1 y componentes IBX, y me funciona perfectamente, sin problema alguno :
Código Delphi
[-]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, IBCustomDataSet, IBDatabase, StdCtrls;
type
THilo = class(TThread)
private
Hilo_DataBase: TIBDatabase;
Hilo_Transact: TIBTransaction;
Hilo_Tabla: TIBDataSet;
procedure ActualizaMemo;
public
CadenaMostrar: string;
protected
procedure Execute; override;
end;
TForm1 = class(TForm)
IBDatabase1: TIBDatabase;
IBTransaction1: TIBTransaction;
IBDataSet1: TIBDataSet;
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
Num_Hilo : Integer;
public
end;
var
Form1: TForm1;
Hilo1: THilo;
Hilo2: THilo;
implementation
{$R *.dfm}
procedure THilo.Execute;
var
i, j : Integer;
Aux_Date, Aux_Date2 : TDateTime;
Aux_Valid : Boolean;
Count_Categ : Integer;
Count_SubCat : Integer;
begin
Hilo_Database := TIBDatabase.Create(nil);
Hilo_Database.DatabaseName := 'MiBasedeDatos';
Hilo_Database.LoginPrompt := False;
Hilo_Database.Params.Clear;
Hilo_Database.Params.Add( 'user_name=SYSDBA' );
Hilo_Database.Params.Add( 'lc_ctype=ISO8859_1' );
Hilo_Database.Params.Add( 'password=masterkey' );
Hilo_Database.SQLDialect := 3;
Hilo_Database.Connected := True;
Hilo_Transact := TIBTransaction.Create(nil);
Hilo_Transact.DefaultDataBase := Hilo_DataBase;
Hilo_Transact.DefaultAction := TARollback;
Hilo_Transact.Params.Clear;
Hilo_Transact.Params.Add( 'read_committed' );
Hilo_Transact.Params.Add( 'rec_version' );
Hilo_Transact.Params.Add( 'nowait' );
Hilo_Transact.StartTransaction;
Hilo_Tabla := TIBDataSet.Create(nil);
Hilo_Tabla.Transaction := Hilo_Transact;
Hilo_Tabla.SelectSQL.Clear;
Hilo_Tabla.SelectSQL.Add( 'Select NOMBRE, APELLIDO from CLIENTES' );
Hilo_Tabla.Prepare;
Hilo_Tabla.Open;
while not Hilo_Tabla.Eof do begin
CadenaMostrar := Hilo_Tabla.Fields[0].AsString + ' ' +
Hilo_Tabla.Fields[1].AsString;
Synchronize(ActualizaMemo);
Sleep(1000);
Hilo_Tabla.Next;
end;
Cadenamostrar := 'Fin de Fichero';
Synchronize(ActualizaMemo);
end;
procedure THilo.ActualizaMemo;
begin
Form1.Memo1.Lines.Add(CadenaMostrar);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Num_Hilo = 1 then begin
Hilo1 := THilo.Create( True );
Hilo1.FreeOnTerminate := False;
Hilo1.Resume;
Num_Hilo := 2;
end;
if Num_Hilo = 2 then begin
Hilo2 := THilo.Create( True );
Hilo2.FreeOnTerminate := False;
Hilo2.Resume;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Num_Hilo := 1;
end;
end.