Conexão DBExpress TSQLConnection

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.

Nota: 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 estabelecida!
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.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados