Fórum Porque é tão complicado esse BEGIN...END (com ou sem ;) #273159
18/03/2005
0
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
Curtir tópico
+ 0Posts
18/03/2005
Alexsandro
{ 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
:( !!!!
Gostei + 0
18/03/2005
Andremuller
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?
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;
Gostei + 0
18/03/2005
Alexsandro
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
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;
Gostei + 0
19/03/2005
Alexsandro
Agora acho que entendi melhor o conceiro do END.
:) !!!! -> BURRO
Gostei + 0
19/03/2005
Kapak
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)