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)
-   -   Usuario Y Password Para Acceder A Una Aplicacion (https://www.clubdelphi.com/foros/showthread.php?t=74364)

Casimiro Noteví 21-06-2011 10:09:07

Cita:

Empezado por Neftali (Mensaje 404328)

Y no repitas hilos, los he unido los dos.

Y recuerda leer nuestras normas, gracias.

rrosariom 22-06-2011 04:13:33

Hola
 
Disculpa es que no tengo experiencia en el foro.

Ejecute el codigo linea por linea, y cuando llega al if, salta al showmessage, por lo que cambie el codigo y puse que si adoquery1.recordcount=0 que cargue el form2.

Aparentemente, no esta guardando en memoria la consulta. o algo esta pasando que lo esta limpiando.

que sera?

Caral 22-06-2011 04:58:14

Hola
Es una simple validacion, el problema es que el parametro que coincide.
Saludos

rrosariom 22-06-2011 16:55:38

Hola
 
No entendi el comentario "Es una simple validacion, el problema es que el parametro que coincide"

Bye,
Rolando.

leofuentes21 22-06-2011 17:04:27

Pon el codigo que tienes ahorita y donde te da el error..

roman 22-06-2011 17:13:02

No trates de abarcar muchas cosas hasta no entender una plenamente. Me refiero a que antes de ponerte a manejar número de intentos inválidos y demás yerbas, primero te asegures que la consulta que quieres está funcionando.

Fíjate que en tu menaje original tienes esta consulta:

Código SQL [-]
select username,password FROM DBA_USERS
where username = ...
or password =

De entrada, esto es incorrecto, pues en lugar de or debería ser and, aunque en realidad, lo más adecuado sería simplemente:

Código SQL [-]
select username,password FROM DBA_USERS
where username = ...

es decir, sin la condición del password. Si encuentras una coincidencia, entonces sí, compara el password de la base con el que te dan.

Otra cosa: realmente no es lo más adecuado usar RecordCount para determinar si se encontraron registros coincidentes. Lo más recomendable es usar el método IsEmpty.

// Saludos

ecfisa 22-06-2011 17:28:37

Cita:

Empezado por roman (Mensaje 404498)
No trates de abarcar muchas cosas hasta no entender una plenamente.

Totalmente de acuerdo. ;)

Otra cosa que no entiendo rrosariom, es que has que cambiado por completo el código inicial (sobre el que respondí en el mensaje #18) .
En ese mismo post, coincidiendo con los acertados consejos de roman, se usa and e IsEmpty en las comparaciónes. ¿ Probaste ese código ?

Saludos.

roman 22-06-2011 18:38:51

No me había fijado que ya defcon1_es había, desde un principio, hecho notar lo de RecordCount. Aunque no estoy de acuerdo con la solución propuesta de utilizar Last puesto que ello implica traerse todos los registros al cliente.

Pero otra cosa que recién noto, y que me parece que ahí puede estar el porque no encuentra coincidencias, es que la consulta (al menos la original) compara directamente la contraseña almacenada en la tabla con la que escribe el usuario. Pero eso no puede ser, porque la contraseña en la base está encriptada, tal como se lee aquí:

Código:

PASSWORD        VARCHAR2(30)                  Encrypted password
Luego entonces, habria primero que encriptar lo que escribe el usuario (desde luego, con la misma encriptación que la que se use en DBA_USERS) y compararla.

Por otra parte, no se entiende en realidad cómo se están capturando los datos de usuario y contraseña; pues es bastante extraño usar DBEdits para ello.

// Saludos

rrosariom 25-06-2011 15:46:27

Hola a todos
 
Buenos Días,

primeramente, disculpen a todos por la tardanza en responderle, lo que pasa es que tengo una inmensa cantidad de trabajo.

estoy utilizando or y no and porque hice una prueba directamente haciendo la consulta a la base de datos y con and no me devuelve el registro y con or si lo hace.

Segundo, pensé lo de la encriptación, e hice una prueba creando una tabla con usuario y clave e intente hacer la consulta y aun así me sigue pasando lo mismo

Tercero, lo ye probado con el empty y también me pasa lo mismo.

de todas formas haré una prueba otra vez y, usando una tabla y no la vista dba_users, porque no se mucho sobre el tema de encriptar y desencriptar password; o si ustedes tienen alguna experiencia al respecto y me ayudan como siempre se lo agradeceré

Bye,
Rolando.

roman 27-06-2011 17:52:16

Cita:

Empezado por rrosariom (Mensaje 404810)
estoy utilizando or y no and porque hice una prueba directamente haciendo la consulta a la base de datos y con and no me devuelve el registro y con or si lo hace.

Bueno, pero es que no es al gusto. Debe usarse AND sí o sí. Si con and no te resulta quiere decir entonces que o no coincide el usuario o no coincide la contraseña. Y claro, al hacer or "funciona" porque coincide el usuario pero en ese caso la contraseña puede ser lo que sea que la condición siempre se va a cumplir. Entonces estarías dejando entrar a cualquiera.

Y seguramente la consulta directa con and no funcionaba por lo mismo de la encripatción.

// Saludos


La franja horaria es GMT +2. Ahora son las 14:05:20.

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