Componente free para acessar ODBC pelo DBExpress

08/11/2009

13

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.
Responder

Posts

13/11/2009

Anderson

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).

Responder

16/11/2009

Helcio Silva

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.
Responder

16/11/2009

Anderson

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



Responder

19/11/2009

Helcio Silva

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.
Responder

19/11/2009

Anderson

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:.
Responder

08/01/2010

Danilo

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.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar