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 Result := False
else 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
edPass.Text := '';
edUser.Text := '';
edUser.SetFocus ;
end;
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' ,
contrasena in 'contrasena.pas' ,
datmod in 'datmod.pas' ,
cfgTicket in 'cfgTicket.pas' ,
Terminal in 'Terminal.pas' ;
{$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.