Componente free para acessar ODBC pelo DBExpress
08/11/2009
0
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.
Helcio Silva
Posts
13/11/2009
Anderson
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).
16/11/2009
Helcio Silva
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.
16/11/2009
Anderson
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
19/11/2009
Helcio Silva
19/11/2009
Anderson
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:.
08/01/2010
Danilo
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.
Clique aqui para fazer login e interagir na Comunidade :)