Fórum Conexão em Rede com Dbexpress e Firebird #420953
02/08/2012
0
Fiz o seguinte: Criei um arquivo INI e no beforeconnect do TSQLconection utilizo o seguinte código:
procedure TF_Cadastro.ConexaoBeforeConnect(Sender: TObject);
var conecta:TIniFile;
begin
try
conecta:= TIniFile.Create(ExtractFilePath(Application.ExeName)+config.ini);
with F_Cadastro.conexao do
begin
Connected:=false;
LoadParamsOnConnect:= true;
DriverName:=conecta.ReadString(DADOS,DRIVER,);
VendorLib :=conecta.ReadString(DADOS,VENDEDOR,);
LibraryName:=conecta.ReadString(DADOS,LIVRARIA,);
ConnectionName := conecta.ReadString(DADOS,CONEXAO,);
Params.Clear;
GetDriverFunc:=Conecta.ReadString(DRIVER,FUNCAO,);
Params.Values[database] := conecta.ReadString(DADOS,DATABASE,);
Params.Values[user_name] := conecta.ReadString(DADOS,USERNAME,);
Params.Values[password] := conecta.ReadString(DADOS,PASSWORD,);
params.Values[commitretain]:= conecta.ReadString(DADOS,COMITE,);
params.Values[sqldialect] :=conecta.ReadString(DADOS,SQL,);
end;
finally
conecta.Free;
end;
end;
Com isto, apago todas as configurações do Object Inspector e minha aplicação roda normalmente. Mas quando levo o executável para outro computador na Rede(wireless) não funciona de jeito nenhum. Ele não reconhece o connectionName(que no meu caso é CANTINHO).Ressalto que nesta máquina cliente tenho o firebird instalado com cofigurações básicas de cliente, tenho também as Dlls : fbclient.dll e dbxfb.dll , também em meu projeto a Unit midas está declarada.
O erro que acontece é este: Exception EOleException in module Sistconsig.exe at 0016b080.Invalid Argument:CANTINHO.
Ou seja, parece que não está reconhecendo o nome da conexão.Ele está dizendo que o Argumento(o nome da conexão no Delphi) é inválido. Se retiro o nome do INI , ele diz que não tem nome. Não sei o porquê disto. Se alguém puder me dar um orientação quanto a isto, agradeceria bastante, pois preciso implementar este projeto em Rede, pois foi pra isso que ele está sendo criado.
Informo também que, não sei se isto é relevante, a arquitetura do computador que uso é 64bits(windows 7) e a do outro computador que utilizei como cliente é 32bits(windows 7).
Já tentei entre 2 computadores de 32 bits(um virtual e outro físico) , mas o problema continuou. Não sei mais o que fazer. Preciso de ajuda. fico no aguardo.
Em tempo, Pra mim é uma grande honra fazer parte desta comunidade.
Sergio Silva
Curtir tópico
+ 0Posts
02/08/2012
Bruno Leandro
c:\sistema\banco.fdb e deveria ser 127.0.0.1:c:\\sistema\\banco.fdb ou 198.168.0.90:c:\\sistema\\banco.fdb algo do genero, faça o teste e estamos a disposição para seu retorno.
Gostei + 0
03/08/2012
Sergio Silva
procedure TF_Cadastro.ConexaoBeforeConnect(Sender: TObject);
var conecta:TIniFile;
begin
try
conecta:= TIniFile.Create(ExtractFilePath(Application.ExeName)+config.ini);
with F_Cadastro.conexao do
begin
Connected:=false;
LoadParamsOnConnect:= true;
DriverName:=conecta.ReadString(DADOS,DRIVER,);
VendorLib :=conecta.ReadString(DADOS,VENDEDOR,);
LibraryName:=conecta.ReadString(DADOS,LIVRARIA,);
ConnectionName := conecta.ReadString(DADOS,CONEXAO,);
Params.Clear;
GetDriverFunc:=Conecta.ReadString(DRIVER,FUNCAO,);
Params.Values[database] := conecta.ReadString(DADOS,DATABASE,);
Params.Values[user_name] := conecta.ReadString(DADOS,USERNAME,);
Params.Values[password] := conecta.ReadString(DADOS,PASSWORD,);
params.Values[commitretain]:= conecta.ReadString(DADOS,COMITE,);
params.Values[sqldialect] :=conecta.ReadString(DADOS,SQL,);
end;
finally
conecta.Free;
end;
end;
Tem as aspas no final para buscar no arquivo INI . Sim , lá tem o caminho do Banco, tudo certinho : eis aí meu arquivo INI:
[DADOS]
VENDEDOR=fbclient.dll
CONEXAO =CANTINHO
DRIVER =FIREBIRD
FUNCAO =getSQLDriverINTERBASE
LIVRARIA=dbxfb.dll
DATABASE =NOME DO HOST:PARTICÃO:\PASTA\PASTA\ARQUIVO.FDB
USERNAME=SYSDBA
PASSWORD=masterkey
LOGIN=FALSE
COMITE=FALSE
SQL=3
Esta é a secão da configuração de comunicação do dbexpress com o banco. Faço os teste no próprio delphi(pois retirei todas as conexões do object Inpecto e utilizo apenas o arquivo.ini, como já disse anteriormente) e posso alterar outros dados no arquivo.ini que o programa abre normalmente, mas se alterar o nome da conexão ele não aceita e diz que o argumento é inválido e se alterar também os dados do banco no Provide do dbexpress(Dataexplorer), ele também não entra. Até aí tudo bem, mas por que, na rede, ele diz que o connectionName é inválido? Será que falta mais alguma dll pra levar para o outro pc? Instalei o firebird nele com configurações básicas, levei o fbclient.dll e o dbxfb.dll e declarei a unit Midaslib no projeto e também no datamodule do TSQLconnection Talvez esteja esquecendo de levar algum outro arquivo, não sei!
O certo é que estou deixando de fazer alguma coisa ou fazendo algo errado.Só sei que meu problema todo é nesta parte : ConnectionName:= conecta.ReadString(DADOS,CONEXAO,); Na rede, o executável não está reconhecendo o nome da conexão que está no Delphi.
Não há nada que faça este executável Funcionar em outro PC. Se puder me ajudar, agradeceria muito mesmo.
Gostei + 0
03/08/2012
Deivison Melo
(*************************************************************************************************************************)
//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)) no meu caso
coloquei no datamodule principal que faz a conexão com o banco de dados
//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
(*************************************************************************************************************************)
Com isso você terá que adaptar para que o caminho do seu banco de dados seja lido do arquivo *.ini criado para o seu sistema
(ler com a função criada)...
forte abraço!
Emanoel Deivison
Recife - PE
Gostei + 0
03/08/2012
Sergio Silva
Gostei + 0
03/08/2012
Sergio Silva
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)