problema com Delphi 2007 + firebird 2.5

Delphi

28/09/2012

Olá pessoal.
Aconteceu um problema bem estranho, essa semana em um dos meus clientes.

Vou explicar aqui como esta a estrutura la
Servidor Win7 => tem o firebird 2.1 que foi atualizado para o 2.5, todos os arquivos do sistema estão aqui tbm.
Terminais winXP => uns 7 a 9 terminais, em todos eles eu apenas puxei o atalho do sistema que esta no servidor, não precisei copiar dll nenhuma, tudo funciona normal.

Essa semana fiz uma atualização comum, nada de mais. E reparei que a gds32.dll que estava na pasta do sistema era da 2.1 ainda. Então fui la na pasta bin do firebird peguei o fbClient.dll e peguei a gds32.dll.
Testei no servidor funcionou normal.
Testei em um outro terminal, funcionou normal.

Dae no outro dia de tarde o cliente me liga falando q tinha 2 terminais (para não contrariar as lei de Murphy) eram os 2 dos 3 mais usados não estava funcionando o sistema.
XD
Perguntei se não tinha acontecido algo diferente nesses pc, segundo ele não.
Fiz uma conexão remota não achei nada de errado, e realmente não conectava. Falava que não conseguia carregar a dbxint30.dll, que esta na pasta do sistema no servidor. Tentei copiar todas as dll na system32 do terminal. Não adiantou.
Tentei varias coisas.. até lembrar q eu tinha atualizado a gds32.dll voltei a versão 2.1 ou 2.0.1 não lembro e o sistema voltou a funcionar.

Fiz um teste com o Delphi 2007 um projeto novo apenas com SqlConnection. Deu pau.
Fiz um teste com o Delphi XE2 um projeto novo apenas com SqlConnection. Deu pau.

eu não costumo usar, mas para testar eu fiz isso tbm
Fiz um teste com o Delphi XE2 um projeto novo apenas com IBTable (não lembro o nome ). Funcionou.

O pior é que todos os terminais executam o mesmo exe e somente 2 deram problema, é algo especifico nessas duas maquinas que da pau com a dll do firebird 2.5

nesses terminais que deu problema estavam com winxp SP2. E nas que funcionam tbm.
Alguem ae sabe de algum outro detalhe que poderia influenciar, esses terminei que estao dando problema foi formatado este ano ainda...
Não tinha delphi, nem banco algum instalado neles isso eu garanto.

Ok aguardo respostas...
Desculpe se ficou meio longo, mas precisava passar alguns detalhes.
desde ja agradeço.
Marcos Iwazaki

Marcos Iwazaki

Curtidas 0

Respostas

Alisson Santos

Alisson Santos

28/09/2012

Verificou se as dlls estão na pasta do executavel.

Tive um problema desse outro dia com o cliente, e o que estava ocorrendo era que algumas dlls que tinha que está junto ao executavel não estava.
GOSTEI 0
Marcos Iwazaki

Marcos Iwazaki

28/09/2012

sim amigo...
tanto que não é problema de não ter algum arquivo dll, que qdo eu trocar a versão da dll gds32.dll tudo funciona


Verificou se as dlls estão na pasta do executavel.

Tive um problema desse outro dia com o cliente, e o que estava ocorrendo era que algumas dlls que tinha que está junto ao executavel não estava.
GOSTEI 0
Alisson Santos

Alisson Santos

28/09/2012

Quando está utilizando a tecnologia dbx4 tem que deixar o campo do sqlconnection loadparamsonconnector true.
GOSTEI 0
Marcos Iwazaki

Marcos Iwazaki

28/09/2012

estou usando o padrão do delphi. tentei usar esse dbx4 mas dava erro em alguns sqls.

e o padrão usa dbxint30.dll
GOSTEI 0
Marcos Iwazaki

Marcos Iwazaki

28/09/2012

Hj formatei outro pc deste cliente, com winXP SP2.

vou instalar o sistema e vou aproveitar p testar se nele funciona a dll nova...

caso funcionar... vou sugerir ao cliente formatar as outras maquinas novamente como teste... assim eu tenho certeza q vou usar o mesmo cd de instalação e vou saber se o problema estava no winXP com alguma atualização ou algo instalado q zicava ou pode ser até mesmo alguma coisa de hardware (o que eu duvido muito), mas Na nossa area de exata não tem nada.

Não custa nada tentar.
GOSTEI 0
Alisson Santos

Alisson Santos

28/09/2012

Eu utilizo o dbx4 e acho muito bom ele.
Até hoje não tive problemas não.
GOSTEI 0
Marcos Iwazaki

Marcos Iwazaki

28/09/2012

pelo q li ele tem prob c delphi 2007.

q delphi vc usa?
Eu utilizo o dbx4 e acho muito bom ele.
Até hoje não tive problemas não.
GOSTEI 0
Deivison Melo

Deivison Melo

28/09/2012

Para usar o dbx4 ele tem que usar uma versão igual ou superior ao delphi bds 2006...

Qual seu problema atual, poderia postar o seu código?

GOSTEI 0
Marcos Iwazaki

Marcos Iwazaki

28/09/2012

Olá amigo.. se ver o meu primeiro post vai ver o problema.

na verdade não tem a ver como eu fiz (aparentemente) e sim com a gds32.dll.

sobre o dbx4 era o q o outro amigo flw q usava e nunca teve problemas e eu ja tive problemas c ele e não uso mais.

sobre posta o codigo...
o meu erro da qdo o SqlConnection conecta no banco...

sqlConn.Params.Values['Database'] := inifile.ReadString('BANCO','CAMINHO','LOCALHOST:'+ExtractFilePath(ParamStr(0)+'DB'));

eu pego o caminho em um arquivo .ini desta forma.

Para usar o dbx4 ele tem que usar uma versão igual ou superior ao delphi bds 2006...

Qual seu problema atual, poderia postar o seu código?

GOSTEI 0
Deivison Melo

Deivison Melo

28/09/2012

Seguem abaixo exemplos usados com a conexão dbexpress usando o banco de dados firebird,
veja se o código abaixo irá atendê-lo:

(*************************************************************************************************************************)
//Procedure para gravar arquivo ini usado no login
//inicio
procedure GravaIni(Arquivo, Sessao, Subsessao, valor: string);
var
ArqIni: TIniFile;
begin
ArqIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + Arquivo);
try
ArqIni.WriteString(Sessao, Subsessao, valor);
finally
FreeAndNil(ArqIni);
end;
end;
//fim
(*************************************************************************************************************************)
//Funcao para ler arquivo ini usado no login
//inicio
function LerIni(Arquivo, Sessao, Subsessao: string): string;
var
ArqIni: TIniFile;
sDirAplicacao: string;
begin
sDirAplicacao := ExtractFilePath(ParamStr(0));
ArqIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + Arquivo);
try
Result := ArqIni.ReadString(Sessao, Subsessao, );
finally
FreeAndNil(ArqIni);
end;
end;
//fim

(*************************************************************************************************************************)
//Lendo o arquivo ini criado (isso no create do formulário onde contém os objetos dbware´s (conexão com banco))
//inicio
begin
if not FileExists(sga.ini) then //verificando se o arquivo *.ini existe (usei o nome sga, mas o nome que você pesquisa é o mesmo nome criado)
ChamaForm(TfrmConfiguracao, frmConfiguracao) // essa procedure chama form foi feita para chamar os formularios, disponibilizarei aqui tb!
else
begin
try
with ConexaoDB do //nome do objeto dbconection do dbexpress
begin
Connected := False;
connectionname := PortoBello; //Nome do alias para conexão
drivername := interbase; //mesmo usando o firebird colocar aqui interbase, isso foi feito em delphi 7
getdriverfunc := getSQLDriverINTERBASE;
libraryname := dbexpint.dll;
params.clear;
params.add(drivername=interbase);
params.add(database= + LerInI(sga.ini, DB, caminho));
params.add(rolename=rolename);
params.add(user_name= + LerInI(sga.ini, DB, usuario));
params.add(password= + LerInI(sga.ini, DB, senha));
params.add(servercharset=);
params.add(sqldialect=3);
params.add(blobsize=-1);
params.add(commitretain=false);
params.add(waitonlocks=true);
params.add(errorresourcefile=);
params.add(localecode=0000);
params.add(interbase transisolation=readcommited);
params.add(trim char=false);
vendorlib := gds32.dll;
Connected := true;
end;
except
raise Exception.Create(Verifique se as configurações do arquivo sga.ini estão corretas!);
end;
end;
end;
//fim
(*************************************************************************************************************************)
//Chamar formulário
//inicio
procedure ChamaForm(aClasseForm: TComponentClass; aForm: TForm);
begin
{método para chamar form}
Application.CreateForm(aClasseForm, aForm);
try
aForm.ShowModal;
finally
aForm.Free;
end;
end;
//fim
(*************************************************************************************************************************)

forte abraço e bons códigos!

Emanoel Deivison
Recife - PE


GOSTEI 0
Marcos Iwazaki

Marcos Iwazaki

28/09/2012

amigo é mais ou menos isso que eu faço...

a diferença seria libraryname := dbexpint.dll; q eu uso o dbxint30.dll

vc chegou a ler o meu primeiro post com os detalhes do erro?

q ao mudar o gds32.dll acontece o erro. e se eu voltar a versão antiga funciona?

Obrigado.
GOSTEI 0
Deivison Melo

Deivison Melo

28/09/2012

Imagino que você tenha duas versões do delphi instalado em sua máquina, correto?

Delphi 7 e 2007?

GOSTEI 0
Deivison Melo

Deivison Melo

28/09/2012

Deverá utilizar a mesma versão do delphi em todas as estações, como também as mesmas dll´s
GOSTEI 0
Marcos Iwazaki

Marcos Iwazaki

28/09/2012

Na verdade apenas o 2007

mas o framework que eu utilizo no projeto se não me engano eu comecei a desenvolver no Delphi 7.

Imagino que você tenha duas versões do delphi instalado em sua máquina, correto?

Delphi 7 e 2007?

GOSTEI 0
Marcos Iwazaki

Marcos Iwazaki

28/09/2012

Amigo se não for muito incomodo....
poderia fazer ae um aplicativo novo apenas com o sqlconnection
no qual o arquivo ini eu passo apenas o caminho do banco.
e manda p mim fazendo favor.
Para facilitar em vez de ler o caminho do .ini pode por um edit na tela e eu preencho o edit e um botão p conectar.
E me passa as dlls que vc usa.


hj de noite pedi p o cliente deixar os pc ligados p fazer mais testes...
dae eu ja testo c o seu .exe tbm.

Pois eu ja testei com um aplicativo novo, feito do zero no XE2 e tbm deu erro.

Desde ja Obrigado.

Deverá utilizar a mesma versão do delphi em todas as estações, como também as mesmas dll´s
GOSTEI 0
Deivison Melo

Deivison Melo

28/09/2012

Alguém pode fazer isso para nosso amigo? Pois não tenho o delphi instalado em minha máquina (comprei um note recentemente e não instalei ainda, e como não trabalho mais diretamente com Delphi na empresa, não tenho como fazer antes de instalar o delphi em minha máquina)...
GOSTEI 0
Marcos Iwazaki

Marcos Iwazaki

28/09/2012

Finalmente um final feliz. Ou quase.
Agora são 4 da madruga... era uma questão de honra ja.

Descobri o problema num super chutão no escuro.

Instalei o .Net Framework 2 e o 3.5 E bummmmmmmmm funcionou...

Não sei se alguem saberia responder isso, eu gostaria de entender melhor isso.
Mas agora ja posso dormir em paz.

Obrigado as pessoas que deram opniões.

Problema resolvido.
GOSTEI 0
Rafael Encinas

Rafael Encinas

28/09/2012

Boa noite!

Já passei por este problema também, e depois de dias acabei descobrindo:

O problema está na "Sequência de Busca de Dll do Windows", por exemplo:

Teu aplicativo tem Dll's , como a fbclient.dll.

O Windows tenta usar a Dll na "Própria pasta do aplicativo", se o windows não encontra, ele utiliza o PATH das variáveis de Ambiente, nas configurações avançadas.

A variavel Path contém os caminhos todos aninhados c:\windows\system32\ ; c:\windows\sysWoW64 e assim vai ,

O que provavelmente aconteceu foi que quando tu instalou o .net Framework ele Alterou ou Criou um novo Path nesta variavel aí começou a funcionar.

Se você utiliza a aplicação em Rede isto fica um pouco mais claro, porque, se você não instala a aplicação e puxa direto o executável e a Dll do aplicativo não está naquele diretório logo da um erro.

Se você instala o firebird nas máquinas Cliente em uma versão diferente do banco que foi concebido o servidor, e a Dll nova não for colocada no diretorio do aplicativo vai acontecer o seguinte: O windows não vai achar a dll da versão nova na pasta do aplicativo e vai tentar usar a velha no cliente. o que pode ocasionar o erro.


Desculpe-me se me alonguei na resposta

Grato

Encinas




GOSTEI 0
Marcos Iwazaki

Marcos Iwazaki

28/09/2012

legal... entendi o que disse..

vou deixar este post como resolvido..
Obrigado a todos que ajudaram.
GOSTEI 0
Deivison Melo

Deivison Melo

28/09/2012

Muito bom!!

Vamos colocar o topico como resolvido!

GOSTEI 0
POSTAR