Ir ao conteúdo

Tela Login MySQL e Delphi


Visitante: Sandrelle

Posts recomendados

Visitante: Sandrelle
 
Postado

Oie Pessoal ... Bom Dia!

Eu preciso de uma ajuda, seguindo as regras gerais procurei topicos ja resolvidos ou não em relação a esse assunto e encontrei uns que estão meio incompletos... :(

Gosataria de fazer um tela de login que verifique em uma tabela do bando de dados ... se o usuario existe ou não ... (gostaria de permissões dependendo do user - mais vamos por parte)... Encontrei uns exemplos mais não entendi muito bem e também são bem antigos de 2005.

Será que alguém pode me ajudar! :D ?

Visitante: Sandrelle
 
Postado
Ok, vamos lá.. o que você já tem pronto ?

Oi Bom Dia!

No meu banco, criei uma tabela chamada usuario ... que recebe o nome e senha...

em delphi fiz um form de como seria a tela ... como se fosse so a cara do projeto ...

ainda não tem nada de cogido por traz... :seila:

Até tentei faz algo, mais não deu muito certo! :D

Visitante: Sandrelle
 
Postado

você ainda vai me ajudar? :D

Visitante: Sandrelle
 
Postado
passe mais algumas informações para ficar mais fácil de te ajudar

qual a versão do delphi?

você já criou a conexão entre o seu programa e o mysql? sabe como fazer isso?

Oie Bom Dia...

Sim ...ja fiz a conexão com o banco... onde criei a tabela chamada "Usuario" com os campos 'nome', 'senha' ... no momento estou usando o delphi 7.

Obrigada pela atenção. ^_^

Postado

Já trabalhei banco de dados no delphi 6 há algum tempo, no delphi 7 não deve ser muito diferente.

outra duvida, você pretende usar instruções SQL para lidar com o banco de dados?

se for, qual a sua dificuldade, autenticar o usuário? no SQL isso é bem simples, eu te explico se este for o caso.

Visitante: Sandrelle
 
Postado

Bom Dia ...

Sim ... comandos SQL ....;

Eu não estou conseguindo deve ser autenticar, pois não estou fazer as comparações

para ver se o usuario esta na tabela ... as conexões estão feitas, porém não consigo

trazer os dados...

Acredito que teria que usar o SELECT, mas não sei como ...

Devem ser duvidas primarias .... -_- !

Obrigada pela paciência! :)

Postado

Para Verificar, supondo que o nome da tabela seja "usuarios", e os nomes dos campos sejam "login" e "senha" você vai usar o sql assim:

SELECT * FROM usuarios WHERE login='NOME_VAI_AQUI' AND senha='SENHA_VAI_AQUI'

depois você pode guardar o id do registro para possíveis consultas

Visitante: Sandrelle
 
Postado
Para Verificar, supondo que o nome da tabela seja "usuarios", e os nomes dos campos sejam "login" e "senha" você vai usar o sql assim:

SELECT * FROM usuarios WHERE login='NOME_VAI_AQUI' AND senha='SENHA_VAI_AQUI'

depois você pode guardar o id do registro para possíveis consultas

Oie Bom Dia ...

Eu usei assim ...

procedure TForm1.Button1Click(Sender: TObject);
var ComandoSQL : String;
begin

ComandoSQL := ' select * from Usuario where usuario = ("' +edit1.Text+'")
and senha = ("' +edit2.Text+'")';

adoquery1.SQL.Clear ;
adoquery1.SQL.Add(ComandoSQL);

try
adoquery1.ExecSQL;
except
showmessage('Usuário ou Senha Incorretos!');
end;

form1.Hide;
form2.Show;

end;

Depois chamei a tela seguinte. Parecia estar tudo certo. :aplausos: ... Porém fiz um pequeno teste e ta passando usuarios que não estão cadastrados ... :cry: ... Eu tenho que por mais alguma restrição?

Obrigada pela ajuda!

Postado

obs: nesse tutorial um pouco do ADOQuery no delphi: http://delphi.about.com/od/database/l/aa050101a.htm

então, a SQL esta certa, mas acho melhor você tentar de outro jeito, lembrando que uma query não retorna erro quando não acha resultado, só retorna erro se a SQL estiver incorreta.

with adoquery1 do begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM Usuario WHERE usuario=:username AND senha=:password');
Parameters.ParamByName('username').Value:= edit1.Text;
Parameters.ParamByName('password').Value:= edit2.Text;
Open;
end;

pode ser que de um erro nesse "Parameters.ParamByName", se isso acontecer mude de "Parameters.ParamByName" para somente "ParamByName"

Visitante: Sandrelle
 
Postado

Então no caso eu usuaria esse codigo acima dentro da procedure?

e continuaria usando o AdoQuery?

Postado

você iria trocar parte do código que você fez:

procedure TForm1.Button1Click(Sender: TObject);
var ComandoSQL : String;
begin

with adoquery1 do begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM Usuario WHERE usuario=:username AND senha=:password');
Parameters.ParamByName('username').Value:= edit1.Text;
Parameters.ParamByName('password').Value:= edit2.Text;
Open;
end;

form1.Hide;
form2.Show;

end;

Visitante: Sandrelle
 
Postado

:D A vou tentar, espero que funcione!

Mandarei resposta!

Visitante: Sandrelle
 
Postado

Eu troquei parte do codigo como você disse... mas continuou a passar quem não estar cadastrado ...

ai eu dexei somente o "ParamByName" e deu erro de sintaxe...

e agora??

Obrigada pelas ajudas de hoje! ^_^

Postado

muda para isso:

procedure TForm1.Button1Click(Sender: TObject);
var ComandoSQL : String;
begin

with adoquery1 do begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM Usuario WHERE usuario=:username AND senha=:password');
Parameters.ParamByName('username').Value:= edit1.Text;
Parameters.ParamByName('password').Value:= edit2.Text;
Active:=True;
Open;
end;

showmessage('Foram encontrados ' + IntToStr(adoquery1.Recordcount) + ' Usuários com email: ' + edit1.Text + ' e senha: ' + edit2.Text);

form1.Hide;
form2.Show;

end;

isso é só para testar

Visitante: Sandrelle
 
Postado

Oi... Bom Dia...

Eu fiz o teste ...

Continua o erro anterior, estão passando usuarios não cadastrados... quando isso acontece na showmessage esta aparecendo "Foram encontrados 0 Usuários com email: erertt e senha: 45645ty" que no caso foi o que eu usei pra teste e não esta cadastrado!

Será que o problema não seria na hora de chamar a outra tela usando:

form1.Hide;
form2.Show;

Por que mesmo não constando na lista ta chamando.

Teria outra forma de chamar a tela seguinte??

Obrigada!

Postado

então, você só pode passar de tela se for encontrado mais que um usuário

if adoquery1.Recordcount > 0 then begin
showmessage('Foram encontrados ' + IntToStr(adoquery1.Recordcount) + ' Usuários com email: ' + edit1.Text + ' e senha: ' + edit2.Text);
form1.Hide;
form2.Show;
end else begin
showmessage('Esse nome de usuário não existe.');
end;

se você nunca estiver encontrando nenhum resultado, então o problema está no SQL.

se você estiver encontrando mas não estiver listando então o problema está na ligação entre o "TAdoQuery" e o componente que você esta usando para exibir os resultados.

Visitante: Sandrelle
 
Postado

Oi

Eu tenho dois usuários na minha tabela cadastrados, a procedure que estou usando é essa que lhe mostrei...

E o que você me passou funcionou. Porém o que esta ocorrendo é que quando eu testo

com qualquer nome que não esta cadastrado passa também .... "Ou seja na minha opinião

ta passando pelo codigo, chega na showmessage, joga a mensagem na tela, que não tem nenhum cadastrado, ai vai pra ultima parte do codigo que é chamar a tela e acaba chamando do mesmo jeito... (por isso achei que podia ser na outra parte ... a de chamar tela...)

E acredito que esta fazendo a comparação sim com a tabela do banco, por q quando eu coloco um usuario cadastrado a mensagem vem com dizendo tem 1 usuario com aquele nome e aquela senha....

Espero não esta complicando ... Obrigada pela ajuda... ainda não testei o codigo acima, vou testar e mando uma resposta; ^_^

******

Oie ... agora ja testei ...

Juntei ao codigo essa parte que você mandou e agora esta vedando a passagem de usuários

não cadastrados ... até o momento tudo certo. Muito Obrigada. :)

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...