GARANTIR DESCONTO

Fórum Estou começando a programar mas não consigo usar oprogra emoutro computador #430885

12/12/2012

0

Bom dia Amigos, sou iniciante criei uma agenda no delphi com o banco firebird e a compilei no inno setup mas quando eu o instalo em umamaquina que não tem o delphi ele não funciona.

alguem poderia me ajudar???
Flavio Oliveira

Flavio Oliveira

Responder

Posts

12/12/2012

William

Colega algumas perguntas:

1 - Vc instalou o servidor Firebird nessa máquina?

2 - Vc está levando as dlls junto com o executável da aplicação (dbxfb.dll, fbclient.dll)?

Conforme suas respostas fica mais fácil de direciona-lo melhor.
Responder

Gostei + 0

12/12/2012

Flavio Oliveira

Sim eu instalei o servidor na maquina, mas quanto as dlls eunão sei como encontrá-las.

Responder

Gostei + 0

12/12/2012

William

Caminho para fbclient.dll, se o S.O. for 64 bits:
C:\Program Files (x86)\Firebird\Firebird_2_5\bin

Caminho para dbxfb.dll, se o S.O. for 64 bits:
C:\Program Files (x86)\Embarcadero\RAD Studio\8.0\bin

É exibida alguma mensagem de erro?

O Caminho do banco está certo?

Responder

Gostei + 0

12/12/2012

Claudia Nogueira

Você deixou a configuração do banco de dados chapado no componente, ou no onCreate do DataModule está passando o caminho da base de dados para o componente?
Tá dando que mensagem de erro ao abrir o programa?
Responder

Gostei + 0

12/12/2012

Flavio Oliveira

Boa noite amigos as mensagens são essas: exception EIBInterbase base error module label_Generator.exe at 001A1362
I/O error during "create file (open)" operation for file C:\Label_Genarator\banco_Label_genarator\label_genarator.GDB
error while trying to open file
O sistema não pode encontrar o caminho especificado.

Obrigado por estarem me ajudando.

Responder

Gostei + 0

12/12/2012

William

Como a Claudia peguntou acima, as configurações de conexão estão gravadas direto no executável ou vc está usando um arquivo INI para passar esse parâmetros?

Essa máquina q vc está testando o sistema possui o banco nesse mesmo caminho?
Responder

Gostei + 0

12/12/2012

Flavio Oliveira

As configurações estão no Data module.
Responder

Gostei + 0

12/12/2012

William

O seu arquivo do banco está nesse caminho "C:\Label_Genarator\banco_Label_genarator\label_genarator.GDB" na máquina q vc instalou?
Responder

Gostei + 0

13/12/2012

Flavio Oliveira

Esse caminho e o mesmo que eu criei quando eu instalo ele direciona para esse caminho acho que o erro deve estar ai.
Responder

Gostei + 0

13/12/2012

Claudia Nogueira

Você usa os componentes da paleta interbase, dbexpress ou outro?
Responder

Gostei + 0

13/12/2012

William

Não sei se a Claudia concorda comigo, mas acho que a melhor coisa a se fazer é vc carregar os parâmetros de conexão via arquivo INI.

Esse erro é bem típico, não acha o arquivo do banco da bug!!!
Responder

Gostei + 0

13/12/2012

Flavio Oliveira

Eu uso os componentes da paleta Interbase, vcs poderiam me ensinar a carregar os arquivos via INI???

Agradeço pela atenção.
Responder

Gostei + 0

13/12/2012

Claudia Nogueira

Crie um arquivo na pasta do exe com o nome iniconfig.ini.
Se seu sistema operacional colocar o .txt no final aí vc tem que mudar somente pra .ini.

Dentro dele coloque isso:

[CONEXAO]
DATABASE=C:\Label_Genarator\banco_Label_genarator\label_genarator.GDB
USUARIO=SYSDBA
SENHA=masterkey

Essa linha DATABASE=C:\Label_Genarator\banco_Label_genarator\label_genarator.GDB tem que ser o caminho físico do banco de dados.
Então se for outro você troca ali, e se for pra usar em rede, nos terminais esse arquivo ini o DATABASE seria mais ou menos assim:
DATABASE=\\SERVIDOR\C:\Label_Genarator\banco_Label_genarator\label_genarator.GDB.

No DataModule entra no componete IbDataBase e limpe o campo DataBase.
Adicione ao uses do DataModule IniFiles, Forms, Windows se algum desses ainda não estiver lá.
No OnCreate do DataModule coloque isso:

Var
  IniConfig : TIniFile;
  sDataBase, sUsuario, sSenha : String;
begin
  try
    try
      IniConfig := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'iniconfig.ini');
      sDataBase := IniConfig.ReadString('CONEXAO','DATABASE','');
      sUsuario := IniConfig.ReadString('CONEXAO','USUARIO','');
      sSenha := IniConfig.ReadString('CONEXAO','SENHA','');
      IniConfig.WriteString('CONEXAO','DATABASE',sDataBase);
      IniConfig.WriteString('CONEXAO','USUARIO',sUsuario);
      IniConfig.WriteString('CONEXAO','SENHA',sSenha);
      Base.Connected := False;
      Base.DatabaseName := sDataBase;
      Base.Params.Values['user_name'] := sUsuario;
      Base.Params.Values['password'] := sSenha;
      Base.Connected := True;
    except
      on E : Exception do
      begin
        Application.MessageBox('Impossível conectar ao BD!','Erro',MB_ICONINFORMATION+MB_OK);
        Application.Terminate;
      end;
    end;
  finally
    IniConfig.Free;
  end;
end;


Obs1: Base é o name do meu componente IbDataBase.
Obs2: Em tempo de projeto pra ficar melhor pra você programar, você pode deixar preenchido a propriedade DataBase do IbDataBase, porém toda vez que você for gerar o exe para passar pro cliente você tem que limpar o campo e campilar.
Responder

Gostei + 0

13/12/2012

Flavio Oliveira

Obrigado pela ajuda.
Responder

Gostei + 0

13/12/2012

Deivison Melo

Para entender a manipulação de arquivos *.ini segue:

https://www.devmedia.com.br/manipulando-arquivos-ini/304

----------------------------------------------------------------------------------------------------------

Seguem abaixo exemplos usados com a conexão dbexpress usando o banco de dados firebird...

(*************************************************************************************************************************)
//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
(*************************************************************************************************************************)


A conexão com os componentes IBX são mais simples, apenas 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)...

PS. pode seguir o exemplo usando pela colaboradora acima...

forte abraço!

Emanoel Deivison
Recife - PE
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar