14/03/2006

login (Validação de senha)

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.


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&93;.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&91;0&93;.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; 



Mahdak

Respostas

14/03/2006

Paullsoftware

Existe uma falha na sua consulta, pelomenos ao meu ver...
quando você faz:
   Tbl_Login.SelectSQL.add(´SELECT * FROM Login WHERE USUARIO Like:Consulta ´ );

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


[i:526ac67075][b:526ac67075]se Existir um usuário chamado Flavia e Outro Chamado Flaviana toda vez que digitar Flavia vai retornar dois registros...[/b:526ac67075][/i:526ac67075]
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 [b:526ac67075]Entrada[/b:526ac67075] quando na [b:526ac67075]Resposta[/b:526ac67075] é correto que vc use assim:
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&93;,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:


Responder Citar

14/03/2006

Mahdak

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

Abração! :lol:


Responder Citar

14/03/2006

Paullsoftware

estamos aqui pra isso! :wink:


Responder Citar