Fórum Duvidas com limite de tentativas #294205

01/09/2005

0

Eu queria que o usuario so pudesse tentar umas 3x para indicar o caminho do banco de dados...

só que eu tentei um monte de rotinas mas nao consegui... se voces puderem me ajudar eu agradesço

o codigo eh o seguinte

procedure TFrmApresentacao.FormActivate(Sender: TObject);
Var x : string;
  base: string;
begin
memo1.Lines.LoadFromFile(´c:\arquivos de programas\ellas\nvocc\nvocc.ini´);
x:=Copy(memo1.Lines[1],9,100);


if x = ´Vazio´ then
  begin
      showmessage(´Seja bem Vindo!!!´);
      Application.CreateForm(TFrmConfiguracao, FrmConfiguracao);
      FrmConfiguracao.showmodal;
      FormActivate(Sender);
  end
else
  if not FileExists(x) then
         begin
             Showmessage(´Nao foi possivel conectar ao banco de dados´);
             Application.CreateForm(TFrmConfiguracao, FrmConfiguracao);
             FrmConfiguracao.showmodal;
             FormActivate(Sender);
         end
  else
      try
         begin
             base := ´Provider=Microsoft.Jet.OLEDB.4.0´ +
                      ´;Data Source=´ + x +
                     ´;Persist Security Info=False´;
             adoconnection1.connectionString:= base;
             AdoConnection1.Connected := True;
         end
      except
           begin
               showmessage(´Erro ao conectar com o banco de dados´);
               Application.CreateForm(TFrmConfiguracao, FrmConfiguracao);
               FrmConfiguracao.showmodal;
               FormActivate(Sender);
           end
end;
timer1.Enabled:=True;
end;



Fernando_cunha

Fernando_cunha

Responder

Posts

01/09/2005

Rjun

O que você não conseguiu? O que essa sua rotina faz?


Responder

Gostei + 0

01/09/2005

Fernando_cunha

como diria jack estripador... vamos por partes...

esta parte do codigo le o arquivo ini.
memo1.Lines.LoadFromFile(´c:\arquivos de programas\ellas\nvocc\nvocc.ini´); 
x:=Copy(memo1.Lines[1],9,100); 



Se no arquivo ini estiver escrito vazio, é porque é a primeira vez que é executado o programa. e abre a tela de configuracao para colocar o caminho do banco de dados no ini.

if x = ´Vazio´ then 
  begin 
      showmessage(´Seja bem Vindo!!!´); 
      Application.CreateForm(TFrmConfiguracao, FrmConfiguracao); 
      FrmConfiguracao.showmodal; 
      FormActivate(Sender); 
  end 




Se no Ini estiver qualquer caminho la eu verifico se este caminho é valido para que nao de problema ao abrir o programa

if not FileExists(x) then 
         begin 
             Showmessage(´Nao foi possivel conectar ao banco de dados´); 
             Application.CreateForm(TFrmConfiguracao, FrmConfiguracao); 
             FrmConfiguracao.showmodal; 
             FormActivate(Sender); 
         end 
  else 





Se ele nao entrou em nenhuma das condicoes acima, ou seja nao é a primeira vez que abre o programa, e o caminho que esta no ini existe, ai eu tento conectar ao banco de dados... se nao conectar ai da erro...



try 
         begin 
             base := ´Provider=Microsoft.Jet.OLEDB.4.0´ + 
                      ´;Data Source=´ + x + 
                     ´;Persist Security Info=False´; 
             adoconnection1.connectionString:= base; 
             AdoConnection1.Connected := True; 
         end 
      except 
           begin 
               showmessage(´Erro ao conectar com o banco de dados´); 
               Application.CreateForm(TFrmConfiguracao, FrmConfiguracao); 
               FrmConfiguracao.showmodal; 
               FormActivate(Sender); 



e se passar das 3 condicoes, ele coloca em enable o timer1 que da loading nos forms e abre o FrmPrincipal.

e o que eu preciso é que quando o usuario foi la e colocou o caminho no ini ex: c:\temp\123, logico que o programa vai dar erro... ai queria que o cara so pudesse tentar indicar o banco de dados umas 3 vezes... ai depois das 3 tentativas ele da um application.terminate sei la... eu ja tentei algumas coisas e nao consegui por isso to postando aqui.


obrigado pela ajuda por enquanto.


Responder

Gostei + 0

01/09/2005

Martins

Sei não companheiro, mas, acho q vc terá q rever seu código, pq se vc quer aquele velho laço onde existem as tentativas, onde ele incrementa um número em uma variavel inteira e é checado por uma instrução condicional para quando for maior ou igual a 3, ele disparar um evento, vc terá q rever esse código aí.


Responder

Gostei + 0

01/09/2005

Fernando_cunha

Eu a primeiro instante pensei no seguinte... antes de tudo eu fazer um if mais ou menos assim ...


varivel : = 1;
if Variavel < 4 then
ai faz todas estas rotinas. ....
..
...
....
else
application.terminate;


pois como todos estes codigos sao no evento onactivate e 3 condicoes ´malucas´ minha sempre chama o formactivate(sender) ... mas nao deu certo ... provavelmente eu errei em alguma coisa ou entao como voce disse : terei que ver direito este codigo


Responder

Gostei + 0

01/09/2005

Martins

como diria jack estripador... vamos por partes... esta parte do codigo le o arquivo ini.
memo1.Lines.LoadFromFile(´c:\arquivos de programas\ellas\nvocc\nvocc.ini´); 
x:=Copy(memo1.Lines[1],9,100); 
Se no arquivo ini estiver escrito vazio, é porque é a primeira vez que é executado o programa. e abre a tela de configuracao para colocar o caminho do banco de dados no ini.
if x = ´Vazio´ then 
  begin 
      showmessage(´Seja bem Vindo!!!´); 
      Application.CreateForm(TFrmConfiguracao, FrmConfiguracao); 
      FrmConfiguracao.showmodal; 
      FormActivate(Sender); 
  end 

Se no Ini estiver qualquer caminho la eu verifico se este caminho é valido para que nao de problema ao abrir o programa
if not FileExists(x) then 
         begin 
             Showmessage(´Nao foi possivel conectar ao banco de dados´); 
             Application.CreateForm(TFrmConfiguracao, FrmConfiguracao); 
             FrmConfiguracao.showmodal; 
             FormActivate(Sender); 
         end 
  else 

Se ele nao entrou em nenhuma das condicoes acima, ou seja nao é a primeira vez que abre o programa, e o caminho que esta no ini existe, ai eu tento conectar ao banco de dados... se nao conectar ai da erro...

try 
         begin 
             base := ´Provider=Microsoft.Jet.OLEDB.4.0´ + 
                      ´;Data Source=´ + x + 
                     ´;Persist Security Info=False´; 
             adoconnection1.connectionString:= base; 
             AdoConnection1.Connected := True; 
         end 
      except 
           begin 
               showmessage(´Erro ao conectar com o banco de dados´); 
               Application.CreateForm(TFrmConfiguracao, FrmConfiguracao); 
               FrmConfiguracao.showmodal; 
               FormActivate(Sender); 

e se passar das 3 condicoes, ele coloca em enable o timer1 que da loading nos forms e abre o FrmPrincipal. e o que eu preciso é que quando o usuario foi la e colocou o caminho no ini ex: c:\temp\123, logico que o programa vai dar erro... ai queria que o cara so pudesse tentar indicar o banco de dados umas 3 vezes... ai depois das 3 tentativas ele da um application.terminate sei la... eu ja tentei algumas coisas e nao consegui por isso to postando aqui. obrigado pela ajuda por enquanto.

Certo então vamos ver somente a parte onde o usuário irá indicar o caminho para conexão com seu Banco, eh na tela de configuração do sistema?

pq se for é só vc ver, ele digita uma vez aí pede pra conectar, o caminho é inválido, tem uma var q recebe um valor no caso [b:b2d4c96ea5]1[/b:b2d4c96ea5], tenta novamente, incrementa +1, e lá tem q haver um if..then ..else.. para verificar se tentativa > 3 então Contate o suporte, pq suas tentativas de config . o sistema se esgotaram.

+/- isso, não sei bem como vc tá fazendo.


Martins


Responder

Gostei + 0

01/09/2005

Martins

procedure TFrmxxx.ButtonxxxClick(Sender: TObject);
begin
   if x < 4 then
    begin
     if Edit1.Text = ´Teste´ then
       begin
        ShowMessage(´Teste hehehe ´+IntToStr(x));
       end
     else
       X:= X + 1;
    end
   else
  ShowMessage(´Vc já esgotou toda a minha paciência!!´);
end;


Só um exemplo de como a instrução condicional ficaria, x sendo uma var publica.


Responder

Gostei + 0

02/09/2005

Fernando_cunha

eu consegui... só que foi uma gambiz neh...

veja o codigo...


begin

if memo1.Tag < 4 then
begin

if timer1.Tag <> 2 then
begin
memo1.Lines.LoadFromFile(´c:\arquivos de programas\ellas\nvocc\nvocc.ini´);
x:=Copy(memo1.Lines[1],9,100);


if x = ´Vazio´ then
  begin
      showmessage(´Seja bem Vindo!!!´);
      Application.CreateForm(TFrmConfiguracao, FrmConfiguracao);
      timer1.tag:= 1;
      
      FrmConfiguracao.showmodal;
      FormActivate(Sender);
  end
else
  if not FileExists(x) then
         begin
             Showmessage(´Nao foi possivel conectar ao banco de dados´);
             Application.CreateForm(TFrmConfiguracao, FrmConfiguracao);
             timer1.tag:= 1;

             FrmConfiguracao.showmodal;

             FormActivate(Sender);
         end
  else
      try
         begin
             base := ´Provider=Microsoft.Jet.OLEDB.4.0´ +
                      ´;Data Source=´ + x +
                     ´;Persist Security Info=False´;
             adoconnection1.connectionString:= base;
             AdoConnection1.Connected := True;
         end
      except
           begin
               showmessage(´Erro ao conectar com o banco de dados´);
               Application.CreateForm(TFrmConfiguracao, FrmConfiguracao);
               timer1.tag:= 1;

               FrmConfiguracao.showmodal;
               FormActivate(Sender);
           end
end;

timer1.Enabled:=True;
end
else

application.Terminate;

end
else


Showmessage( ´ voce tentou 3 vezes ´ );
application.Terminate;
end;




e na tela Frmconfiguracao eu coloquei o seguinte



if FrmApresentacao.memo1.Tag <> 4 then
 Frmapresentacao.Memo1.Tag :=  Frmapresentacao.Memo1.Tag + 1






Funcionou ... esta uma solução meio ´porca´ mas esta funcionando... qualquer coisa eu tento um codigo mais limpo... ta muito enrolado ele.... mas funciona... valeu pessoal...


Responder

Gostei + 0

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

Aceitar