Você está na página 1de 5

05/08/13

Conexo DBExpress

Tecnologias

Revistas

Cursos

Pocket videos

DevWare

Frum

Servios

Publicar

Compre Crditos

Loja Virtual

A ssine

Seja bem vindo, EDNA LDO FRA NCO!

Fale conosco

Meus Servios

post favorito

comentrios

Conexo DBExpress
Como criar uma conexo DBExpress "TSQLConnection" em tempo de projeto.

Curtir

Go s t ei (0)

(0)

Oi meu nome julierme carvalho, depois varias vdeos aulas assistidas aqui no site da devmedia muitas vdeos de autores como GUINTHER PAULI, RODRIGO CARREIRO MOURO, RENATO MATOS resolvi tentar criar um classe de conexo, 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 crditos desse artigo so para o Rodrigo Carreiro que cria uma classe desse mesmo modelo, mais para Usurios. At ento eu tinha uma classe de conexo mais que criava toda hora uma conexo o que no nada recomendado vendo alguns vdeos, ou melhor, todos os vdeos sobre Delphi dele rsrs, em um desses vdeos ele passa este padro 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 conexo caso no exista ele cria caso j tenha ele retorna a mesma conexo. 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 }
www.devmedia.com.br/conexao-dbexpress/12421 1/5

05/08/13

Conexo DBExpress

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 no poder usar o create da conexo para usar a conexo s usando TConexao.GetInstance.Conn} raise Exception.Create('Para obter um instncia 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 conexo} if not Assigned(FInstance) then begin FInstance := TConexao.CreatePrivate; 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'); TConexao.FInstance.FoConn := TSQLConnection.Create(nil);

www.devmedia.com.br/conexao-dbexpress/12421

2/5

05/08/13

Conexo DBExpress

Params.Add('Database=localhost:C:\bancodedados\PDV.FDB'); LoginPrompt := False; Open; end; end; {: sempre retorna FInstance } result := FInstance except {: caso acontea um erro de conexo 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 conexo fica pressa a um nico lugar especifico para o bando de dados, como eu poderia passar o caminho do bando de dados dinamicamente? Ento eu pensei em usar registro, usando o registro do Windows eu apenas passaria o caminho do banco e pronto caso mude o banco de diretrio mudo o caminho s no registro, e minha conexo funcionar normalmente. A alterao feita apenas em Class function ficando assim agora a Classe. Obs: a primeira fez que for executada a classe, a conexo no vai funcionar por que no existe o registro, portanto no tendo o caminho do banco execute uma vez e depois passe no registro criado o caminho do banco e pronto conexo estabelicida! class function TConexao.GetInstance: TConexao; var //lembrando de dar uses Registry Reg: TRegistry; begin try {: Verifica se j possui um conexo } if not Assigned(FInstance) then begin {: crio a varivel para ler do registro} Reg := TRegistry.Create;

www.devmedia.com.br/conexao-dbexpress/12421

3/5

05/08/13

Conexo DBExpress

FInstance := TConexao.CreatePrivate; TConexao.FInstance.FoConn := TSQLConnection.Create(nil); {: se no 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; http://juliermecarvalho.wordpress.com/

Julierme Carvalho De Oliveira


Bacharel em Sistema de Informao http://juliermecarvalho.w ordpress.com/

Curtir

Go s t ei (0)

(0)

www.devmedia.com.br/conexao-dbexpress/12421

4/5

05/08/13
1 COMENTRIO
Jos Valber Aguiar Perfeito! Parabns pelo artigo. [h +1 ms] - Responder

Conexo DBExpress

Cursos relacionados
C urso online - Aplicaes C lient/Server com dbExpress e Firebird C urso Online - Sistema SysC ash C urso Online - C riando uma Aplicao multi-camadas C ompleta com Delphi Aplicaes client/server com Windows Forms no Delphi 2006 Administrao do Firebird/InterBase [Ver todos]

+Delphi
Publicidade

Servios
Inclua um comentrio Adicionar aos Favoritos Marcar como lido/assistido Incluir anotao pessoal Verso para impresso

DevMedia
Curtir Voc curtiu isso.

Voc e outras 12.106 pessoas curtiram DevMedia. DevMedia | Anuncie | Fale conosco Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Dire itos R e se rvados a web-03
P lug-in social do F acebook

www.devmedia.com.br/conexao-dbexpress/12421

5/5