Ver Mensaje Individual
  #1  
Antiguo 26-08-2006
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Reputación: 20
FGarcia Va por buen camino
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.

Última edición por FGarcia fecha: 26-08-2006 a las 23:24:01.
Responder Con Cita