Ver Mensaje Individual
  #18  
Antiguo 22-08-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Reputación: 19
Chris Va por buen camino
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

// TODO: lee en la ayuda de Delphi sobre "Threadvar"
threadvar
    ZConnection; TZConnection;
    ZQuery: TZQuery;

{$R *.DFM}

{ ~~~~~~~~~~~~~~~~~~~~          THilo          ~~~~~~~~~~~~~~~~~~~~ }

constructor THilo.Create( Suspendido: Boolean );
begin
    inherited Create( Suspendido );
    // Quizas tuviera que crear un objeto TList con un database, transaction y tabla
    // para cada ejecución del hilo
    // R:/ NO ES NECESARIO, HASTA DÓNDE VEO TU CASO, ADEMÁS TE COMPLICARÍAS LAS COSAS.
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;

{ ~~~~~~~~~~~~~~~~~~~~          THPrueba          ~~~~~~~~~~~~~~~~~~~~ }

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
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita