Cris cambie todo el código al metodo execute del hilo.
Gracias por la puntualización del método create del thread, seguro que me servirá para futuras ocasiones.
Ahora se me ha quedado como te indico abajo, pero además he cambiado los componentes de la conexión a los zeos creo que es la versión 6 y además he cambiado de firebird a mssql y tampoco me funciona. No se que pasa, estaría conformado si no se pudiera hacer en ningún caso pero es que he leído que hay algunos programadores que consiguen realizar justamente lo que yo necesito. Me encuentro un poco frustrado llevo muchos días con este problema y no le veo la punta por ningún lado.
Ahí te pongo el nuevo código a ver si me dais alguna pista.
He puesto un timer y dos conexiones con nombre diferente para asegurarme que los componentes son diferentes y se ejecutan los dos a la vez.
El método vermensaje me indica justa en que linea se para el código , en este caso devuelve un error de dirección de memoria.
Muchas gracias de antemano.
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
DataBase: TZConnection;
Tabla: TZQuery;
DataBase1: TZConnection;
Tabla1: TZQuery;
procedure ActualizaMemo;
procedure PonTag;
procedure VerMensaje;
public
CadenaMostrar: string;
constructor Create( Suspendido: Boolean );
procedure Execute; override;
end;
type
THPrueba = class(TForm)
Button20111: TButton2011;
Memo1: TMemo;
Timer1: TTimer;
ZConnection1: TZConnection;
ZQuery1: TZQuery;
procedure Button20111Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
public
end;
var
HPrueba: THPrueba;
implementation
{$R *.DFM}
procedure THilo.Execute;
begin
while Self.Terminated = False do begin
if HPrueba.Tag = 0 then begin
Synchronize( PonTag );
DataBase := TZConnection.Create( nil );
DataBase.Protocol := 'mssql';
DataBase.DataBase := 'BASE2011QO';
DataBase.HostName := 'NUEVOJACK\SQLEXPRESS';
DataBase.LoginPrompt := False;
DataBase.Password := '';
DataBase.User := '';
DataBase.Connected := True;
Tabla := TZQuery.Create( nil );
Tabla.Connection := DataBase;
Tabla.SQL.Clear;
Tabla.SQL.Add( 'select * from Articulo' );
Tabla.Active := True;
while not Tabla.Eof do begin
CadenaMostrar := Tabla.Fields[ 0 ].AsString + ' ' +
Tabla.Fields[ 1 ].AsString;
Synchronize( ActualizaMemo );
sleep( 1000 );
Tabla.Next;
end;
end
else begin
Cadenamostrar := 'ooooooo';
Synchronize( ActualizaMemo );
DataBase1 := TZConnection.Create( nil );
DataBase1.Protocol := 'mssql';
DataBase1.DataBase := 'BASE2011QO';
DataBase1.HostName := 'NUEVOJACK\SQLEXPRESS';
DataBase1.LoginPrompt := False;
DataBase1.Password := '';
DataBase1.User := '';
DataBase1.Connected := True;
Synchronize( Vermensaje );
Tabla1 := TZQuery.Create( nil );
Tabla1.Connection := DataBase;
Tabla1.SQL.Clear;
Tabla1.SQL.Add( 'select * from Articulo' );
Tabla1.Active := True;
while not Tabla1.Eof do begin
CadenaMostrar := Tabla1.Fields[ 0 ].AsString + ' ' +
Tabla1.Fields[ 1 ].AsString;
Synchronize( ActualizaMemo );
sleep( 1000 );
Tabla1.Next;
end;
end;
end;
end;
constructor THilo.Create( Suspendido: Boolean );
begin
inherited Create( True );
end;
procedure THilo.ActualizaMemo;
begin
HPrueba.Memo1.Lines.Add( CadenaMostrar );
end;
procedure THilo.PonTag;
begin
HPrueba.Tag := 1;
end;
procedure THilo.VerMensaje;
begin
showmessage( 'pp' );
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.