Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Login en delphi (https://www.clubdelphi.com/foros/showthread.php?t=78274)

camiz 04-04-2012 06:07:11

Login en delphi
 
Hola amigos nuevamente por aqui, buscando ayuda nesecito hacer un Login para el ingreso a una aplicacion con base de datos firebird he probado varios metodos y no funciona, la base de datos es firebird y consta asi.


Código SQL [-]
CREATE TABLE USUARIO
(
  CODUSUARIO Integer NOT NULL,
  NOMBRE Char(50),
  DIRECCION Char(70),
  USUARIO Char(20) NOT NULL,
  CLAVE Char(20) NOT NULL,
  PRIMARY KEY (CODUSUARIO)
);





lo que quiero es validar el Usuario y clave para luego ingresar al sistema he estado probando este codigo con la ayuda de unos Tutoriales
pero no funciona.
la consulta del IBQuery es esta

Código SQL [-]
select CODUSUARIO, USUARIO, CLAVE from USUARIO WHERE CODUSUARIO=:USER

Código Delphi [-]
begin
frmConeccion.Login.Params.ParamByName('USER').Value:= txt_usuario.Text;
frmConeccion.Login.Active:= True;
If frmConeccion.Login.RecordCount < 1 then
begin
  Cuenta := Cuenta + 1;
  Application.MessageBox('Usuario no encontrado', 'Atención', MB_ICONINFORMATION or MB_OK);
  txt_usuario.Text := '';
  txt_clave.Text := '';
  frmConeccion.Login.Active := False;
  If Cuenta = 3 then Close;
end
 else
 If txt_clave.Text = frmConeccion.LoginCLAVE.AsString then
 Begin
   frmPrincipal.Show;
   frmConeccion.Login.Active := False;
   frmLogin.Visible:= False;
   end
   else
   begin
   Cuenta := Cuenta + 1;
   Application.MessageBox('Clave incorrecta, intente de nuevo', 'Atención', MB_ICONERROR or MB_OK);
   txt_clave.Text := '';
   frmConeccion.Login.Active := False;
   If Cuenta = 3 then Close;
   end;



a ver si me dan una manito se lo agradecere.

ElDioni 04-04-2012 11:19:41

Hola,

¿pero donde falla?, ¿cual es el error que te lanza?, haz una ejecución paso a paso y ve comprobando el valor de los objetos para saber si están rellenos adecuadamente o si rescatan bien la información de la tabla.

Saludos.

duilioisola 04-04-2012 13:02:34

Primero, como dijo el compañero:
  • ¿Cuál es el error que te da?
  • ¿En qué línea?
Solo un detalle:
Estos campos creo que deberían ser de tipo VARCHAR.
  • USUARIO VARCHAR(20) NOT NULL,
  • CLAVE VARCHAR(20) NOT NULL,
De lo contrario se rellenaran con espacios hasta llegar a 20 caracteres y la comparación podría fallar.
'ADMIN____________________' <> 'ADMIN'

camiz 04-04-2012 18:55:12

tenias razon duilioisola
 
el error era que la clave era incorrecta,

pero gracias a tu observacion he cambiado "CHAR" por "VARCHAR" y funciona muy bien

Gracias mi estimado duilioisola por tu aporte, el problema està resuelto.

mamcx 04-04-2012 19:06:22

Ese metodo de login es inseguro. Se presta para una inyección de sql:

http://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL



Ademas, es mejor guardar las claves como un hash, e implementar el login con un procedimiento almacenado, o en su defecto, usar sustitución de parámetros:

http://mc-computing.com/databases/De...tml#parameters

Cita:

SELECT * FROM MATABLE
WHERE MT_ID IN (:MYPARAM)

Al menos hasta aqui es un buen primer intento para una app local, monousuario. Si es una app web o la BD se expone en una red amplia es mejor implementar un esquema mas seguro...


La franja horaria es GMT +2. Ahora son las 18:19:48.

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