Array
(
)

Componente free para acessar ODBC pelo DBExpress

Helcio Silva
   - 08 nov 2009

Oi pessoal do fórum.

Eu comprei recentemente o Delphi 2010 professional e não consigo acessar meu banco de dados Firebird através do DBExpress que vem na versão professional.

Pra resolver este problema. Estou usando os componentes do BDE e acessando o banco através de ODBC.

Eu soube que posso acessar ODBC pelo DBExpress, porém não consegui fazer a ligação com o driver que achei na internet: dbxoodbc.dll.

Alguém sabe como resolver este problema ou conhece algum componente tipo o dbexpress para ligar com o ODBC ao invés do BDE?

Agradeço muitíssimo a ajuda.

Anderson
   - 13 nov 2009

Driver Free para o DBEXPRESS (Delphi 2010 e outros):

http://sites.google.com/site/dbxfirebird/
http://sites.google.com/site/dbxfirebird/download
http://groups.google.com/group/dbxfirebird

Este drive foi desenvolvido por Chee Yang Chau (http://chee-yang.blogspot.com/).

Firebird ODBC/JDBC Drivers:

http://www.firebirdsql.org/index.php?op=files&id=odbc

Uma mancada muito grande da Embarcadero em colocar o driver do Firebird somente nas versões mais caras. O raciocínio é bem simples: Se o camarada já esta procurando um banco de dados Free é porque seus projetos devem ter custos baixos (para quem desenvolve e para o cliente que compra).

Helcio Silva
   - 16 nov 2009

Anderson, obrigado pela dica.

Só que testei e sempre que compilo e tento conectar o banco me retorna a seguinte mensagem:

raised exception class TDBXError with message 'Unknown driver: FirebirdConnection'.

Estou utilizanda a seguinte rotina para conectar:

  conConectaDB.Close;

  conConectaDB.DriverName := 'FirebirdConnection';

  conConectaDB.Params.Clear;

  conConectaDB.Params.Add('User_Name=SYSDBA');

  conConectaDB.Params.Add('Password=bishop69');

  conConectaDB.Params.Add('Database=localhost:D:\Projetos\Desktop\Lavanda\dados\DATACENTER.FDB');

  conConectaDB.Open;

Coloquei um componente TSQLConnection e executei a rotina acima. Aí acontece o erro.

Vc sabe o que pode estar acontecendo.

Aguardo seu retorno.

Obrigado.

Helcio.

Anderson
   - 16 nov 2009

Se estiver usando o driver do Chau Chee Yang, crie uma rotina que configure os parâmetros básicos
da conexão, algo assim:

- - -

Function Conecta_Fdb(ob_cnt:TSQLConnection;sc_user,sc_password,sc_database:string):boolean;

begin
  Result:=False;
  with ob_cnt do
       Try
         { Limpa dados anteriores }
         params.Clear;

         { Impede releitura de parâmetros ao conectar }
         LoadParamsOnConnect:=False;

         { Dados do Driver }
         ConnectionName:=UpperCase(ob_cnt.Name);
         LibraryName:='dbxfb4d14.dll';
         VendorLib:='fbclient.dll';
         GetDriverFunc:='getSQLDriverInterBase';

         { Configura parâmetros }
         params.Add('DriverName=FirebirdConnection');
         params.Add('RoleName=Normal');
         params.Add('LongStrings=True');
         params.Add('EnableBCD=True');
         params.Add('UseQuoteChar=False');
         params.Add('FetchAll=False');
         params.Add('CharLength=0');
         params.Add('Charset=ISO8859_1');
         params.Add('SQLDialect=3');
         params.Add('BlobSize=-1');
         params.Add('CommitRetain=False'); // Padrão é False - Não reter as transações e liberar a memória no servidor
         params.Add('WaitOnLocks=False'); // Padrão é False - Não aguardar a liberação de registros travados (pode ficar infinitamente aguardando)
         params.Add('ErrorResourceFile=');
         params.Add('LocaleCode=0000');
         params.Add('IsolationLevel=ReadCommitted');
         params.Add('Interbase TransIsolation=ReadCommitted');
         params.Add('UseUnicode=False');
         params.Add('Trim Char=False');

         { Dados para acesso ao banco de dados }
         params.Add('User_Name='+sc_user);
         params.Add('Password='+sc_password);
         params.Add('User_Name='+sc_database);

         { Conecta ao banco de dados }
         Connected:=True;

         { Conexão ok }
         Result:=True;

       Except
           on e:exception do
              ShowMessage('Problemas ao conectar ao banco de dados. Erro '+#13+e.Message);
       End;
end;

- - -

if Conecta_Fdb(conConectaDB,'SYSDBA','bishop69','localhost:D:\Projetos\Desktop\Lavanda\dados\DATACENTER.FDB')=False then
   begin
     // Falhou a conexão, coloque o código para tratar o erro
   end;

Verifica se no arquivo   dbxdrivers.ini  ficou cadastrado o driver para o firebird, que
tem registro em duas partes:
C:\Documents and Settings\All Users\Documentos\RAD Studio\dbExpress\7.0\dbxdrivers.ini

Primeiro, identifica os drivers instalados:

[Installed Drivers]
FirebirdConnection=1

Ao final, informar como funciona a conexão:

[FirebirdConnection]
;DriverUnit=DBXInterBase
;DriverPackageLoader=TDBXDynalinkDriverLoader,DbxCommonDriver120.bpl
;DriverAssemblyLoader=Borland.Data.TDBXDynalinkDriverLoader,Borland.Data.DbxCommonDriver,Version=12.0.0.0,Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b
;MetaDataPackageLoader=TDBXInterbaseMetaDataCommandFactory,DbxInterBaseDriver120.bpl
;MetaDataAssemblyLoader=Borland.Data.TDBXInterbaseMetaDataCommandFactory,Borland.Data.DbxInterBaseDriver,Version=12.0.0.0,Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b
GetDriverFunc=getSQLDriverFIREBIRD
LibraryName=dbxfb4d14.dll
VendorLib=fbclient.dll
BlobSize=-1
CommitRetain=False
Database=database.gdb
ErrorResourceFile=
LocaleCode=0000
Password=masterkey
RoleName=RoleName
ServerCharSet=
SQLDialect=3
Interbase TransIsolation=ReadCommited
User_Name=sysdba
WaitOnLocks=True
Trim Char=False

Helcio Silva
   - 19 nov 2009

Anderson, obrigado pela força, mas já fiz tudo passo a passo conforme vc me enviou, mas definitivamente não funciona. A mensagem de erro continua a mesma. Será que pode ser algum problema do Windows? Uso o Vista Business.

Anderson
   - 19 nov 2009

Bom, vamos lá:

1) Verificar se o driver aparece na sua lista de drivers do delphi quanto utiliza o TSQLConnection.

2) Verifica se na cláusula Uses do DataModule consta as bibliotecas   Midas, MidasLib, MidasCon  (o dbexpress reclama a falta de  DLL's  se não as declarou )

3) As DLL's  dbxfb4d14.dll  e fbclient.dll devem estar em um diretório que o IDE do Delphi enxergue (coloca no diretório BIN do Delphi)  e também no mesmo diretório onde está o executável da sua aplicação.

4) No mais, por estar usando o Vista, verifique se tem permissão de acesso aos arquivos, tente acessar o banco de dados utilizando alguma ferramenta (Flamerobin por exemplo) para ver se o firewall não esta bloqueando algo e teste a sua aplicação também no Windows XP.

5) Outra alternativa é pegar emprestado o driver Firebird da versão trial do Delphi 2010 e testar.

6) Também tenta rodar a aplicação chamando o executável por uma janela DOS, pois muitas vezes os problemas ficam mascarados (falta de DLL por exemplo)  e chamando assim mais mensagens de erro podem ser exibidas.

Abraços,

Anderson:.

Danilo
   - 08 jan 2010

Estava com o mesmo problema quando instanciei dinamicamente um objeto da classe TSQLConnection na minha app.

No meu caso, estava acessando o MySQL e o erro que aparecia:

raised exception class TDBXError with message 'Unknown driver: MySQL'.

Para resolver isso, acrescentei DBxMysQL ao uses da minha unit e resolveu.

Estou com a versão professional aqui e não tenho conexão DBX ao firebird mas é bem provável que haja uma unit do tipo DBxFirebird ou algo do tipo que deve ser adicionada ao uses da sua unit.

Espero que ajude.