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:
Thread:
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
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)