GARANTIR DESCONTO

Fórum Problemas na liberação de Thread #563985

11/10/2016

0

Olá meus amigos, estou tendo o famoso "Access Violation" ao finalizar o aplicativo enquanto a Thread está sendo executada, mais exatamente na hora de conectar com o banco de dados, estou criando todos os componentes em tempo de execução ( FDConnection, FDTransaction, etc.). A impressão que passa é de que o Aplicativo em si é liberado antes mesmo da Thread, ocasionando tal problema. O que poderia fazer para livrar-me desse erro inconveniente?

Segue código da Thread para análise, toda ajuda é bem vinda.

Agradeço.
Chamada Thread:
procedure TFConsulta.BitBtn1Click(Sender: TObject);
var   tr : TUThreadIE;
begin
   Try
      Application.ProcessMessages;
      tr := TUThreadIE.Create;
	   tr.Resume;
   Except
   End;
end;


Thread:
unit UThreadIE;

interface

uses
  Classes, SysUtils, StdCtrls, SyncObjs, Dialogs,

  FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Error, FireDAC.UI.Intf,DB,
  FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Comp.ScriptCommands, FireDAC.Stan.Util,
  FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, FireDAC.Phys.FBDef, FireDAC.VCLUI.Wait, FireDAC.Comp.UI,
  FireDAC.Phys.IBBase, FireDAC.Phys.FB, FireDAC.Comp.DataSet, FireDAC.Comp.Client, FireDAC.Comp.Script

  ;


type
  TUThreadIE = class(TThread)
  private
    FTexto, FBanco, FSQL : String;
    SessaoCritica: TcriticalSection;
    // coenxão base PP
    IBQ1CriadoPP : TFDQuery;
    IBQ2CriadoPP : TFDQuery;
    IBQ3CriadoPP : TFDQuery;
    IBQ4CriadoPP : TFDQuery;
    IBQ5CriadoPP : TFDQuery;
    IBQ6CriadoPP : TFDQuery;
    IBDCriadoPP : TFDConnection;
    IBTCriadoPP : TFDTransaction;
    // conexão base sistema local
    IBQ1CriadoSistemaLocal : TFDQuery;
    IBQ2CriadoSistemaLocal : TFDQuery;
    IBQ3CriadoSistemaLocal : TFDQuery;
    IBQ4CriadoSistemaLocal : TFDQuery;
    IBQ5CriadoSistemaLocal : TFDQuery;
    IBQ6CriadoSistemaLocal : TFDQuery;
    IBQ7CriadoSistemaLocal : TFDQuery;
    IBDCriadoSistemalocal : TFDConnection;
    IBTCriadoSistemaLocal : TFDTransaction;

    List : tstringlist;

    FMemo : TMemo;
  private
    { Private declarations }
  protected
    procedure Execute; override;
  public
    constructor Create;
    destructor Destroy; override;
  end;

implementation

uses
  Forms, UDataM, UConsulta;

constructor TUThreadIE.Create;
begin
   inherited Create(True);
   FreeOnTerminate := True;
end;


procedure TUThreadIE.Execute;
var
  arq : TextFile;
  vcount : Integer;
  Server, V : String;
begin
   Priority := tpTimeCritical;
   // criação e conexão com base PP
   if not Terminated then
   begin
      IBDCriadoPP := TFDConnection.Create(Application);
      IBTCriadoPP := TFDTransaction.Create(IBDCriadoPP);
      IBQ1CriadoPP := TFDQuery.Create(IBDCriadoPP);
      IBQ2CriadoPP := TFDQuery.Create(IBDCriadoPP);
      IBQ3CriadoPP := TFDQuery.Create(IBDCriadoPP);
      IBQ4CriadoPP := TFDQuery.Create(IBDCriadoPP);
      IBQ5CriadoPP := TFDQuery.Create(IBDCriadoPP);
      IBQ6CriadoPP := TFDQuery.Create(IBDCriadoPP);
      // configuração da conexão
      IBDCriadoPP.LoginPrompt := False;
      List := TStringList.Create;
      List.Add('Database='+DataM.CaminhoBasePP);
      List.Add('User_Name=SYSDBA');
      List.Add('Password=masterkey');
      list.Add('CharacterSet=ISO8859_1');
      List.Add('DriverID=FB');
      IBDCriadoPP.Params.AddStrings(List);
      IBDCriadoPP.Transaction := IBTCriadoPP;
      IBDCriadoPP.UpdateTransaction := IBTCriadoPP;
      IBTCriadoPP.Connection := IBDCriadoPP;
      Try
         Application.ProcessMessages;
         IBDCriadoPP.Connected := True;
      except
      End;
      IBQ1CriadoPP.Connection := IBDCriadoPP;
      IBQ1CriadoPP.Transaction := IBTCriadoPP;
      IBQ1CriadoPP.UpdateTransaction := IBTCriadoPP;
      IBQ2CriadoPP.Connection := IBDCriadoPP;
      IBQ2CriadoPP.Transaction := IBTCriadoPP;
      IBQ2CriadoPP.UpdateTransaction := IBTCriadoPP;
      IBQ3CriadoPP.Connection := IBDCriadoPP;
      IBQ3CriadoPP.Transaction := IBTCriadoPP;
      IBQ3CriadoPP.UpdateTransaction := IBTCriadoPP;
      IBQ4CriadoPP.Connection := IBDCriadoPP;
      IBQ4CriadoPP.Transaction := IBTCriadoPP;
      IBQ4CriadoPP.UpdateTransaction := IBTCriadoPP;
      IBQ5CriadoPP.Connection := IBDCriadoPP;
      IBQ5CriadoPP.Transaction := IBTCriadoPP;
      IBQ5CriadoPP.UpdateTransaction := IBTCriadoPP;
      IBQ6CriadoPP.Connection := IBDCriadoPP;
      IBQ6CriadoPP.Transaction := IBTCriadoPP;
      IBQ6CriadoPP.UpdateTransaction := IBTCriadoPP;
      List.Free;
      // configuração da conexão do sistema local
      IBDCriadoSistemaLocal := TFDConnection.Create(Application);
      IBTCriadoSistemaLocal := TFDTransaction.Create(IBDCriadoSistemaLocal);
      IBQ1CriadoSistemaLocal := TFDQuery.Create(IBDCriadoSistemaLocal);
      IBQ2CriadoSistemaLocal := TFDQuery.Create(IBDCriadoSistemaLocal);
      IBQ3CriadoSistemaLocal := TFDQuery.Create(IBDCriadoSistemaLocal);
      IBQ4CriadoSistemaLocal := TFDQuery.Create(IBDCriadoSistemaLocal);
      IBQ5CriadoSistemaLocal := TFDQuery.Create(IBDCriadoSistemaLocal);
      IBQ6CriadoSistemaLocal := TFDQuery.Create(IBDCriadoSistemaLocal);
      //
      IBDCriadoSistemalocal.LoginPrompt := False;
      List := TStringList.Create;
      List.Add('Database='+DataM.CaminhoConexao);
      List.Add('User_Name=SYSDBA');
      List.Add('Password=masterkey');
      list.Add('CharacterSet=ISO8859_1');
      List.Add('DriverID=FB');
      IBDCriadoSistemaLocal.Params.AddStrings(List);
      IBDCriadoSistemaLocal.Transaction := IBTCriadoSistemaLocal;
      IBDCriadoSistemaLocal.UpdateTransaction := IBTCriadoSistemaLocal;
      IBTCriadoSistemaLocal.Connection := IBDCriadoSistemaLocal;
      Try
         IBDCriadoSistemaLocal.Connected := True;
      Except
      End;

      IBQ1CriadoSistemaLocal.Connection := IBDCriadoSistemaLocal;
      IBQ1CriadoSistemaLocal.Transaction := IBTCriadoSistemaLocal;
      IBQ1CriadoSistemaLocal.UpdateTransaction := IBTCriadoSistemaLocal;
      IBQ2CriadoSistemaLocal.Connection := IBDCriadoSistemaLocal;
      IBQ2CriadoSistemaLocal.Transaction := IBTCriadoSistemaLocal;
      IBQ2CriadoSistemaLocal.UpdateTransaction := IBTCriadoSistemaLocal;
      IBQ3CriadoSistemaLocal.Connection := IBDCriadoSistemaLocal;
      IBQ3CriadoSistemaLocal.Transaction := IBTCriadoSistemaLocal;
      IBQ3CriadoSistemaLocal.UpdateTransaction := IBTCriadoSistemaLocal;
      IBQ4CriadoSistemaLocal.Connection := IBDCriadoSistemaLocal;
      IBQ4CriadoSistemaLocal.Transaction := IBTCriadoSistemaLocal;
      IBQ4CriadoSistemaLocal.UpdateTransaction := IBTCriadoSistemaLocal;
      IBQ5CriadoSistemaLocal.Connection := IBDCriadoSistemaLocal;
      IBQ5CriadoSistemaLocal.Transaction := IBTCriadoSistemaLocal;
      IBQ5CriadoSistemaLocal.UpdateTransaction := IBTCriadoSistemaLocal;
      IBQ6CriadoSistemaLocal.Connection := IBDCriadoSistemaLocal;
      IBQ6CriadoSistemaLocal.Transaction := IBTCriadoSistemaLocal;
      IBQ6CriadoSistemaLocal.UpdateTransaction := IBTCriadoSistemaLocal;

   end;

   try
	   IBDCriadoPP.Connected := True;
   except
   end;
   Terminate;
end;

destructor TUThreadIE.Destroy;
begin
  inherited;
  if IBTCriadoPP.Active then
    IBTCriadoPP.Commit;
  if IBTCriadoSistemaLocal.Active then
    IBTCriadoSistemaLocal.Commit;


end;
end.
Wesley Santos

Wesley Santos

Responder

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

Aceitar