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)
-   -   Ayuda autentificacion BD (https://www.clubdelphi.com/foros/showthread.php?t=29088)

gallirto 12-01-2006 03:17:12

Ayuda autentificacion BD
 
Hola...tengo una aplicacion en delphi 7, la cual maneja una base de datos mysql por medio de un odbc...la aplicacion va a correr en un servidor en donde los usuarios puedan correrla desde su pc...en mysql se crearon los usuarios y se les asignaron sus permisos...
Todo hasta ahi esta bien...la aplicacion corre perfectamente
Mi pregunta es....
Cuando corren la aplicacion, les aparece la ventana para autentificarse, les pide login y password...pero esta ventanita es la que saca delphi, es decir, la que nos pide login y usuario cuando ponemos activa una base de datos...
Lo que quiero es poder preguntar el login y el password desde una forma inicial...como podria hacerle para poder validar el usuario que ellos estan metiendo con los usuarios registrados en la base de datos??

Ojala y alguien pueda orientarme...Gracias!!!

jachguate 12-01-2006 03:31:35

Ya que no mencionas que componentes usas para conectarte, supongo que se trata del BDE, así que lo que toca hacer es poner la propiedad loginprompt del TDatabase en falso, y luego establecer por código los parámetros 'UserName' y 'password' (podrían llamarse diferentes, mirá cómo los nombra al usar los parámetros default del driver.

La propiedad Params es un TStrings, así que establecer el valor es tan sencillo como:

Código Delphi [-]
Database1.params.Values['UserName'] :=  'jose';

Hasta luego.

;)

gallirto 12-01-2006 06:14:45

Hola jachguate

Pero con esa instruccion estoy asignando los nombres??...
o verificando un nombre ya existente no?'
Pero si quiero que cheque si existe ese usuario...si esta, que se conecte a la BD y siga....y si no que mande mensaje de error diciendo que no es un usuario valido...ahi como le harias??

Gracias!!!

reina 12-01-2006 19:01:01

..a ver si te sirve
 
Deberias hacer la ventana de la autenticación de la bd.. tu mismo..en un form splash(este lo deberias poner que se abra en la unit principal) o algo asi antes que se cargue la aplicacion ..y preguntar ahi el nombre del usuario y la contraseña..luego tratar de asignarle a la bd..ese usuario y contraseña si no existe alli esta tirara un excepcion, por ejemplo:

DataBase.Connected:=false;
DataBase.Params.Clear;
DataBase.Params.Add('user_name=nombreusuario');
DataBase.Params.Add('password=pass');
DataBase.LoginPrompt:=false;
DataBase.Connected:=true;

Esto lo puedes poner dentro de un try....except de ahi la podrias levantar hacia donde llamaste al form splash con un mensaje como que el usuario no existe y no dejar que la aplicacion corra..bueno espero que hayas entendido o al menos te orientes en algo, saludos!

LA PATRIA SERA LIBRE!

jachguate 12-01-2006 20:07:39

Tomando la idea de reina:

Código Delphi [-]
  DataBase.Connected:=false;
  DataBase.Params.Clear;
  DataBase.Params.Add('user_name=nombreusuario');
  DataBase.Params.Add('password=pass');
  DataBase.LoginPrompt:=false;
  try
    DataBase.Connected:=true;
  except
    on EDatabaseError do
    begin
      ShowMessage('Error al autenticar usuario!');
      Application.Terminate;
    end;

Ahora, ya es cosa tuya si queres proveer un mecanismo para que el usuario reintente varias veces (o indefinidas veces).

Hasta luego.

;)

gallirto 13-01-2006 06:12:40

No quiere funcionar
 
Hola chicos...tomando las ideas que me aportaron, me di a la tarea de inmediatamente empezar a trabajar en eso...
Estuve tratando de varias maneras y al parecer hay algo que me esta fallando...
primero lo probe en el sistema que tengo ya hecho y no quiso...
entonces despues cree una nueva aplicacion para empezar de cero...
puse un componente de bd, un datasource y una tabla...las di de alta, porque ya tenia dado el odbc de mysql...y listo no hubo problema...
entonces de algo sencillito, quise hacer que funcionara la autenticacion, pero que creen...pos que sigue sin funcionar...me marca el siguiente error, espero que puedan ayudarme a resolverlo...

Project sistema.exe raised exception class EDBEngineError with message
'Key violation [TCX]ÑMyODBC] Access denied for 'root'@localhost (using password: NO)
Alias: sistema. Process stopped. Use step or run to continue

Trate de cambiar el EDatabaseError en la exepcion y ponerle EDBEngineError, pero pues tampoco...estuve buscando algun ejemoplo pero tampoco...asi que regreso con ustedes para ver si me pueden ayudar!!!...se los agradecere muchisisisisisimo!!
De antemano Gracias!!

roman 13-01-2006 08:00:22

El ejemplo de jachguate debe funcionar bien excepto que donde dice user_name debe decir user name, es decir, va un espacio en lugar del caracter de subrayado.

// Saludos

gallirto 14-01-2006 00:59:28

Holas...
Ya POR FIN quiso funcionar...YUPI!!!
ya autentifica los usuarios y sus contraseñas...
pero ahora el problema que tengo ahora, es que no entra a la exepcion...es decir...si ponen mal el nombre de usuario o la contraseña, no manda el mensaje de error...vuelve a salir el mensaje de:

Project sistema.exe raised exception class EDBEngineError with message
'Key violation [TCX]ÑMyODBC] Access denied for 'root'@localhost (using password: YES) Alias: sistema. Process stopped. Use step or run to continue

que creen que pueda ser???

el codigo que tengo es el siguiente:

DataBase1.Connected:=false;
DataBase1.Params.Clear;
DataBase1.Params.Add('user name='+edit1.text);
DataBase1.Params.Add('password='+edit2.text);
DataBase1.LoginPrompt:=false;
try
begin
dataBase1.Connected:=true;
label1.Caption:='SI ENTRO';
end;
except
on EDatabaseError do
begin
ShowMessage('Error al autenticar usuario!');
Application.Terminate;
end;
end;

De antemano...Gracias!!!

jachguate 14-01-2006 01:25:04

Cita:

Empezado por roman
El ejemplo de jachguate debe funcionar bien excepto que donde dice user_name debe decir user name, es decir, va un espacio en lugar del caracter de subrayado.

// Saludos

Por eso había dicho ya:
Cita:

Empezado por jachguate
(podrían llamarse diferentes, mirá cómo los nombra al usar los parámetros default del driver.


gallirto 16-01-2006 04:45:09

Sigue sin funcionar!!
 
Holas compañeros del foro...
Pues fijense que sigue sin funcionar...
Al momento de dar bien el login y el password si conecta a la base de datos y no marca errores en la aplicacion ni nada...pero si escribo mal el password, en vez de mandarme el mensaje de error de la exepcion, marca el siguiente error:

Project sistema.exe raised exception class EDBEngineError with message
'Key violation [TCX]ÑMyODBC] Access denied for 'root'@localhost (using password: YES)
Alias: sistema. Process stopped. Use step or run to continue

Alguna idea de como resolverlo??...

Mi codigo es:
Código Delphi [-]
DataBase1.Connected:=false;
DataBase1.Params.Clear;
DataBase1.Params.Add('user name='+edit1.text);
DataBase1.Params.Add('password='+edit2.text);
DataBase1.LoginPrompt:=false;
try
  begin
    dataBase1.Connected:=true;
    label1.Caption:='SI ENTRO';
  end;
except
  on EDatabaseError do
    begin
      ShowMessage('Error al autenticar usuario!');
      Application.Terminate;
   end;
end;

De antemano Gracias a todos!!

roman 16-01-2006 05:59:24

Quizá tu bloque except no capta el error porque nada más le indicas que intercepte EDatabaseError y el error que recibes es EDBEngineError.

// Saludos

gallirto 16-01-2006 15:59:14

Hola Roman...
Pues fijate que yo crei lo mismo, pero aunque ponga esa excepcion, no entra...funciona cuando si lo pones bien el password y el login, pero ni con esa ni con la otra excepcion funciona...por eso es que se me hace raro...
Si ves el codigo, lo trate de probar en una aplicacion sencilla para que funcionara, pero pues ni a si funciona...

Alguna otra idea??...Gracias!!!

reina 16-01-2006 21:04:39

El caso es que no puedes captar la excepcion porque no la estas manejando..deberias mirar la ayuda de delphi la parte de excepciones y de esa clase particularmente (EDBEngineError) para ver si te da alguna pista de como captarla. Tu codigo funciona si pones bien el el user y el pass..simplemente porque no se genera ninguna excepcion..espero que tomes mi recomendacion y leas el help! saludoss

LA PATRIA SERA LIBRE

gallirto 26-01-2006 18:18:00

Por Fin!!!!!
 
Hola chicos....POR FIN!!!!...
Por fin funciono todo!!!!.....yupi!!!

Gracias a todos por su valiosa cooperacion y consejos...
Como se resolvio??...pues despues de tanta lectura y preguntas...

mi codigo estaba bien...
Código Delphi [-]
DataBase1.Connected:=false;DataBase1.Params.Clear;DataBase1.Params.Add('user name='+edit1.text);DataBase1.Params.Add('password='+edit2.text);DataBase1.LoginPrompt:=false;try  begin    dataBase1.Connected:=true;    label1.Caption:='SI ENTRO';  end;except  on EDBEngineError do    begin      ShowMessage('Error al autenticar usuario!');      Application.Terminate;   end;end;

y me estaba mandando el siguiente error:

Project sistema.exe raised exception class EDBEngineError with message
'Key violation [TCX]ÑMyODBC] Access denied for 'root'@localhost (using password: YES) Alias: sistema. Process stopped. Use step or run to continue

Cuando se corria, trataba de conectarse a la BD y si no era usuario valido, mandaba automaticamente el error...
Entonces...investigando y preguntando, me di cuenta que habia que desactivar los mensajes de error del debuger...asi que fui a tool-debugger options-Language exceptions y ahi quitarle la opcion de "Stop on delphi exceptions".....

Y LISTO!!!....-FUNCIONO!!!!

Gracias!!...y espero que si alguien tiene este mismo problema pueda ver esta solucion


La franja horaria es GMT +2. Ahora son las 22:19:45.

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