Ver Mensaje Individual
  #18  
Antiguo 14-08-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Es que no termino de entender la lógica de tu código, pensé que ingresabas usuario y contraseña mediante los DBEdit, pero aparentemente seleccionas el usuario desde el DBLookupComboBox...

Estoy suponiendo que la función LoginAccepted altera la cadena SQL original del IBQuery que alimenta el DBLookupComboBox (si no estoy apreciando equívocamente como funciona).

Para evitar esa situación cambia la función anterior por esta que crea una consulta temporal para verificar la contraseña:
Código Delphi [-]
function TDataModule1.LoginAccepted(const nam, pwd: string): Boolean;
var
  qy: TIBQuery;
begin
  qy := TIBQuery.Create(nil);
  try
    qy.Database := IBDataBase1;
    qy.Transaction := IBTransaction1;
    qy.Close;
    qy.SQL.Clear;
    qy.SQL.Add('SELECT * FROM USUARIO');
    qy.SQL.Add('WHERE NOMBRE = :NOMBRE');
    qy.ParamByName('NOMBRE').AsString := nam;
    qy.Open;
    Result := not qy.IsEmpty and (qy.FieldByName('CLAVE').AsString = pwd);
    qy.Close;
  finally
    qy.Free;
  end;
end;

Y también tendrás que cambiar los argumentos al llamar al método LoginAccepted,
Código Delphi [-]
procedure TLogin.btnAceptarClick(Sender: TObject);
begin
  if not DataModule1.LoginAccepted(DBLookupComboBox1.Text, EditPassword.Text) then
    raise Exception.Create('El usuario o la contraseña son inválidos.');
end;
ya que ahora el nombre de usuario se toma desde el DBLookupComboBox.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 14-08-2017 a las 19:04:23.
Responder Con Cita