Estou começando a programar mas não consigo usar oprogra emoutro computador
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???
alguem poderia me ajudar???
Flavio Oliveira
Curtidas 0
Respostas
William
12/12/2012
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.
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.
GOSTEI 0
Flavio Oliveira
12/12/2012
Sim eu instalei o servidor na maquina, mas quanto as dlls eunão sei como encontrá-las.
GOSTEI 0
William
12/12/2012
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?
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?
GOSTEI 0
Claudia Nogueira
12/12/2012
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?
Tá dando que mensagem de erro ao abrir o programa?
GOSTEI 0
Flavio Oliveira
12/12/2012
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.
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.
GOSTEI 0
William
12/12/2012
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?
Essa máquina q vc está testando o sistema possui o banco nesse mesmo caminho?
GOSTEI 0
Flavio Oliveira
12/12/2012
As configurações estão no Data module.
GOSTEI 0
William
12/12/2012
O seu arquivo do banco está nesse caminho "C:\Label_Genarator\banco_Label_genarator\label_genarator.GDB" na máquina q vc instalou?
GOSTEI 0
Flavio Oliveira
12/12/2012
Esse caminho e o mesmo que eu criei quando eu instalo ele direciona para esse caminho acho que o erro deve estar ai.
GOSTEI 0
Claudia Nogueira
12/12/2012
Você usa os componentes da paleta interbase, dbexpress ou outro?
GOSTEI 0
William
12/12/2012
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!!!
Esse erro é bem típico, não acha o arquivo do banco da bug!!!
GOSTEI 0
Flavio Oliveira
12/12/2012
Eu uso os componentes da paleta Interbase, vcs poderiam me ensinar a carregar os arquivos via INI???
Agradeço pela atenção.
Agradeço pela atenção.
GOSTEI 0
Claudia Nogueira
12/12/2012
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:
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.
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.
GOSTEI 0
Flavio Oliveira
12/12/2012
Obrigado pela ajuda.
GOSTEI 0
Deivison Melo
12/12/2012
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
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
GOSTEI 0
Flavio Oliveira
12/12/2012
Só mais uma duvida, eu digitei todos os comandos mas quando eu vou executa-lo ele me retorna esse erro: Project Label_genarator.exe raised exception class EIBclienterror with message'Database name is missing'. process stopped. use step or run to continue.
alguem pode me ajudar com mais essa zica???
alguem pode me ajudar com mais essa zica???
GOSTEI 0
Claudia Nogueira
12/12/2012
"Database name is missing" quer dizer que o campo DataBase não está com nenhum valor, ou seja, não está carregando as informações do arquivo ini, ou por ele não estar na pasta do executável ou os dados do arquivo ini não estão corretos, ou ainda o nome do arquivo não está correto.
Se você está usando como eu te passei, o arquivo ini tem que estar junto com o exe para poder ser carregado com esse código:
Veja se não criou sem quer o arquivo com o nome iniconfig.ini.txt desmarcando a opção de “Ocultar as extensões dos tipos de arquivo conhecidos”.
Se você está usando como eu te passei, o arquivo ini tem que estar junto com o exe para poder ser carregado com esse código:
IniConfig := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'iniconfig.ini');
Veja se não criou sem quer o arquivo com o nome iniconfig.ini.txt desmarcando a opção de “Ocultar as extensões dos tipos de arquivo conhecidos”.
GOSTEI 0