Estou começando a programar mas não consigo usar oprogra emoutro computador

Firebird

12/12/2012

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

Curtidas 0

Respostas

William

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.
GOSTEI 0
Flavio Oliveira

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

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?

GOSTEI 0
Claudia Nogueira

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?
GOSTEI 0
Flavio Oliveira

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.

GOSTEI 0
William

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?
GOSTEI 0
Flavio Oliveira

Flavio Oliveira

12/12/2012

As configurações estão no Data module.
GOSTEI 0
William

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

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

Claudia Nogueira

12/12/2012

Você usa os componentes da paleta interbase, dbexpress ou outro?
GOSTEI 0
William

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!!!
GOSTEI 0
Flavio Oliveira

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.
GOSTEI 0
Claudia Nogueira

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:

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

Flavio Oliveira

12/12/2012

Obrigado pela ajuda.
GOSTEI 0
Deivison Melo

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
GOSTEI 0
Flavio Oliveira

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???
GOSTEI 0
Claudia Nogueira

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:
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
POSTAR