Pau com Firebird
Pessoal, tenho um pequeno programa que roda com MySql, Sql Server e Firebird. Fiz um arquivo .ini para conexão, beleza. Em um cliente que é Firebird(FB), não funciona. Mas em minha casa funciona o FB. O erro que dá é: Missing DataBase Property, mas o arquivo de conexão .ini é o mesmo, exceto o path do Banco, mas isso não daria esse problema. Abaixo meu INI e meu Fonte.
e meu fonte
[conexao_atual] banco_atual=Firebird [MySql] DriverName=MySql50 HostName=127.0.0.1 DataBase=global_forseq User_Name=root password=simbad BlobSize=-1 ErrorResourceFile= LocaleCode=0000 [SqlServer] DriverName=MsSql HostName=SRVMAIRIBEL DataBase=Global_Mairibel User_Name= Password= OS Authentication=True [FireBird] DriverName=InterBase DataBase=F:\Inet\Servidor\Global_Cosmeticos.gdb User_Name=sysdba Password=masterkey SQLDialect=3
e meu fonte
procedure TDM_Principal.SQLConnection1BeforeConnect(Sender: TObject);
var
arq_conexao: TiniFile;
path,
banco,
arquivo,
p_banco: String;
begin
conexao := Sqlconnection1;
path := ExtractFilePath(Application.ExeName);
arquivo := path + ExtractFileName('Conexao_Global.ini');
arq_conexao := TIniFile.Create(arquivo);
banco := arq_conexao.ReadString('conexao_atual','banco_atual','');
p_banco := arq_conexao.ReadString('conexao_atual','path_banco','');
if banco = 'SqlServer' then
begin
SqlConnection1.ConnectionName := 'Mairibel';
SqlConnection1.DriverName := 'MSSQL';
SqlConnection1.GetDriverFunc := 'getSQLDriverMSSQL';
SqlConnection1.LibraryName := 'dbxmss30.dll';
SqlConnection1.LoginPrompt := False;
SqlConnection1.VendorLib := 'OleDb';
SqlConnection1.Params.Values['DriverName'] := arq_conexao.ReadString('SqlServer','DriverName','');
SqlConnection1.Params.Values['HostName'] := arq_conexao.ReadString('SqlServer','HostName','');
SqlConnection1.Params.Values['DataBase'] := arq_conexao.ReadString('SqlServer','DataBase','');
SqlConnection1.Params.Values['User_Name'] := arq_conexao.ReadString('SqlServer','User_Name','');
SqlConnection1.Params.Values['Password'] := arq_conexao.ReadString('SqlServer','password','');
SqlConnection1.Params.Values['OS Authentication'] := arq_conexao.ReadString('SqlServer','OS Authentication','');
end
else
if banco = 'MySql' then
begin
SqlConnection1.ConnectionName := 'MYSQLCONNECTION';
SqlConnection1.DriverName := 'MySQL';
SqlConnection1.GetDriverFunc := 'getSQLDriverMYSQL';
SqlConnection1.LibraryName := 'dbxmys30.dll';
SqlConnection1.LoginPrompt := False;
SqlConnection1.VendorLib := 'LIBMYSQL.dll';
SqlConnection1.Params.Values['DriverName'] := arq_conexao.ReadString('MySql','DriverName','');
SqlConnection1.Params.Values['HostName'] := arq_conexao.ReadString('MySql','HostName','');
SqlConnection1.Params.Values['DataBase'] := arq_conexao.ReadString('MySql','DataBase','');
SqlConnection1.Params.Values['User_Name'] := arq_conexao.ReadString('MySql','User_Name','');
SqlConnection1.Params.Values['Password'] := arq_conexao.ReadString('MySql','password','');
end
else
if banco = 'FireBird' then
begin
SqlConnection1.ConnectionName := 'Mairibel_FB';
SqlConnection1.DriverName := 'Interbase';
SqlConnection1.GetDriverFunc := 'getSQLDriverINTERBASE';
SqlConnection1.LibraryName := 'dbxint30.dll';
SqlConnection1.LoginPrompt := False;
SqlConnection1.VendorLib := 'GDS32.DLL';
SqlConnection1.Params.Values['DriverName'] := arq_conexao.ReadString('FireBird','DriverName','');
SqlConnection1.Params.Values['HostName'] := arq_conexao.ReadString('FireBird','HostName','');
SqlConnection1.Params.Values['DataBase'] := arq_conexao.ReadString('FireBird','DataBase','');
SqlConnection1.Params.Values['User_Name'] := arq_conexao.ReadString('FireBird','User_Name','');
SqlConnection1.Params.Values['Password'] := arq_conexao.ReadString('FireBird','password','');
end;
end;
end.
Pjava
Curtidas 0
Respostas
Wilson Junior
20/01/2011
Isto geralmente ocorre porque você tem um caminho inválido no seu SQLConnection1.
Exemplo: você compilou o seu projeto com o SQLConnection1 conectado ou com um caminho no DataBase e este caminho não existe no seu cliente. Sugiro retirar o DataBase, User_Name e Password.
Espero ter colaborado.
Exemplo: você compilou o seu projeto com o SQLConnection1 conectado ou com um caminho no DataBase e este caminho não existe no seu cliente. Sugiro retirar o DataBase, User_Name e Password.
Espero ter colaborado.
GOSTEI 0
Pjava
20/01/2011
Essa foi a primeira coisa que eu fiz. Primeiro retirei somente o DataBase e depois user e password e continua dando o mesmo erro. Eu retirei da minha conexão, certo? Em design time, eu criei uma conexão chamada M_FB e a tenho usado, sem o DataBase, User e Senha. Esses dados são preenchidos via INI. Continua dando o erro.
GOSTEI 0
Wilson Junior
20/01/2011
Você registrou suas DLL's???
Espero ter colaborado.
Espero ter colaborado.
GOSTEI 0
Pjava
20/01/2011
Eu apenas coloquei a dbxint30.dllno path. Tenho que fazer mais alguma coisa? Antes ele reclamou dessa DLL, aí copiei para o path do EXE e não mais reclamou.
GOSTEI 0
Marco Salles
20/01/2011
Desculpa mas pq não o fbclient.DLL no Vendor Lib ????
GOSTEI 0
Pjava
20/01/2011
Como assim? Eu coloquei essa aí, pq tava pedindo. Mas como eu coloco a fbclient no VendorLib?
GOSTEI 0
Marco Salles
20/01/2011
Como assim? Eu coloquei essa aí, pq tava pedindo. Mas como eu coloco a fbclient no VendorLib?
Parece que seu Delphi é o 2010 ??????
Pode ser que o problema esteja no Arquivo ini
Ja tive problemas por não indicar a port
Seria interressanet vc fazer uma conexão em DesignedTime e Salvar os Parametros desta conexão , so para comparar com que de fato vc esta usando Vc usa assim
[FireBird]
DriverName=InterBase
DataBase=F:\Inet\Servidor\Global_Cosmeticos.gdb
User_Name=sysdba
Password=masterkey
SQLDialect=3 Normalmente os Parametros são esses drivername=FIREBIRD
blobsize=-1
commitretain=False
database=F:\Inet\Servidor\Global_Cosmeticos.gdb
localecode=0000
Password=masterkey
rolename=RoleName
sqldialect=3
isolationlevel=ReadCommitted
user_name=sysdba
waitonlocks=True
trim char=False
port=3155 ************** Esta porta é minha especifica
communicationprotocol=tcp
GOSTEI 0
Pjava
20/01/2011
É só para esclarecer. Em minha casa funciona. Só não está funcionando em meu cliente. Eu uso Delphi 2007(RAD) e FireBird 2.5, mas o banco está configurado como 2.0. Comigo aqui em casa, está bombando a 1000 por hora. Só não funciona em meu cliente. Aí vem a questão se falta algum arquivo, ou esse F:\ se está fazendo a diferença. É que o FB eu tenho que informar o Path e o nome do arquivo. Outros banco eu aponto apenas a instância ou o ip e funciona.
GOSTEI 0
Wilson Junior
20/01/2011
Este seu Drive F é uma unidade mapeada, ou é uma partição do seu HD?
Se for uma unidade mapeada, não irá funcionar, você deve colocar o IP da máquina e o caminho de onde está o BD. Exemplo: nome_servidor_ou_IP:C:\pasta_no_servidor\nome_banco.FDB
Espero ter colaborado.
Se for uma unidade mapeada, não irá funcionar, você deve colocar o IP da máquina e o caminho de onde está o BD. Exemplo: nome_servidor_ou_IP:C:\pasta_no_servidor\nome_banco.FDB
Espero ter colaborado.
GOSTEI 0
Pjava
20/01/2011
O disco foi particionado em tres e F é uma dessas partições. O que eu acho estranho, que nem a tela principal entra, ou seja, o erro já dá logo no começo e o evento utilizado foi o OnBeforeConnect e na tela principal não há nenhuma conexão. Isso tá me deixando mais chateado. Com Sql Server funciona e gostaria de que fosse ele, mas eu não consegui fazer a aplicação rodar por atalho, fora do servidor. No servidor roda, mas quando eu crio um atalho para em outro computador, aí dá erro de Login Failed. Então, falei, deve ser o Sql Server, pois ele tá como Windoes Authentication e foi instalado por outra empresa que possui outra aplicação rodando nessa empresa e ninguém lá sabe qual é a senha que eles salvaram na instalação.
GOSTEI 0
Wilson Junior
20/01/2011
Você está tentando acessar o HostName e ele nem tem no seu arquivo ini.
SqlConnection1.Params.Values['HostName'] := arq_conexao.ReadString('FireBird','HostName','');
[FireBird]
DriverName=InterBase
DataBase=F:\Inet\Servidor\Global_Cosmeticos.gdb
User_Name=sysdba
Password=masterkey
SQLDialect=3
Espero ter colaborado.
SqlConnection1.Params.Values['HostName'] := arq_conexao.ReadString('FireBird','HostName','');
[FireBird]
DriverName=InterBase
DataBase=F:\Inet\Servidor\Global_Cosmeticos.gdb
User_Name=sysdba
Password=masterkey
SQLDialect=3
Espero ter colaborado.
GOSTEI 0