PDA

Ver la Versión Completa : Diferencía entre mayúsculas y minúsculas


abelantonio
15-06-2016, 17:26:10
Buen dia Colegas!!

Solicitando de su ayuda....soy nuevo en el foro y estoy iniciando a programar en delphi...soy novato.

Les cuento tengo un programa al cual se accede al sistema por medio de un login, ya lo tengo funcionando, el problema que tengo es que no diferencía entre mayúsculas y minúsculas (es decir uso un password almacenado como "Hola", pero si escribo todo con mayúscula o minúscula aún me permite acceso, quisiera saber como puedo hacer para que el password lo escriba exactamente como se almaceno), uso una BD MySQL ¿Alguna sugerencia? De ante mano agradezco su ayuda.


Este es el codigo de mi login:
procedure TFormLogin.txtPassKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
FMCorp.qry_login.Close;
FMCorp.qry_login.SQL.Clear;
FMCorp.qry_login.SQL.Add('Select usuario, contrasenia, NombreUsuario, NivelUsuario from login where usuario='+QuotedStr(txtUsuario.Text)+ 'and Contrasenia= '+QuotedStr(txtPass.Text));
FMCorp.qry_login.Open;

Nivel := FMCorp.qry_login.FieldByName('Nivel').AsString;
showmessage('El nivel del usuario es '+inttostr(Nivel));

if (txtUsuario.Text = '') and (txtPass.Text = '') then
begin
ShowMessage ( 'Campos Vacios' );
end
else

if (FMCorp.qry_login.Eof) then
begin
MessageBox(Handle, 'Usuario y Contraseña Invalido!', 'LoyalCorp', MB_ICONINFORMATION+MB_OK);
txtUsuario.Clear;
txtPass.Clear;
txtUsuario.SetFocus;
Exit;
end
else
begin
FormLogin.Enabled := false;

Case Nivel of

0:
begin
MenuCorp.FMCorp.imgCompra.enabled := false;
MenuCorp.FMCorp.imgEmpresa.enabled := true;
MenuCorp.FMCorp.imgRecursos.enabled:= true;
end;
1:
begin
MenuCorp.FMCorp.imgCompra.enabled :=true;
MenuCorp.FMCorp.imgEmpresa.enabled := true;
MenuCorp.FMCorp.imgRecursos.enabled := true;
end;
2:
begin
MenuCorp.FMCorp.imgCompra.enabled :=true;
MenuCorp.FMCorp.imgEmpresa.enabled := true;
MenuCorp.FMCorp.imgRecursos.enabled := false;
end;
3:
begin
MenuCorp.FMCorp.imgCompra.enabled :=true;
MenuCorp.FMCorp.imgEmpresa.enabled := true;
MenuCorp.FMCorp.imgRecursos.enabled := true;
end;
else
ShowMessage ( 'no tiene privilegios' );
end;

FMCorp.Visible := true;
end;
end;

AgustinOrtu
15-06-2016, 17:50:08
Los query no suelen ser case-sensitive por defecto y MySQL no es la excepción. Debes convertir los string usando collates.

Fuente (http://stackoverflow.com/questions/7857669/mysql-case-sensitive-query)

Casimiro Notevi
15-06-2016, 18:34:10
Buen dia Colegas!!

Bienvenido a clubdelphi, como siempre aconsejamos a los nuevos, no olvides leer nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php), gracias por tu colaboración :)

Y recuerda poner los tags al código fuente, ejemplo:

http://www.clubdelphi.com/images/UtilizarTAGs.png

Gracias :)

abelantonio
15-06-2016, 18:47:25
como convertiria los strings a collates? la verdad aun no domino delphi estoy iniciando...les agradeceria su ayuda :)

roman
15-06-2016, 18:48:28
Aunque la búsqueda puede ser insensible a mayúsculas y minúsculas, dependiendo del collate usado, los valores almacenados en la base se regresan tal como fueron capturados. Entonces, en lugar de buscar un usuario con nombre de usuario y contraseña determinada, puedes simplemente buscarlo por nombre de usuario y comparar las contraseñas en tu código delphi. Algo así:


FMCorp.qry_login.SQL.Add('Select usuario, contrasenia, NombreUsuario, NivelUsuario from login where usuario=' + QuotedStr(txtUsuario.Text));
FMCorp.qry_login.Open;

if FMCorp.qry_login.FieldByName('contrasenia').AsString = txtPass.Text then
begin
// La contraseña es correcta
end;


LineComment Saludos

bitbow
15-06-2016, 19:08:58
What, en que momento sucedio esto? Ok, basicamente esto es configuración de tu base de datos o tabla, esto no deberia de ser necesario ya que por logica "ABC" no es igual "abc", sunpogo que en algún punto los estandares SQL se orientaron menos a la logica y mas a las necesidades comunes tratando de facilitar las consultas "upper(campo) no veo mayor problema pero bueno".

El tema en distintas bases de datos es la definición de la base o las tablas definiendo el "COLLATE", puede variar dependiendo de la base de datos y ya en las cosultas se puede aplicar la sentencia si queremos o no distinguir mayusculas y minusculas.

Tomado de desarrollo web.

-- distinguir mayusculas, minusculas y acentos mysql
-- MySQL >>
select * from tabla WHERE campo COLLATE utf8_bin ='UnTexto'


Saludos.

abelantonio
15-06-2016, 19:26:31
si me funciono tu ayuda #roman para acceder....pero el detalle es que no es sensible a mayusculas y minusculas y eso es lo que quiero realizar...alguna idea? ando un poco deshubicado con esto de la sensibilidad de mayusculas y minusculas. se los agradeceria mucho en verdad :)

AgustinOrtu
15-06-2016, 19:45:13
Podes comparar los string usando la funcion AnsiCompareStr (http://www.delphibasics.co.uk/RTL.asp?Name=AnsiCompareStr)

abelantonio
15-06-2016, 20:31:44
Comienzan
// comparar dos cadenas obviamente diferentes
CompareStrings ( "Hola", "mundo"); // comparar cadenas idénticas CompareStrings ( 'Hola 2 tú "," Hola 2 le'); // Las letras mayúsculas siguen minúsculas en Delphi CompareStrings ( 'ABC', 'abc'); // Todas las cartas siguen los números en Delphi CompareStrings ( 'abc', '123'); fin; // Compara dos cadenas, y mostrar que es más grande que los otros TForm1.CompareStrings procedimiento ( cadena1 const, string2: string); var resultado: Integer; comience // Compara algunas cadenas resultado: = AnsiCompareStr (cadena1, cadena2); si el resultado <0 entonces ShowMessage (cadena1 + '<' + cadena2); si el resultado = 0 entonces ShowMessage (cadena1 + '=' + cadena2); si el resultado> 0 entonces ShowMessage (cadena1 + '>' + cadena2); fin;


No entendi como aplicarlo al codigo del login y que sea sensible a las mayusculas y minusculas...no hubico como compararlos...alguien podria ayudarme.

if FMCorp.qry_login.FieldByName('contrasenia').AsString = txtPass.Text then
begin
MessageBox(Handle, 'La contraseña es correcta!', 'LoyalCorp', MB_ICONINFORMATION+MB_OK);

este codigo no funciona para la sensibilidad de mayusculas y minusculas.

bitbow
15-06-2016, 20:36:49
Te puse un ejemplo de cómo hacerlo en el query, si el query no te devuelve registros es que no coincide la contraseña.

Saludos.

ecfisa
15-06-2016, 20:37:10
Hola abelantonio.

Revisa esta sugerencia (http://www.clubdelphi.com/foros/showpost.php?p=506202&postcount=3)

Saludos y gracias por tu colaboración :)