Problemas com Tela de Login
bom dia pessoal!
como sou novato em delphi estou com um problema em conseguir acessar meu form principal atraves da tela de login, o problema eh o seguinte:
eu cadastro o usuario e senha pelo banco e tento chamar pelo delphi, soh q eu soh consigo acessar minha tela principal com o primeiro registro, caso eu tenha 10 usuarios cadastrados no banco ele soh entra com o primeiro registro q eu fiz... nao sei oq eu estou fazendo de errado, segue o codigo abaixo:
procedure TtelaLogin.Button1Click(Sender: TObject);
begin
if((dm.cdsLoginUSUARIO.AsString = edit1.Text) and (dm.cdsLoginSENHA.AsString = edit2.Text)) then
begin
telaPrincipal := TtelaPrincipal.Create(Application);
telaPrincipal.Showmodal;
telaLogin.Close;
end
else begin
ShowMessage('Senha ou login invalidos');
end;
edit1.clear;
edit2.Clear;
end;
end.
Obs.: estou uusando firebird com ibexpert e delphi 7.
como sou novato em delphi estou com um problema em conseguir acessar meu form principal atraves da tela de login, o problema eh o seguinte:
eu cadastro o usuario e senha pelo banco e tento chamar pelo delphi, soh q eu soh consigo acessar minha tela principal com o primeiro registro, caso eu tenha 10 usuarios cadastrados no banco ele soh entra com o primeiro registro q eu fiz... nao sei oq eu estou fazendo de errado, segue o codigo abaixo:
procedure TtelaLogin.Button1Click(Sender: TObject);
begin
if((dm.cdsLoginUSUARIO.AsString = edit1.Text) and (dm.cdsLoginSENHA.AsString = edit2.Text)) then
begin
telaPrincipal := TtelaPrincipal.Create(Application);
telaPrincipal.Showmodal;
telaLogin.Close;
end
else begin
ShowMessage('Senha ou login invalidos');
end;
edit1.clear;
edit2.Clear;
end;
end.
Obs.: estou uusando firebird com ibexpert e delphi 7.
Marcio
Curtidas 0
Respostas
Hermes Silva
28/10/2009
Tenta isso ai !
coloque uma Query(qryLogin) e um dataset(dtsLogin) no DM, ligue o dtslogin no qrylogin.
no comando sql do qrylogin digite o comando: select * from SUA_TABELA_USUARIOS ,
carregues os campos no qrylogin e faça o seguinte:
procedure TtelaLogin.Button1Click(Sender: TObject);
var
s_sql: string;
begin
s_sql:= 'select * from SUA_TABELA_USUARIOS where USUARIO.USUARIO ='+#39+ (edit1.text) +39;
s_sql:= s_sql+ ' and USUARIOS.SENHA ='+#39+ (edit2.text) +#39;
dm.qrylogin.close;
dm.qrylogin.sql.clear.
dm.qrylogin.sql.add:= s_sql;
dm.qrylogin.open;
if((dm.qryLoginUSUARIO.AsString = edit1.Text) and (dm.qryloginSENHA.AsString = edit2.Text)) then
begin
telaPrincipal := TtelaPrincipal.Create(Application);
telaPrincipal.Showmodal;
telaLogin.Close;
end
else begin
ShowMessage('Senha ou login invalidos');
end;
edit1.clear;
edit2.Clear;
end;
GOSTEI 0
Alan Souza
28/10/2009
1°: ???
2°: Desse modo vc tá comparando sempre o usuário corrente do DataSet (o primeiro, no caso). Tenta dar um locate pelo nome de usuário antes, ou filtre o DataSet por ele, aí se ele existir no banco vc valida a senha, se não existir já pede pra confirmar o nome novamente.
2°: Desse modo vc tá comparando sempre o usuário corrente do DataSet (o primeiro, no caso). Tenta dar um locate pelo nome de usuário antes, ou filtre o DataSet por ele, aí se ele existir no banco vc valida a senha, se não existir já pede pra confirmar o nome novamente.
GOSTEI 0
Marcio
28/10/2009
testei a primeira ajuda e nao deu certo... da o seguinte erro "Not enough actual parameters" na linha de comando "dm.querylogin.sql.Add := s_sql;" mesmo assim obrigado ;)
Alan sera q vc nao poderia me dar um exemplo?
como eu disse sou novato em programaçao ^^
Alan sera q vc nao poderia me dar um exemplo?
como eu disse sou novato em programaçao ^^
GOSTEI 0
Alan Souza
28/10/2009
Assim: pelo prefixo, vc tá usando ClientDataSet, então na fonte dele (Query ou equivalente), vc coloca o SQL
select nome, senha from sua_tabela where nome = :nome
assim vc vai filtrar o usuário passado, então vc só vai abrir o DataSet no evento do botão.
procedure TtelaLogin.Button1Click(Sender: TObject);
begin
dm.cdsLogin.Close;
dm.cdsLogin.ParamByName('nome').AsString := Edit1.Text;
dm.cdsLogin.Open;
if cdsLogin.IsEmpty then
begin
Application.MessageBox('Usuário Inexistente!!','Atenção',MO_OK + MB_ICONWARNING);
Edit1.SetFocus;
end
else
begin
if(dm.cdsLoginSENHA.AsString = edit2.Text)) then
begin
telaPrincipal := TtelaPrincipal.Create(Application);
telaPrincipal.Showmodal;
telaLogin.Close;
end
else
ShowMessage('Senha inválida!!');
end;
end;
só que vendo seu código, há outros pontos meio estranhos: por exemplo, qual seu Main Form na aplicação? se for o de login, está errado, o certo é ser o telaPrincipal.
select nome, senha from sua_tabela where nome = :nome
assim vc vai filtrar o usuário passado, então vc só vai abrir o DataSet no evento do botão.
procedure TtelaLogin.Button1Click(Sender: TObject);
begin
dm.cdsLogin.Close;
dm.cdsLogin.ParamByName('nome').AsString := Edit1.Text;
dm.cdsLogin.Open;
if cdsLogin.IsEmpty then
begin
Application.MessageBox('Usuário Inexistente!!','Atenção',MO_OK + MB_ICONWARNING);
Edit1.SetFocus;
end
else
begin
if(dm.cdsLoginSENHA.AsString = edit2.Text)) then
begin
telaPrincipal := TtelaPrincipal.Create(Application);
telaPrincipal.Showmodal;
telaLogin.Close;
end
else
ShowMessage('Senha inválida!!');
end;
end;
só que vendo seu código, há outros pontos meio estranhos: por exemplo, qual seu Main Form na aplicação? se for o de login, está errado, o certo é ser o telaPrincipal.
GOSTEI 0