Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda Com Ini


VDLR

Pergunta

Pessoal peguei um artigo na internet para conectar o sistema através do INI, e tentei adaptar ao meu sistema, só que estou recebendo diversos erros que não seu como corrigir, alguém pode me ajudar.

Os códigos são estes:

procedure Gravar_Configuracao(Url, Usr, pws : String);
var Banco : TIniFile;
Begin
  Try
    SetCurrentDir(ExtractFilePath(Application.ExeName));
    Banco := TIniFile.Create(GetCurrentDir + '\\Phoenix2\C\VDL - Controle SMS\BDados\BDSMS.GDB.ini');
    Banco.WriteString('DATABASE','\\Phoenix2\C\VDL - Controle SMS\BDados\BDSMS.GDB',URL);
    Banco.WriteString('DATABASE','SYSDBA',USR);
    Banco.WriteString('DATABASE','masterkey',PWS);
  Finnaly
    Banco.Free;
  End;
End;

procedure Ler_Configuracao(var Url: String; var Usr: String; var pws: String);
Begin
  Try
    Banco := TIniFile.create(GetCurrentDir+'\\Phoenix2\C\VDL - Controle SMS\BDados\BDSMS.GDB.ini');
    URL := Banco.WriteString('DATABASE','\\Phoenix2\C\VDL - Controle SMS\BDados\BDSMS.GDB',URL);
    USR := Banco.WriteString('DATABASE','SYSDBA',USR);
    PWS := Banco.WriteString('DATABASE','masterkey',PWS);
  Finnaly
    Banco.Free;
  End;
End;

procedure TFRlembrdoc.FormCreate(Sender: TObject);
begin
  SetCurrentDir(ExtractFilePath(Application.ExeName));
  IBContrSMS.Close;
  Ler_Configuracao(Url,Usr,Pwd);
  IBContrSMS.Params.Add('user_name='+USR);
  IBContrSMS.params.add('password ='+PWD);
  IBContrSMS.DatabaseName := Url;
  IBContrSMS.Open;
end;

Os erros são este:

[Error] LembrDoc.pas(114): Undeclared identifier: 'Finnaly'

[Error] LembrDoc.pas(115): Missing operator or semicolon

[Error] LembrDoc.pas(116): EXCEPT or FINALLY expected

[Error] LembrDoc.pas(122): Undeclared identifier: 'Banco'

[Error] LembrDoc.pas(123): Missing operator or semicolon

[Error] LembrDoc.pas(124): Missing operator or semicolon

[Error] LembrDoc.pas(125): Missing operator or semicolon

[Error] LembrDoc.pas(126): Undeclared identifier: 'Finnaly'

[Error] LembrDoc.pas(127): Missing operator or semicolon

[Error] LembrDoc.pas(128): EXCEPT or FINALLY expected

[Error] LembrDoc.pas(244): Undeclared identifier: 'Url'

[Error] LembrDoc.pas(244): Types of actual and formal var parameters must be identical

[Fatal Error] LembreteDoc.dpr(5): Could not compile used unit 'LembrDoc.pas'

Abraço

Valdecir

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Micheus tudo bem,

Cara colocando estes componentes na caixa Expression

IBContrSMS.Params[0]

IBContrSMS.params[1]

IBContrSMS.DatabaseName

Recebo isto em Result

'user_name=SYSDBA'

'password=masterkey'

'Phoenix2:\VDLR - Controle SMS\BDados\BDSMS.GDB'

Parece que está certo. Porém copilando dá o erro, só funciona se eliminar as linhas desta procedure que é onde grava e lê o arquivo INI

procedure TFRlembrdoc.FormCreate(Sender: TObject);
//Var url,usr,pws : String;
begin
//  IBContrSMS.Connected:=True;
//  Gravar_Configuracao(Url,Usr,pws);
//  SetCurrentDir(ExtractFilePath(Application.ExeName));
//  IBContrSMS.Close;
//  Ler_Configuracao(Url,Usr,pws);
//  IBContrSMS.Params.Add('user_name='+Usr);
//  IBContrSMS.params.add('password='+PWS);
//  IBContrSMS.DatabaseName :='Phoenix2:\VDLR - Controle SMS\BDados\BDSMS.GDB'+URL;
//  IBContrSMS.Open;

end;

Sei lá tem alguma idéia

Abraços

Valdecir

:(

Link para o comentário
Compartilhar em outros sites

  • 0
Porém copilando dá o erro, só funciona se eliminar as linhas desta procedure que é onde grava e lê o arquivo INI

procedure TFRlembrdoc.FormCreate(Sender: TObject);
//Var url,usr,pws : String;
begin
//  IBContrSMS.Connected:=True;
//  Gravar_Configuracao(Url,Usr,pws);
//  SetCurrentDir(ExtractFilePath(Application.ExeName));
//  IBContrSMS.Close;
//  Ler_Configuracao(Url,Usr,pws);
//  IBContrSMS.Params.Add('user_name='+Usr);
//  IBContrSMS.params.add('password='+PWS);
//  IBContrSMS.DatabaseName :='Phoenix2:\VDLR - Controle SMS\BDados\BDSMS.GDB'+URL;
//  IBContrSMS.Open;

end;
Sei lá tem alguma idéia
VDLR, vamos sincronizar as idéias. - você está com um erro de compilação? Qual? - esta linha com certeza resulta em problemas: IBContrSMS.DatabaseName :='Phoenix2:\VDLR - Controle SMS\BDados\BDSMS.GDB'+URL; Note que você está concatenando o valor de URL, lido do arquivo ini com o caminho fixo (texto). Deveria ficar deste modo: IBContrSMS.DatabaseName := URL; - em run-time você está adicionando linhas a Params, sendo que se você colocou algo nesta propriedade em design-time poderá ter erros também. Então o correto é que você limpe seu conteúdo antes de prenchê-lo: IBContrSMS.Params.Clear; Segue uma sugestão de como esta parte de leitura e gravção poderiam ficar:
procedure TFRlembrdoc.FormCreate(Sender: TObject);
Var
  url,usr,pws : String;
begin
  Ler_Configuracao(Url,Usr,pws);
  IBContrSMS.Params.Clear;  // *** limpa qualquer informação que você tenha colocado em design-time
  IBContrSMS.Params.Add('user_name='+Usr);
  IBContrSMS.params.Add('password='+PWS);
  IBContrSMS.DatabaseName := URL;
  IBContrSMS.Open;
end;

procedure TFRlembrdoc.Gravar_Configuracao(Url, Usr, pws : String);
var 
  BDSMS :TIniFile;
begin
  BDSMS := TIniFile.Create(ExtractFilePath(Application.ExeName) + '\Database.ini');
  try
    BDSMS.WriteString('Database', 'Local', URL);
    BDSMS.WriteString('Database', 'user_name', USR);
    BDSMS.WriteString('Database', 'password', PWS);
  finally
    BDSMS.Free;
  end;
end;

procedure TFRlembrdoc.Ler_Configuracao(var Url, Usr, Pws: String);
var 
  BDSMS :TIniFile;
  IniFile :String;
begin
 // inicializa com os valores default
  URL := '\\Phoenix2\C\VDL - Controle SMS\BDados\BDSMS.GDB';
  USR := 'SYSDBA';
  PWS := 'masterkey';
 // monta nome do arquivo ini com sua localização (path)
  IniFile := ExtractFilePath(Application.ExeName) + '\Database.ini';
  if FileExists(IniFile) then
  begin
    BDSMS := TIniFile.Create(IniFile);
    try
      URL := BDSMS.ReadString('Database', 'Local', URL);
      USR := BDSMS.ReadString('Database', 'user_name', USR);
      PWS := BDSMS.ReadString('Database', 'password', PWS);
    finally
      BDSMS.Free;
    end;
  end else  // isso provavelmente ocorrerar apenas uma única vez
    Gravar_Configuracao(Url, Usr, pws);
end;

Espero não ter errado nada ;)

Gostaria de alertá-lo para o fato de que não é prática correta armazenar, desta forma, as informações do usuário (usuário e senha).

Se você pretende, manter apenas o uso do usuário e senha padrão (SYSDBA e Masterkey), ou seja, não haverá tela de login e controles de acesso, seria conveniente que você os definisse apenas em design-time. Apenas o servidor/banco (url) poderia ser armazenado no arquivo ini sem maiores restrições.

Se você levar em consideração este último comentário, deverão ser feitos os respectivos ajustes no código de gravação e leitura do aquivo ini.

[]s

p.s. No post que lhe falei sobre o break-point, esqueci de lhe dizer como continuar a execução. Seria através das teclas:

-> F9 = executar até termino do programa ou próximo break;

-> F8 = execução linha após linha, sendo que na chamada à procedimentos este são executados diretamente

-> F7 = execução linha após linha, sendo que na chamada à procedimentos o programa desvia para dentro dele de modo "monitorar" a execução de cada linha existente;

mais ou menos isso.

Link para o comentário
Compartilhar em outros sites

  • 0

Micheus fiz alguns ajustes e funcionou, o Arq INI ficou assim.

[Database]

DatabaseName=Phoenix2:\VDLR - Controle SMS\BDados\BDSMS.GDB

user_name=SYSDBA

password=masterkey

Porém com este seu comentário que você fez, qualquer pessoa que abrir o arquivo INI vai saber qual é o usuário e senha do banco.

Gostaria de alertá-lo para o fato de que não é prática correta armazenar, desta forma, as informações do usuário (usuário e senha).

Se você pretende, manter apenas o uso do usuário e senha padrão (SYSDBA e Masterkey), ou seja, não haverá tela de login e controles de acesso, seria conveniente que você os definisse apenas em design-time. Apenas o servidor/banco (url) poderia ser armazenado no arquivo ini sem maiores restrições.

Se você levar em consideração este último comentário, deverão ser feitos os respectivos ajustes no código de gravação e leitura do aquivo ini.

Cara já pensei, mas não achei como mudar isto porque quando o INI fica desta forma

[Database]

DatabaseName=

user_name=

password=

Não funcionava dava aqueles erros, você vê alguma alternativa.

Abraços

Valdecir

;)

Link para o comentário
Compartilhar em outros sites

  • 0

opa

desculpa intrometer, mas VDLR, você não entendeu o esquema

de arquivos INI, por isso você está apanhando...

sobre o comentário do Micheus, se você vai manter o usuário

e senha padrão do IB, "SYSDBA"/"MasterKey" então pra que

armazenar no arquivo .ini estes valores?

sendo assim, por exemplo, no seu código, na rotina em que

você faz a conexão com o banco, vamos supor que você esteja

fazendo

var

szUser, szPass: String;

begin

{...}

szUser := ini.ReadString('Database', 'user_name', 'SYSDBA');

szPass := ini.ReadString('Database', 'password', 'masterkey');

{...}

o que o Micheus quis dizer é que como você vai manter padrão

então esquece de gravar e ler no .ini isso, seria mais fácil

szUser := 'sysdba';

szPass := 'masterkey';

ou melhor ainda, já joga direto sem nem usar variáveis porque

variáveis como o próprio nome diz é quando varia seu conteúdo

e neste caso não vai...

jogando direto baseado no que vi no tópico seria

IBContrSMS.Params.Add('user_name=SYSDBA');
IBContrSMS.params.Add('password=masterkey');
Cara já pensei, mas não achei como mudar isto porque quando o INI fica desta forma
Fica desta forma porque você está gravando desta forma, então é só tirar o código exemplo
//BDSMS.WriteString('Database', 'user_name', USR);
//BDSMS.WriteString('Database', 'password', PWS);

procure entender a estrutura de arquivos .ini que voce vai pegar

fácil fácil...

abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Povo, pelo que consegui resolver no meu caso tem que ver em que diretório o arquivo INI está ficando... porque na ânsia de resolver o problema a gente coloca os arquivos exe e ini em qualquer lugar .. .mas eles tem que ficar onde ficou definido no código fonte...

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...