PDA

Ver la Versión Completa : Login Form


lbidi
30-07-2010, 16:45:52
Estimados foristas.

Tengo el siguiente codigo para validar la entrada al sistema.
No encuentro como hacer para que me pida la password 3 veces ( x ej ) , y luego si aborte.


procedure TLoginForm.LogInButtonClick(Sender: TObject);

begin
If edUsuario.Text = '' then
begin
edUsuario.SetFocus;
Exit;
end;

repeat
Qry_Usuarios.Sql.Clear;
Qry_Usuarios.SQL.Add('Select * from Usuarios Where Nombre = ' + QuotedStr( edUsuario.Text ) ) ;
Qry_Usuarios.Open;
if not Qry_Usuarios.Eof then
begin
if Trim(Qry_Usuarios['CLAVE']) = Trim(passwordEdit.Text) then
begin
cUsuario := edUsuario.Text;
mNivel := Qry_Usuarios['NIVEL'];
modalresult := mrOK;
Exit;
end
else
begin
MessageDlg('Contraseña inválida', mtWarning, [mbOk], 0);
Inc( nCantidad );
passWordEdit.SetFocus;
modalresult := mrRetry;
Exit;
end;
end
else
begin
Application.MessageBox('Usted no está autorizado a utilizar este sistema.', 'Sistema Protegido.');
ModalResult := mrAbort;
Exit;
end;

until nCantidad > 3;
DM.Conn_Usuarios.IsConnected := False;
end;



donde me estoy equivocando??


pd : no entiendo porque no queda bien formateado. :(

delphi.com.ar
30-07-2010, 20:08:34
A mi parecer, el ciclo repeat...until esta de mas. Tienes que tener en cuenta que este código se esta ejecutando todo dentro del evento OnClick del botón, y tu lo que necesitas es que el usuario escriba sus credenciales hasta tres veces, no que se valide tres veces la misma entrada.
Por otro lado, no estoy muy de acuerdo con poner las contraseñas en tablas de la base de datos, no es menor utilizar la propia seguridad de la base de datos para acreditarnos?

Saludos!

Caral
30-07-2010, 21:13:51
Hola

procedure TLoginForm.LogInButtonClick(Sender: TObject);
var cuenta: Integer;
begin

Qry_Usuarios.Sql.Clear;
Qry_Usuarios.SQL.Text:= 'Select Nombre, Clave from Usuarios Where Nombre = :Cod';
Qry_Usuarios.Params[0].Value:= edUsuario.Text;
Qry_Usuarios.Active:= True;

If Qry_Usuarios.RecordCount < 1 then
Begin
Cuenta := Cuenta + 1;
MessageDlg('Usuario no encontrado',mtError, [mbOK], 0);
Edit1.Text := '';
Edit2.Text := '';
Qry_Usuarios.Active := False;
If Cuenta = 3 then Close;
end
else
If Qry_UsuariosClave.AsString = edClave.Text then
Begin
LoginOk := True;
Clave := Qry_UsuariosClave.AsString;
Nombre := Qry_Usuarios1Nombre.AsString;
Qry_Usuarios.Active := False;
Close;
Cerrar := True;
end
else
Begin
Cuenta := Cuenta + 1;
MessageDlg('Clave Inválida',mtError, [mbOK], 0);
edUsuario.Text := '';
Qry_Usuarios.Active := False;
If Cuenta = 3 then Close;
end;
Saludos

lbidi
09-08-2010, 22:32:54
Gracias.. probare.. y perdon por la demorada respuesta.

Saludos.