Tela de Login Delhpi Seattle + Postgre

PostgreSQL

Delphi

20/03/2019

Estou fazendo uma tela de login, com o Delphi Seattle, porém está ocorrendo uma falha e não consigo resolver, o evento OnClick do meu botão está assim:

procedure TfrmLogin.btnOkClick(Sender: TObject);
begin
QueryLogin.Close;
QueryLogin.SQL.Clear;
QueryLogin.Open(''select * from usuario where codigo = :codigo and senha = :senha'');
QueryLogin.ParamByName(''codigo'').AsInteger := strtoint(edtUsuario.Text);
QueryLogin.ParamByName(''senha'').AsString := edtSenha.Text;
QueryLogin.ExecSQL();
if QueryLogin.RecordCount > 0 then begin
frmNavega.Show;
frmLogin.Close;
end;
if QueryLogin.RecordCount = 0 then
MessageDlg(''Login inválido, usuário ou senha incorretos, verifique!'', mtError, [mbOK], 0);

end;

Esta bem cru, pois estou só tentando fazer funcionar antes, não coloquei validação de usuário e senha nem nada, porém quando eu coloco um código de usuário e senha cadastrado no banco de dados ocorre a mensagem abaixo:

---------------------------
pprincipal
---------------------------
[FireDAC][Phys][pG]-335. Parameter [CODIGO] data type is unknown. Hint: specify TFDParam.DataType or assign TFDParam value before Prepare/Execute call.
---------------------------
OK
---------------------------
Ferrari

Ferrari

Curtidas 0

Melhor post

Hélio Devmedia

Hélio Devmedia

21/03/2019

Olá amigo,

Basta ir na Propriedade Parameters do componente QueryLogin, selecionar o parâmetro CODIGO que aparece alí e especificar o tipo, se é ftstring ou ftinteger.

Um forte abraço e fique com Deus.
GOSTEI 1

Mais Respostas

Ferrari

Ferrari

20/03/2019

Olá amigo,

Basta ir na Propriedade Parameters do componente QueryLogin, selecionar o parâmetro CODIGO que aparece alí e especificar o tipo, se é ftstring ou ftinteger.

Um forte abraço e fique com Deus.


Obrigado pela dica amigo, mas não consegui achar esses componentes que fala, eu dei um duplo click na query, fui em parameters, porém não achei nada referenciando o código.
GOSTEI 0
Ferrari

Ferrari

20/03/2019

Olá amigo,

Basta ir na Propriedade Parameters do componente QueryLogin, selecionar o parâmetro CODIGO que aparece alí e especificar o tipo, se é ftstring ou ftinteger.

Um forte abraço e fique com Deus.


talvez, não seja o que especifiquei aqui?
QueryLogin.ParamByName('codigo').AsInteger := strtoint(edtUsuario.Text);
QueryLogin.ParamByName('senha').AsString := edtSenha.Text;
GOSTEI 0
Erich

Erich

20/03/2019

Estou fazendo uma tela de login, com o Delphi Seattle, porém está ocorrendo uma falha e não consigo resolver, o evento OnClick do meu botão está assim:

procedure TfrmLogin.btnOkClick(Sender: TObject);
begin
QueryLogin.Close;
QueryLogin.SQL.Clear;
QueryLogin.Open(''select * from usuario where codigo = :codigo and senha = :senha'');
QueryLogin.ParamByName(''codigo'').AsInteger := strtoint(edtUsuario.Text);
QueryLogin.ParamByName(''senha'').AsString := edtSenha.Text;
QueryLogin.ExecSQL();
if QueryLogin.RecordCount > 0 then begin
frmNavega.Show;
frmLogin.Close;
end;
if QueryLogin.RecordCount = 0 then
MessageDlg(''Login inválido, usuário ou senha incorretos, verifique!'', mtError, [mbOK], 0);

end;

Esta bem cru, pois estou só tentando fazer funcionar antes, não coloquei validação de usuário e senha nem nada, porém quando eu coloco um código de usuário e senha cadastrado no banco de dados ocorre a mensagem abaixo:

---------------------------
pprincipal
---------------------------
[FireDAC][Phys][pG]-335. Parameter [CODIGO] data type is unknown. Hint: specify TFDParam.DataType or assign TFDParam value before Prepare/Execute call.
---------------------------
OK
---------------------------
Amigo o erro está aqui! >> QueryLogin.Open(''select * from usuario where codigo = :codigo and senha = :senha'');
o Certo é QueryLogin.SQL.ADD(''select * from usuario where codigo = :codigo and senha = :senha'');
GOSTEI 1
Erich

Erich

20/03/2019

Estou fazendo uma tela de login, com o Delphi Seattle, porém está ocorrendo uma falha e não consigo resolver, o evento OnClick do meu botão está assim:

procedure TfrmLogin.btnOkClick(Sender: TObject);
begin
QueryLogin.Close;
QueryLogin.SQL.Clear;
QueryLogin.Open(''''select * from usuario where codigo = :codigo and senha = :senha'''');
QueryLogin.ParamByName(''''codigo'''').AsInteger := strtoint(edtUsuario.Text);
QueryLogin.ParamByName(''''senha'''').AsString := edtSenha.Text;
QueryLogin.ExecSQL();
if QueryLogin.RecordCount > 0 then begin
frmNavega.Show;
frmLogin.Close;
end;
if QueryLogin.RecordCount = 0 then
MessageDlg(''''Login inválido, usuário ou senha incorretos, verifique!'''', mtError, [mbOK], 0);

end;

Esta bem cru, pois estou só tentando fazer funcionar antes, não coloquei validação de usuário e senha nem nada, porém quando eu coloco um código de usuário e senha cadastrado no banco de dados ocorre a mensagem abaixo:

---------------------------
pprincipal
---------------------------
[FireDAC][Phys][pG]-335. Parameter [CODIGO] data type is unknown. Hint: specify TFDParam.DataType or assign TFDParam value before Prepare/Execute call.
---------------------------
OK
---------------------------
cccc/quote]
GOSTEI 0
Hélio Devmedia

Hélio Devmedia

20/03/2019

Olá amigo,

Basta ir na Propriedade Parameters do componente QueryLogin, selecionar o parâmetro CODIGO que aparece alí e especificar o tipo, se é ftstring ou ftinteger.

Um forte abraço e fique com Deus.


talvez, não seja o que especifiquei aqui?
QueryLogin.ParamByName('codigo').AsInteger := strtoint(edtUsuario.Text);
QueryLogin.ParamByName('senha').AsString := edtSenha.Text;



Eu parto da premissa que você tem um componente dataSet dentro do seu formulário ou dataModule.

Quando você aciona uma variável no SQL (:codigo por exemplo) é necessário para alguns bancos você ir na propriedade Parameters do componente (basta selecioná-lo e verá esta opção no Object Inspector). alí você configura em tempo de projeto o tipo do parametro, mesmo que você utilize as propriedades asInteger ou asString posteriormente.
GOSTEI 1
Ferrari

Ferrari

20/03/2019

Estou fazendo uma tela de login, com o Delphi Seattle, porém está ocorrendo uma falha e não consigo resolver, o evento OnClick do meu botão está assim:

procedure TfrmLogin.btnOkClick(Sender: TObject);
begin
QueryLogin.Close;
QueryLogin.SQL.Clear;
QueryLogin.Open(''select * from usuario where codigo = :codigo and senha = :senha'');
QueryLogin.ParamByName(''codigo'').AsInteger := strtoint(edtUsuario.Text);
QueryLogin.ParamByName(''senha'').AsString := edtSenha.Text;
QueryLogin.ExecSQL();
if QueryLogin.RecordCount > 0 then begin
frmNavega.Show;
frmLogin.Close;
end;
if QueryLogin.RecordCount = 0 then
MessageDlg(''Login inválido, usuário ou senha incorretos, verifique!'', mtError, [mbOK], 0);

end;

Esta bem cru, pois estou só tentando fazer funcionar antes, não coloquei validação de usuário e senha nem nada, porém quando eu coloco um código de usuário e senha cadastrado no banco de dados ocorre a mensagem abaixo:

---------------------------
pprincipal
---------------------------
[FireDAC][Phys][pG]-335. Parameter [CODIGO] data type is unknown. Hint: specify TFDParam.DataType or assign TFDParam value before Prepare/Execute call.
---------------------------
OK
---------------------------
Amigo o erro está aqui! >> QueryLogin.Open(''select * from usuario where codigo = :codigo and senha = :senha'');
o Certo é QueryLogin.SQL.ADD(''select * from usuario where codigo = :codigo and senha = :senha'');



Oi Amigo, ja tentei isso também fiz dessa forma:
procedure TfrmLogin.btnOkClick(Sender: TObject);
begin
QueryLogin.Close;
QueryLogin.SQL.Clear;
QueryLogin.SQL.Add('select * from usuario where codigo = :codigo and senha = :senha');
QueryLogin.ParamByName('codigo').AsInteger := strtoint(edtUsuario.Text);
QueryLogin.ParamByName('senha').AsString := edtSenha.Text;
QueryLogin.Open();
QueryLogin.ExecSQL();
if QueryLogin.RecordCount > 0 then begin
frmNavega.ShowModal;
frmLogin.Close;
end;
if QueryLogin.RecordCount = 0 then begin
MessageDlg('Login inválido, usuário ou senha incorretos, verifique!', mtError, [mbOK], 0);
edtUsuario.text := '';
edtSenha.Text := '';
edtUsuario.SetFocus;
end;
end;


e ocorreu a seguinte mensagem:
---------------------------
Atenção!!
---------------------------
QueryLogin: Cannot perform this operation on an open dataset.
---------------------------
OK
---------------------------
GOSTEI 0
Ferrari

Ferrari

20/03/2019

Olá amigo,

Basta ir na Propriedade Parameters do componente QueryLogin, selecionar o parâmetro CODIGO que aparece alí e especificar o tipo, se é ftstring ou ftinteger.

Um forte abraço e fique com Deus.


talvez, não seja o que especifiquei aqui?
QueryLogin.ParamByName('codigo').AsInteger := strtoint(edtUsuario.Text);
QueryLogin.ParamByName('senha').AsString := edtSenha.Text;



Eu parto da premissa que você tem um componente dataSet dentro do seu formulário ou dataModule.

Quando você aciona uma variável no SQL (:codigo por exemplo) é necessário para alguns bancos você ir na propriedade Parameters do componente (basta selecioná-lo e verá esta opção no Object Inspector). alí você configura em tempo de projeto o tipo do parametro, mesmo que você utilize as propriedades asInteger ou asString posteriormente.


Eu fiz da seguinte forma amigo, eu criei um DataModule com um FDConnection, e na tela de login, coloquei um query que comunica direto com o DataModule, será que eu tinha que fazer algo diferente nessa estrutura?
GOSTEI 1
Erich

Erich

20/03/2019

Estou fazendo uma tela de login, com o Delphi Seattle, porém está ocorrendo uma falha e não consigo resolver, o evento OnClick do meu botão está assim:

procedure TfrmLogin.btnOkClick(Sender: TObject);
begin
QueryLogin.Close;
QueryLogin.SQL.Clear;
QueryLogin.Open(''select * from usuario where codigo = :codigo and senha = :senha'');
QueryLogin.ParamByName(''codigo'').AsInteger := strtoint(edtUsuario.Text);
QueryLogin.ParamByName(''senha'').AsString := edtSenha.Text;
QueryLogin.ExecSQL();
if QueryLogin.RecordCount > 0 then begin
frmNavega.Show;
frmLogin.Close;
end;
if QueryLogin.RecordCount = 0 then
MessageDlg(''Login inválido, usuário ou senha incorretos, verifique!'', mtError, [mbOK], 0);

end;

Esta bem cru, pois estou só tentando fazer funcionar antes, não coloquei validação de usuário e senha nem nada, porém quando eu coloco um código de usuário e senha cadastrado no banco de dados ocorre a mensagem abaixo:

---------------------------
pprincipal
---------------------------
[FireDAC][Phys][pG]-335. Parameter [CODIGO] data type is unknown. Hint: specify TFDParam.DataType or assign TFDParam value before Prepare/Execute call.
---------------------------
OK
---------------------------
Amigo o erro está aqui! >> QueryLogin.Open(''select * from usuario where codigo = :codigo and senha = :senha'');
o Certo é QueryLogin.SQL.ADD(''select * from usuario where codigo = :codigo and senha = :senha'');



Oi Amigo, ja tentei isso também fiz dessa forma:
procedure TfrmLogin.btnOkClick(Sender: TObject);
begin
QueryLogin.Close;
QueryLogin.SQL.Clear;
QueryLogin.SQL.Add('select * from usuario where codigo = :codigo and senha = :senha');
QueryLogin.ParamByName('codigo').AsInteger := strtoint(edtUsuario.Text);
QueryLogin.ParamByName('senha').AsString := edtSenha.Text;
QueryLogin.Open();
QueryLogin.ExecSQL();
if QueryLogin.RecordCount > 0 then begin
frmNavega.ShowModal;
frmLogin.Close;
end;
if QueryLogin.RecordCount = 0 then begin
MessageDlg('Login inválido, usuário ou senha incorretos, verifique!', mtError, [mbOK], 0);
edtUsuario.text := '';
edtSenha.Text := '';
edtUsuario.SetFocus;
end;
end;


e ocorreu a seguinte mensagem:
---------------------------
Atenção!!
---------------------------
QueryLogin: Cannot perform this operation on an open dataset.
---------------------------
OK
---------------------------
após sua instrução SQL antes de do parambybame, da um qylogin.prepare, e tire o execSQL. Se não funcionar, Debuga e veja em que momento o erro aparece, ajuda bastante!
GOSTEI 1
Ferrari

Ferrari

20/03/2019

Estou fazendo uma tela de login, com o Delphi Seattle, porém está ocorrendo uma falha e não consigo resolver, o evento OnClick do meu botão está assim:

procedure TfrmLogin.btnOkClick(Sender: TObject);
begin
QueryLogin.Close;
QueryLogin.SQL.Clear;
QueryLogin.Open(''select * from usuario where codigo = :codigo and senha = :senha'');
QueryLogin.ParamByName(''codigo'').AsInteger := strtoint(edtUsuario.Text);
QueryLogin.ParamByName(''senha'').AsString := edtSenha.Text;
QueryLogin.ExecSQL();
if QueryLogin.RecordCount > 0 then begin
frmNavega.Show;
frmLogin.Close;
end;
if QueryLogin.RecordCount = 0 then
MessageDlg(''Login inválido, usuário ou senha incorretos, verifique!'', mtError, [mbOK], 0);

end;

Esta bem cru, pois estou só tentando fazer funcionar antes, não coloquei validação de usuário e senha nem nada, porém quando eu coloco um código de usuário e senha cadastrado no banco de dados ocorre a mensagem abaixo:

---------------------------
pprincipal
---------------------------
[FireDAC][Phys][pG]-335. Parameter [CODIGO] data type is unknown. Hint: specify TFDParam.DataType or assign TFDParam value before Prepare/Execute call.
---------------------------
OK
---------------------------
Amigo o erro está aqui! >> QueryLogin.Open(''select * from usuario where codigo = :codigo and senha = :senha'');
o Certo é QueryLogin.SQL.ADD(''select * from usuario where codigo = :codigo and senha = :senha'');



Oi Amigo, ja tentei isso também fiz dessa forma:
procedure TfrmLogin.btnOkClick(Sender: TObject);
begin
QueryLogin.Close;
QueryLogin.SQL.Clear;
QueryLogin.SQL.Add('select * from usuario where codigo = :codigo and senha = :senha');
QueryLogin.ParamByName('codigo').AsInteger := strtoint(edtUsuario.Text);
QueryLogin.ParamByName('senha').AsString := edtSenha.Text;
QueryLogin.Open();
QueryLogin.ExecSQL();
if QueryLogin.RecordCount > 0 then begin
frmNavega.ShowModal;
frmLogin.Close;
end;
if QueryLogin.RecordCount = 0 then begin
MessageDlg('Login inválido, usuário ou senha incorretos, verifique!', mtError, [mbOK], 0);
edtUsuario.text := '';
edtSenha.Text := '';
edtUsuario.SetFocus;
end;
end;


e ocorreu a seguinte mensagem:
---------------------------
Atenção!!
---------------------------
QueryLogin: Cannot perform this operation on an open dataset.
---------------------------
OK
---------------------------
após sua instrução SQL antes de do parambybame, da um qylogin.prepare, e tire o execSQL. Se não funcionar, Debuga e veja em que momento o erro aparece, ajuda bastante!


isso mesmo, deu certo, muito obrigado, só me informa o que o prepare faz, para eu ficar ciente
GOSTEI 0
POSTAR