GARANTIR DESCONTO

Fórum Porque é tão complicado esse BEGIN...END (com ou sem ;) #273159

18/03/2005

0

Gente,

Sinceramente não ocnsigo entender porque JAMAIS consegui entender quando deveo usar o maldito END. Sempre fico confuso com o END + ELSE e IF´s aninhados. Veja o Exemplo abaixo: Está errado, perdi mais de meia hora e não consog ver onde está ERRADO. POr favor me ajudem.

Obrigado,

Alex

procedure TForm_Controle_Acessos.BtnOKClick(Sender: TObject);
var Result: Boolean;
begin
// Inicializa com a Validação Falsa
Result := False;
// Abrindo tabela de Usuários
DataMod.ADOTable_Usuarios.Open;
// Se o Nome do Usuário não foi informado o sistema avisa
If Form_Controle_Acessos.FUsuario.Text = ´´ then
begin
MessageBeep(64);
MessageDlg(´O Usuário não foi informado´,mtInformation,[mbOK],0);
Form_Controle_Acessos.FUsuario.SetFocus;
Abort;
end;
// Se a senha não foi informada o Sistema Avisa
If Form_Controle_Acessos.FSenha.Text = ´´ then
begin
MessageBeep(64);
MessageDlg(´A Senha não foi informada´,mtInformation,[mbOK],0);
Form_Controle_Acessos.FSenha.SetFocus;
Abort;
end;
// Verifica se o Usuário Existe
if not DataMod.ADOTable_Usuarios.Locate(´USU_COD´, FUsuario.Text, []) then
begin
MessageBeep(64);
MessageDlg(´Erro: Usuário Inválido ou não está cadastrado!´,mtInformation,[mbOK],0);
FUsuario.SetFocus;
// Incrementa o número de tentativas
LimSenhas := LimSenhas + 1;
if LimSenhas > 3 then
begin
ShowMessage(´O limite de Tentativas de Acesso foi excedido!´);
Form_Controle_Acessos.Close;
end
else
if DataMod.ADOTable_UsuariosUSU_BLOQUEADO.AsBoolean Then
begin
ShowMessage(´Erro: Este Usuário está Bloqueado!´);
FUsuario.SetFocus;
end;
end;
if DataMod.ADOTable_UsuariosUSU_PASW.Text <> FSenha.Text then
begin
MessageBeep(64);
MessageDlg(´Erro: Senha Inválida!´,mtInformation,[mbOK],0);
FSenha.SetFocus;
LimSenhas := LimSenhas + 1;
if LimSenhas > 3 then
begin
ShowMessage(´O limite de Tentativas de Acesso foi excedido!´);
Form_Controle_Acessos.Close;
end;
end
else
Result := True;
end;
// Fecha a tabela de senhas do Usuário
DataMod.ADOTable_Usuarios.Close;
// Inicializa a Aplicação do Sistema
If Result = True Then
begin
Application.CreateForm(TForm_Menu_Principal, Form_Menu_Principal);
Form_Menu_Principal.ShowModal;
end;
end;


Alexsandro

Alexsandro

Responder

Posts

18/03/2005

Alexsandro

O Curioso é que basta comentar o pequeno trecho abaixo e a procedure deixa de dar erro. Mas simplesmente não consigo fechar o problema, mesmo sabendo onde está o erro, pois não consigo entender o que tá faltando: um End, um ;, ect, etc.

{ end
else
Result := True; } -> No Final da Rotina e tudo funciona OK ????!!!!!

Agradeço se alguéwm souber me explicar uma forma de ENETNDER PELO RESTO DE MINHA VIDA COMO os BEGIN END Funcionam...rs rs rs

:( !!!!


Responder

Gostei + 0

18/03/2005

Andremuller

Três coisas amigo:

1 - sempre que enviar código selecione o código e clique em ´Code´, assim podemos visualiza-lo itentado

2 - Para facilitar baixe o DelForExp http://www.dow.wau.nl/aew/DelForExp.html
que é um formatador de código free, você digita sem formatação nenhuma, clica ctrl + D e ele identa tudo, então você vai poder visualizar qual o código corresponde a um begin e end.

3 - Também tem o GeExperts (wwww.geexperts.org)
Ali dá pra configurar que ao selecionar um begin ele põe em highlight o end correspondente.

Isso?


Responder

Gostei + 0

18/03/2005

Weber

procedure TForm_Controle_Acessos.BtnOKClick(Sender: TObject); 
var
  Result: Boolean; 
begin 
  // Inicializa com a Validação Falsa 
  Result := False; 
  // Abrindo tabela de Usuários 
  DataMod.ADOTable_Usuarios.Open; 
  // Se o Nome do Usuário não foi informado o sistema avisa 
  If Form_Controle_Acessos.FUsuario.Text = ´´ then 
  begin 
    MessageBeep(64); 
    MessageDlg(´O Usuário não foi informado´,mtInformation,[mbOK],0); 
    Form_Controle_Acessos.FUsuario.SetFocus; 
    Abort; 
  end; 
  // Se a senha não foi informada o Sistema Avisa 
  If Form_Controle_Acessos.FSenha.Text = ´´ then 
  begin 
    MessageBeep(64); 
    MessageDlg(´A Senha não foi informada´,mtInformation,[mbOK],0); 
    Form_Controle_Acessos.FSenha.SetFocus; 
    Abort; 
  end; 
  // Verifica se o Usuário Existe 
  if not DataMod.ADOTable_Usuarios.Locate(´USU_COD´, FUsuario.Text, []) then 
  begin 
    MessageBeep(64); 
    MessageDlg(´Erro: Usuário Inválido ou não está cadastrado!´,mtInformation,[mbOK],0); 
    FUsuario.SetFocus; 
    // Incrementa o número de tentativas 
    LimSenhas := LimSenhas + 1; 
    if LimSenhas > 3 then 
    begin 
      ShowMessage(´O limite de Tentativas de Acesso foi excedido!´); 
      Form_Controle_Acessos.Close; 
    end 
    else if DataMod.ADOTable_UsuariosUSU_BLOQUEADO.AsBoolean Then 
    begin 
      ShowMessage(´Erro: Este Usuário está Bloqueado!´); 
      FUsuario.SetFocus; 
    end; 
  end; 
  if DataMod.ADOTable_UsuariosUSU_PASW.Text <> FSenha.Text then 
  begin 
    MessageBeep(64); 
    MessageDlg(´Erro: Senha Inválida!´,mtInformation,[mbOK],0); 
    FSenha.SetFocus; 
    LimSenhas := LimSenhas + 1; 
    if LimSenhas > 3 then 
    begin 
      ShowMessage(´O limite de Tentativas de Acesso foi excedido!´); 
      Form_Controle_Acessos.Close; 
    end; 
  end 
  else 
    Result := True; 


end; //OLHA O ERRO AQUI, ESSE END NÃO PODE EXISTIR


  // Fecha a tabela de senhas do Usuário 
  DataMod.ADOTable_Usuarios.Close; 
  // Inicializa a Aplicação do Sistema 
  If Result = True Then 
  begin 
    Application.CreateForm(TForm_Menu_Principal, Form_Menu_Principal); 
    Form_Menu_Principal.ShowModal; 
  end; 
end;



Responder

Gostei + 0

18/03/2005

Alexsandro

Pessoal,

Valeus pelas dicas e pela rapidez.

OI Weber,

Mas preciso encerrar o IF que verifica a senha neste ponto. Como é que eu faço?

if DataMod.ADOTable_UsuariosUSU_PASW.Text <> FSenha.Text then
begin
MessageBeep(64);
MessageDlg(´Erro: Senha Inválida!´,mtInformation,[mbOK],0);
FSenha.SetFocus;
LimSenhas := LimSenhas + 1;
if LimSenhas > 3 then
begin
ShowMessage(´O limite de Tentativas de Acesso foi excedido!´);
Form_Controle_Acessos.Close;
end;
end
else
Result := True;
end;

A lógica depois disso deve ser feita sempre pois vou verificar se a variavel Result está OK o que significa que tanto a senha e o usuário estão OK. Daí eu ABro o Menu Principal da aplicação:

// Fecha a tabela de senhas do Usuário
DataMod.ADOTable_Usuarios.Close;
// Inicializa a Aplicação do Sistema
If Result = True Then
begin
Application.CreateForm(TForm_Menu_Principal, Form_Menu_Principal);
Form_Menu_Principal.ShowModal;
end;

Assim, se eu eliminar o END que você apontou a logica ACIMA só vai ser executada se eu chegar até a senha e usuarios OK...Dessa forma não vu nem precisar da RESULT, mas o problema é que ainda vou acrescentar mais coisas e preciso que a verificação do RESULT fique de fora...

Alex


Responder

Gostei + 0

19/03/2005

Weber

if DataMod.ADOTable_UsuariosUSU_PASW.Text <> FSenha.Text then //VAMOS CHAMAR DE IF-UM
begin //ABRE IF-UM
  MessageBeep(64); 
  MessageDlg(´Erro: Senha Inválida!´,mtInformation,[mbOK],0); 
  FSenha.SetFocus; 
  LimSenhas := LimSenhas + 1; 
  if LimSenhas > 3 then //VAMOS CHAMAR DE IF-DOIS
  begin //ABRE IF-DOIS
    ShowMessage(´O limite de Tentativas de Acesso foi excedido!´); 
    Form_Controle_Acessos.Close; 
  end; //FECHA IF-DOIS
end //FECHA IF-UM
else //NÃO TEM BEGIN, PORTANDO TAMBÉM NÃO TEM END
  Result := True;



Responder

Gostei + 0

19/03/2005

Alexsandro

Obrigado Weber e a todos,

Agora acho que entendi melhor o conceiro do END.

:) !!!! -> BURRO


Responder

Gostei + 0

19/03/2005

Kapak

Olá Alexsandro, eu utilizo um método muito simples p/ não ter essas confusões de que está faltando um [b:f58d60ebe2]end[/b:f58d60ebe2] ou tem um [b:f58d60ebe2]end[/b:f58d60ebe2] a mais. Sempre que coloco um [b:f58d60ebe2]begin[/b:f58d60ebe2], coloco um [b:f58d60ebe2]end[/b:f58d60ebe2] na linha abaixo e escrevo dentro desse bloco. Com isto, cada begin sempre terá seu end correspondente.


Responder

Gostei + 0

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

Aceitar