PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Thread não esta funcionando ao executar update? #385187

30/08/2010

0

Pessoal, não conheço quase nada de thread, mais tentei fazer uma aqui para um processo um pouco demorado de update.
É algo que tem que buscar dados que estao com caracteres não mais aceitaveis na tabela e faz a correção, por ser um processo meio demorado coloquei numa thread...Segue

Código: unit uTThreadDefrag;

interface

uses
  Classes, Windows, SysUtils, ZConnection, DB, ZAbstractRODataset, ZAbstractDataset,
  ZDataset, ZSqlProcessor, IdBaseComponent, IdComponent, IdIPWatch,
  ZStoredProcedure, Forms, Messages, Dialogs,  MaskUtils, Controls,
  IBDatabase, IBCustomDataSet, IBQuery, ActiveX;

type
  ThreadDefrag = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  public
    constructor Executar(qQuery: TZQuery);   
  end;

implementation

uses udm, uprincipal;

{ Important: Methods and properties of objects in visual components can only be
  used in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure Thread.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ Thread }

constructor ThreadDefrag.Executar(qQuery: TZQuery);
begin
  inherited Create(True);
  FreeOnTerminate := True;
  Resume;
end;

procedure ThreadDefrag.Execute;
var
  qQuery : TZQuery;
begin
  CoInitialize(nil);
  try
    qQuery := TZQuery.Create(nil);
    qQuery.Connection := dm.connection;
    try
      with qQuery do
      begin
        Close;
        SQL.Clear;
        SQL.Add('update ordemserv x set x.nrordemserv = (  ');
        SQL.Add('select resultado from sonumeros(x.nrordemserv))');
        ExecSQL;
        dm.connection.Commit;
        ShowMessage('Processo de Desfragmentação executado com sucesso.');
      end;
    except
      on e:Exception do
      begin
        dm.connection.Rollback;
        raise exception.Create('Erro! Falha ao executar o Defrag. Processo encerrado.'+e.Message);
      end;
    end;
  finally
    CoUninitialize;
  end;
  { Place thread code here }
end;

end.

Mais ela esta travando não deixando eu entrar em outro form, as vezes esta dando erro ao fechar o aplicativo, e tamb´me não esta executar o showmessage...No debug executa...

Esta errado esta threads, ou falta algo?

O comando sql esta certo, apenas a thread que não esta de acordo.

Estou chamando ela assim

Código:  ThreadDefrag.Executar(querylocal) Então, quando aciono a thread e fico fazendo outra coisa, e depois quero sair do sistema, está trazendo este erro:

"Exception EOSError in module Project1.exe at 00012BA2
System Error Code 1400
O identificado da janela é inválido"
Adriano Dolce

Adriano Dolce

Responder

Posts

11/09/2010

Adriano Dolce

Não foi resolvido ainda...
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar