Fórum TZConnection #395267

09/02/2011

0

Bom dia galera delphi. Gostaria da ajuda de vocês sobre um erro de access violation quando encerro a aplicação. Se eu realizar o login normalmente pela tela de login e encerrar a aplicação o erro não acontece. O erro esta na classe unconexao no destructor quando executo um free no objeto FConexao :

unit unConexao;

interface

uses
   SysUtils, Windows, ZConnection, ZDbcIntfs, ZSqlMonitor, Classes;
type
   TConexao = class
   private
     FConexao : TZConnection;
     FHostName : String;
     FProtocol: String;
     FDataBase: String;
     FUser: String;
     FPW: String;
     FNameConn: String;
     FRoleName: String;
     FTransactIsolationLevel: TZTransactIsolationLevel;
     FAutoCommit: Boolean;
     class var FInstance: TConexao;
     constructor CreatePrivate;
   public
     destructor Destroy; override;
     constructor Create;
     class function fnGetInstance: TConexao;
     function fnConexao: Boolean;
     property Conexao : TZConnection read FConexao write FConexao;
     property Name : String read FNameConn write FNameConn;
     property Protocol : String read FProtocol write FProtocol;
     property DataBase : String read FDataBase write FDataBase;
     property HostName : String read FDataBase write FDataBase;
     property User : String read FUser write FUser;
     property Password : String read FPW write FPW;
   end;

implementation

{ TConexao }

constructor TConexao.Create;
begin
  raise Exception.Create('Para obter uma instância de TConexao utilize TConexao.fnGetInstance!');
end;

constructor TConexao.CreatePrivate;
begin
  inherited Create;
end;

function TConexao.fnConexao: Boolean;
begin
  try
    if Assigned(FConexao) then
    begin
      FConexao.Free;
      FConexao := nil;
    end;
    FConexao := TZConnection.Create(nil);
    FNameConn := 'sqlconn';
    FProtocol := 'firebird-2.1';
    FHostName := '192.168.1.1';
    FUser := 'JORDY';
    FPW := 'J3bz@s8!';
    FDatabase := 'COB';

    FConexao.Name := FNameConn;
    FConexao.HostName := FHostName;
    FConexao.Protocol := FProtocol;
    FConexao.Database := FDataBase;
    FConexao.User := FUser;
    FConexao.Password := FPW;
    Result := FConexao <> nil;
 except
   Result := False;
   raise Exception.Create('Não foi possivel realizar a conexão!');
 end;
end;

class function TConexao.fnGetInstance: TConexao;
begin
  if not Assigned(FInstance) then
    FInstance := TConexao.CreatePrivate;
  Result := FInstance;
end;

destructor TConexao.Destroy;
begin
  if Assigned(FConexao) then
  begin
    FConexao.Free;
    FConexao := nil;
  end;
inherited;
end;

end.

Valeu.

Jordelino Santos

Jordelino Santos

Responder

Posts

10/02/2011

Marco Salles

então JORDELINO VIANA DOS SANTOS seu problema é interressante , ainda mais que vc usa uma Factory para instanciar os objetos desta classe. de mais detalhe e se resolveu conte-nos como
Responder

Gostei + 0

16/05/2013

José

Este tópico esta sendo fechado por inatividade. Se necessário, sinalizar para que seja reaberto ou abrir um novo.
Responder

Gostei + 0

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

Aceitar