Array
(
)

login (Validação de senha)

Mahdak
   - 14 mar 2006

Estou fazendo uma tela de login. a verificação é feita em uma tabela Firebird 1.5, onde o campos sao os seguintes:

USUARIO VARCHAR(50) CHARACTER SET WIN1252 NOT NULL COLLATE PXW_INTL850,
SENHA VARCHAR(10) NOT NULL,

bom, na verificação abaixo a checagem de usuário passa tranaquilo, mas na checagem da senha gera o seguinte erro quando a
senha digitada no edit_Senha confere com a senha armazenada no banco: ´trying to store a string of lenght 11 into a field that only contain 10´

Observações:
------------

Edit_Senha.passwordChar := *
Edit_Senha.MaxLenght := 10

Todos os Forms sao MDI, menos o de Login, assim como descrito por massuda no tópico: http://forum.devmedia.com.br/viewtopic.php?t=62225&highlight=splash&sid=776f69e8e9c9603666788d7499c14eee


quem puder me ajudar, por favor, postem aqui.


#Código


procedure TLogin.Button1Click(Sender: TObject);
begin
// Checagem
Tbl_Login.Close;
Tbl_Login.SelectSQL.Clear;
Tbl_Login.SelectSQL.add(´SELECT * FROM Login WHERE USUARIO Like:Consulta ´ );
Tbl_Login.Params[0].AsString;
Tbl_Login.ParamByName(´Consulta´).AsString:=´´+´¬´+Edit_Usuario.Text+´¬´;
Tbl_Login.open;

If Tbl_LoginUSUARIO.AsString <> Edit_Usuario.Text then
begin
ShowMessage(´Usuário ´+Edit_Usuario.Text+´ não cadastrado !´);
Edit_Usuario.SetFocus;
end
else
begin
// Checagem
Tbl_Login.Close;
Tbl_Login.SelectSQL.Clear;
Tbl_Login.SelectSQL.add(´SELECT * FROM Login WHERE SENHA Like:Consulta ´ );
Tbl_Login.Params[0].AsString;
Tbl_Login.ParamByName(´Consulta´).AsString:=´´+´¬´+Edit_Senha.Text+´¬´;
Tbl_Login.open;

If Tbl_LoginSENHA.AsString <> Edit_Senha.Text then
begin
ShowMessage(´Senha inválida. Tente novamente.´);
Edit_Senha.SetFocus;
end
else
begin
Close;
end;
end;

end;



Paullsoftware
   - 14 mar 2006

Existe uma falha na sua consulta, pelomenos ao meu ver...
quando você faz:
#Código

Tbl_Login.SelectSQL.add(´SELECT * FROM Login WHERE USUARIO Like:Consulta ´ );

e essa outra aqui:
#Código
Tbl_Login.ParamByName(´Consulta´).AsString:=´´+´¬´+Edit_Usuario.Text+´¬´;


se Existir um usuário chamado Flavia e Outro Chamado Flaviana toda vez que digitar Flavia vai retornar dois registros...
mesmo se alguém digitar o nome do usuario errado ele vai trazer a senha mais próxima devido a consulta com like no caso de campos que devem ser exatamente iguais. Tanto na Entrada quando na Resposta é correto que vc use assim:
#Código

with Tbl_Login do
begin
Close;
SelectSQL.Clear;
SelectSQL.add(´SELECT * FROM Login WHERE USUARIO =:User and Senha =:Pass ´ );
ParamByName(´User´).AsString:=Edit_Usuario.Text;
ParamByName(´Pass´).AsString:=Edit_Senha.Text;
open;
if IsEmpy then
begin
MessageDlg(´Usuário ou Senha Inválidos´,MtError,[MbOk],0);
Edit
Edit_Usuario.Clear;
Edit_Senha.Clear;
Edit_Usuario.Setfocus;
Exit;
end
else
begin
//Comandos a serem executados no caso dos dados serem corretos!
end;
end;

espero ter ajudado :wink:


Mahdak
   - 14 mar 2006

brother... ando tao perturbado aqui que nem tinha notado esses detalhes... valleu, o seu exemplo caiu como uma luva...

Abração! :lol:


Paullsoftware
   - 14 mar 2006

estamos aqui pra isso! :wink: