Pau com Firebird

Delphi

20/01/2011

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.

[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

Pjava

Curtidas 0

Respostas

Wilson Junior

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.
GOSTEI 0
Pjava

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

Wilson Junior

20/01/2011

Você registrou suas DLL's???

Espero ter colaborado.
GOSTEI 0
Pjava

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

Marco Salles

20/01/2011

Desculpa mas pq não o fbclient.DLL no Vendor Lib ????
GOSTEI 0
Pjava

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

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

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

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.
GOSTEI 0
Pjava

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

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.
GOSTEI 0
POSTAR