Conexão DBExpress TSQLConnection

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (0)  (0)

Veja nesse artigo como criar uma conexão DBExpress TSQLConnection em tempo de projeto.

Oi meu nome é julierme carvalho, depois varias vídeos aulas assistidas aqui no site da devmedia muitas vídeos de autores como “GUINTHER PAULI, RODRIGO CARREIRO MOURÃO, RENATO MATOS” resolvi tentar criar um classe de conexão, usando os conhecimentos aqui adquiridos neste site, nesta classe eu uso DbExpress, Firebird e o drive da Core Lab para acesso ao Firebird lembrando que o mesmo é pago, mais lembrando que a classe funciona com qualquer drive de suporte ao Firebird.

Todos os créditos desse artigo são para o Rodrigo Carreiro que cria uma classe desse mesmo modelo, mais para Usuários. Até então eu tinha uma classe de conexão mais que criava toda hora uma conexão o que não é nada recomendado vendo alguns vídeos, ou melhor, todos os vídeos sobre Delphi dele rsrs, em um desses vídeos ele passa este padrão de projeto que resolveu meu problema, a ele e há devmedia meu muito obrigado!! Por que neste modelo de classe sempre é verificado se já existe um conexão caso não exista ele cria caso já tenha ele retorna a mesma conexão.

Aqui esta a unit completa.

unit uConection;

interface

uses DB, SqlExpr, SysUtils, Dialogs, StdCtrls;

type

  TConexao = class

  private

    FConn: TSQLConnection;

    class var FInstance: TConexao;

    function get_conn: TSQLConnection;

    constructor CreatePrivate;

    { private declarations }

  protected

    { protected declarations }

  public

    { public declarations }

    constructor Create;

    property Conn: TSQLConnection read Get_conn;

    class function GetInstance: TConexao;

  published

  { published declarations }

end;

implementation

{ TConexao }

constructor TConexao.Create;

begin

{: para não poder usar o create da conexão para usar a conexão só usando TConexao.GetInstance.Conn}

  raise Exception.Create('Para obter um instância de TConexao utilize TConexao.GetInstance.Conn!!');

end;

constructor TConexao.CreatePrivate;

begin

  inherited Create;

end;

 

class function TConexao.GetInstance: TConexao;

begin

  try

   {: Verifica se já possui uma conexão}

   if not Assigned(FInstance) then

   begin

    FInstance := TConexao.CreatePrivate;   TConexao.FInstance.FoConn := TSQLConnection.Create(nil);

      with TConexao.FInstance.FoConn do

      begin

        ConnectionName := 'AUTOMACAOCOMERCIAL';

       DriverName := 'InterBase by Core Lab';

        LibraryName := 'dbexpida40.dll';

        VendorLib := 'fbclient.dll';

        GetDriverFunc := 'getSQLDriverInterBase';

        Params.Add('User_Name=SYSDBA');

        Params.Add('Password=masterkey');

        Params.Add('Database=localhost:C:\bancodedados\PDV.FDB');

        LoginPrompt := False;

        Open;

      end;

   end;

     {: sempre retorna FInstance }

     result := FInstance

  except

  {: caso aconteça um erro de conexão o erro é mostrado}

     On E: Exception do

        ShowMessage(E.Message);

  end;

end;

function TConexao.get_conn: TSQLConnection;

begin

    Result:= FConn;

end;

end.

O exemplo acima funciona e muito bem! Mais tem como melhora? Tem sim! Neste exemplo a conexão fica pressa a um único lugar especifico para o bando de dados, como eu poderia passar o caminho do bando de dados dinamicamente? Então eu pensei em usar registro, usando o registro do Windows eu apenas passaria o caminho do banco e pronto caso mude o banco de diretório mudo o caminho só no registro, e minha conexão funcionará normalmente.

A alteração é feita apenas em “Class function” ficando assim agora a Classe.

Obs: a primeira fez que for executada a classe, a conexão não vai funcionar por que não existe o registro, portanto não tendo o caminho do banco execute uma vez e depois passe no registro criado o caminho do banco e pronto conexão estabelicida!

class function TConexao.GetInstance: TConexao;

var

//lembrando de dar uses Registry

  Reg: TRegistry;

begin

  try

   {: Verifica se já possui um conexão }

   if not Assigned(FInstance) then

   begin

   {: crio a variável para ler do registro}

   Reg := TRegistry.Create;

    FInstance := TConexao.CreatePrivate;

    TConexao.FInstance.FoConn := TSQLConnection.Create(nil);

{: se não existir ele cria}              

    if Reg.OpenKey('Software\Aplicacao\Conexao',  true) then

      with TConexao.FInstance.FoConn do

      begin

        ConnectionName := 'AUTOMACAOCOMERCIAL';

        DriverName := 'InterBase by Core Lab';

        LibraryName := 'dbexpida40.dll';

        VendorLib := 'fbclient.dll';

        GetDriverFunc := 'getSQLDriverInterBase';

        Params.Add('User_Name=SYSDBA');

        Params.Add('Password=masterkey');

        {: o caminho do banco e lido no registro}

        Params.Add('Database='Reg.ReadString('CAMINHO_BANCO_DADOS'));

        LoginPrompt := False;

        Open;

      end;

   end;

     FreeAndNil(Reg);

     result := FInstance

  except

     On E : Exception do

        ShowMessage(E.Message);
  end;

end;

Espero que tenham gostado e até o próximo artigo.

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?