Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-08-2006
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 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
  #2  
Antiguo 27-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 27-08-2006
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino


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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Extraer datos DNI/PASS jdiazan Varios 3 30-08-2006 11:57:38
Ayuda para crear un formulario de login y pass Striker Varios 8 02-08-2006 18:12:35
Ayuda En Login Y Pass Para Ingresar En un programa creado en Delphi Solojuegospc.tk Conexión con bases de datos 8 07-07-2005 03:18:28
login y pass en base de datos Gorehide Conexión con bases de datos 5 09-07-2004 12:41:06
MYNAME---pass????? kwan Conexión con bases de datos 2 20-10-2003 00:23:36


La franja horaria es GMT +2. Ahora son las 05:06:32.


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
Copyright 1996-2007 Club Delphi