Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Otro de Login y Pass (https://www.clubdelphi.com/foros/showthread.php?t=34963)

FGarcia 26-08-2006 23:21:09

Otro de Login y Pass
 
Saludos !

Usando el truco 359 de David Pan he creado mi formulario de Login sin embargo tengo un problema (clasico) le resulta indiferente a la aplicacion que exista o no el usuario y/o su password de cualquier manera arranca la aplicacion. Anexo mi codigo de validacion que esta dentro del formulario de login. Cuando ingreso los datos de usuario y su password hago click en el boton "bbOKClick" el cual llama a la funcion ObtenerAcceso, si los datos son validos se cierra esta ventana y se inicia el formulario principal; hasta ahi todo bien. Si ingreso datos erroneos me da el mensaje de aviso y al dar click quiero regresar a la ventana de login si en tres ocasiones no es valido el mensaje se cierra y termina la aplicacion, el problema es que de cualquier modo accede al formulario principal desde el primer intento.

Código Delphi [-]
function TfrmLogin.ObtenerAcceso(Usuario, Pass: String) : Boolean;
begin
  with dmDatos.adoQypass  do
    begin
      Close ;
      SQL.Clear ;
      SQL.Add('SELECT Nombre, Paterno, Materno, Privilegios FROM Users' +
              ' WHERE (Login = :Usuario)  AND (Password = :Pass)');
      Parameters.ParamByName('Usuario').Value := edUser.Text;
      Parameters.ParamByName('Pass').Value := edPass.Text;
      Open ;
      if (IsEmpty) then    //El dataset no contiene registros
        Result := False
      else                 //El dataset contiene registros
        Result := True;
    end;
end;
 
procedure TfrmLogin.FormCreate(Sender: TObject);
begin
  nIntentos := 0;
  lblIntentos.Visible := False;
end;
 
procedure TfrmLogin.bbOKClick(Sender: TObject);
begin
  If ObtenerAcceso(edUser.Text, edPass.Text) then
    frmLogin.ModalResult := mrOK
  else
    begin
      nIntentos := nIntentos + 1;
      lblIntentos.Visible := true;
      lblIntentos.Caption := 'Intentos: ' + inttostr(nIntentos);
      if (nIntentos < 3) then
        begin
          //MessageBox(handle, 'Acceso negado!', 'Aviso',
          //                                    MB_ICONWARNING or MB_OK);
        
          edPass.Text := '';
          edUser.Text := '';
          edUser.SetFocus ;
        end;
      {else
        frmLogin.ModalResult := mrCancel;}
    end;
end;

procedure TfrmLogin.bbCancelClick(Sender: TObject);
begin
  If ModalResult <> mrOk Then
    close;
end;
end.

el codigo de el source:

Código Delphi [-]
program Camion;
uses
  Forms,
  Controls,
  Principal in 'Principal.pas' {frmPrincipal},
  contrasena in 'contrasena.pas' {frmLogin},
  datmod in 'datmod.pas' {dmDatos: TDataModule},
  cfgTicket in 'cfgTicket.pas' {frmTickets},
  Terminal in 'Terminal.pas' {frmTerminal};
{$R *.res}
var
  Respuesta : integer;
begin
  Application.Initialize;
  Application.CreateForm(TdmDatos, dmDatos);
  frmLogin := TfrmLogin.Create(Application);
  try
    Respuesta := frmLogin.ShowModal;
      if Respuesta = mrOK then
        begin
          Application.CreateForm(TfrmPrincipal, frmPrincipal);
          Application.Run;
        end;
  finally
    frmLogin.Free;
  end;
end.

Se agradece la ayuda.

Editado: en el codigo esta como comentario el mensaje y al final una asignacion de ModalResult tambien como comentario. Esto aun cuando forme parte de codigo se comporta igual el programa arranca con datos erroneos.

dec 27-08-2006 00:03:05

Hola,

Bueno. A bote pronto se me hace raro el siguiente código fuente:

Código Delphi [-]
procedure TfrmLogin.bbCancelClick(Sender: TObject);
begin
  If ModalResult <> mrOk Then
    close;
end;

El botón cancelar creo yo ni siquiera debería "hacer nada". Bastaría que su propiedad "ModalResult" valiera "mrCancel" para que cuando ese botón fuera pulsado la propiedad "ModalResult" del formulario que lo contiene pasara a valer "mrCancel", cerrando de paso el formulario.

Además la propia condición se me hace extraña: "Si ModalResult es distinto de mrOk, cierra el formulario"... no sé ahora mismo decir porqué, pero, ha llamado mi atención esa condición... En todo caso ya digo que el evento "OnClick" de ese botón puede omitirse.

Otra condición que llama mi atención es:

Código Delphi [-]
if (nIntentos < 3) then
 {...}

¿No debería ser al revés? Es decir, si se llevan más de 3 intentos... pero, no menos, ¿no? Bueno. A primera vista esto es lo que noto en el código fuente. Ya comentarás tú o alguien más lo que queráis. ;)

FGarcia 27-08-2006 03:22:17

:D :D :D :D

Dec tu comentario del bbCancel me resolvio el problema! En el boton bbOk que es del tipo bitbutton la propiedad ModalResult la tenia en mrOK, la puse en mrNone y todo ok. En cuanto a lo del nIntentos < 3 mmmm.... de cualquier modo funciona, solo que aqui hago que al tercer intento la aplicacion se cierre, si lo hago nIntentos > 3 la aplicacion se cierra al cuarto intento, lo otro seria nIntentos > 2.

Se aceptan comentarios de todos modos:o


La franja horaria es GMT +2. Ahora son las 11:41:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi