He revisado tu código. Generalmente no he visto ningún problema en él. Pero si lo he reducido para empezar a "debuguear" desde él:
Prueba este código y cualquier error, comparte en gran detalle toda la información del error que se presente, la clase de la excepción, el mensaje y la línea. Por allí ay que empezar
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, Button2011, IBDataBase, IBCustomDataSet, ExtCtrls,
ZConnection, Db, ZAbstractRODataset, ZAbstractDataset, ZDataset;
type
THilo = class(TThread)
private
procedure ActualizaMemo;
procedure PonTag;
public
CadenaMostrar: string;
constructor Create( Suspendido: Boolean );
procedure Execute; override;
end;
THPrueba = class(TForm)
Button20111: TButton2011;
Memo1: TMemo;
Timer1: TTimer;
ZConnection1: TZConnection;
ZQuery1: TZQuery;
procedure Button20111Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
end;
var
HPrueba: THPrueba;
implementation
threadvar
ZConnection; TZConnection;
ZQuery: TZQuery;
{$R *.DFM}
constructor THilo.Create( Suspendido: Boolean );
begin
inherited Create( Suspendido );
end;
procedure THilo.Execute;
begin
try
ZConnection = TZConnection.Create(nil);
ZQuery := TZQuery.Create(nil);
with ZConnection do
begin
Protocol := 'mssql';
DataBase := 'BASE2011QO';
HostName := 'NUEVOJACK\SQLEXPRESS';
LoginPrompt := False;
Password := '';
User := '';
Connected := True;
end;
with ZQuery do
begin
Connection := DataBase;
SQL.Clear;
SQL.Add( 'select * from Articulo' );
Active := True;
while not EoF do
begin
CadenaMostrar := (Fields[ 0 ].AsString + ' ' + Fields[ 1 ].AsString);
Synchronize( ActualizaMemo );
Sleep( 300 );
Next;
end;
end;
finally
ZConnection.Free;
ZQuery.Free;
end;
end;
procedure THilo.ActualizaMemo;
begin
HPrueba.Memo1.Lines.Add( CadenaMostrar );
end;
procedure THilo.PonTag;
begin
HPrueba.Tag := 1;
end;
procedure THPrueba.Button20111Click(Sender: TObject);
var Hilo: THilo;
begin
Hilo := THilo.Create( True );
Hilo.FreeOnTerminate := False;
Hilo.Resume;
Timer1.Enabled := True;
end;
procedure THPrueba.Timer1Timer(Sender: TObject);
begin
Button20111Click( Self );
Timer1.Enabled := False;
end;
end.
Este es tu mismo código, con la misma funcionalidad, nada más que acortado y adaptado para que sea más entendible (por lo menos desde mi punto de vista :P)
Saludos,
Chris