FireBird Com Delphi Field Not Found
Boa noite, estou estudando delphi a alguns meses e resolvi fazer um aplicativo mobile e estou com um problema eu faço a conexão normalmente com o firedac TFDConnection, TFDQuery e DataSource, quando eu digito o código manualmente de limpar o TFDQuery e adicionar o código Sql e ligo via LiveBiding no GriD vai tudo certo, mas eu tentei fazer uma tela de login e o código foi o seguinte:
Ignorem os erros de digitação está correto no meu código, mas estou acostumado com o php é diferente, já até adicionei o componente do driver do FireBird e fica dando o mesmo erro :
Field nome Not Found
Queria saber o que fiz de errado eu tentei citar os campos do select e fazer a comparação para fazer o login mas fica dando está mensagem de erro, parece que não puxa os campos do banco de dados;
Login := edtlogin.text;
Senha := edtsenha.text;
TFDQuery.close;
TFDQuery.Sql.Clear;
TFDQuery.Sql...(''''select nome,senha from usuarios'''');
loginsel := fieldbyname(''''nome'''').value;
senhasel := fieldbyname(''''nome'''').value;
If (loginsel = login) and (senhasel = senha) then
Begin
ShowMessage(''''voce está logado'''');
End;
TFDQuery.open;
Senha := edtsenha.text;
TFDQuery.close;
TFDQuery.Sql.Clear;
TFDQuery.Sql...(''''select nome,senha from usuarios'''');
loginsel := fieldbyname(''''nome'''').value;
senhasel := fieldbyname(''''nome'''').value;
If (loginsel = login) and (senhasel = senha) then
Begin
ShowMessage(''''voce está logado'''');
End;
TFDQuery.open;
Ignorem os erros de digitação está correto no meu código, mas estou acostumado com o php é diferente, já até adicionei o componente do driver do FireBird e fica dando o mesmo erro :
Field nome Not Found
Queria saber o que fiz de errado eu tentei citar os campos do select e fazer a comparação para fazer o login mas fica dando está mensagem de erro, parece que não puxa os campos do banco de dados;
Helton Faria
Curtidas 0
Melhor post
Emerson Nascimento
01/06/2021
você não pode obter os dados de um dataset fechado. note que você fecha o dataset (.close), tenta recuperar os dados (.fieldbyname) e só depois abre o dataset (.open).
pelo que eu entendi do teu código, deveria ser algo assim:
pelo que eu entendi do teu código, deveria ser algo assim:
Login := edtlogin.text; // login informado
Senha := edtsenha.text; // senha informada
FDQuery.Close;
FDQuery.Sql.Text := 'select nome from usuarios where nome = :login and senha = :password'
FDQuery.ParamByName('login').Asstring := login;
FDQuery.ParamByName('password').Asstring := senha;
FDQuery.Open;
If FDQuery.Eof then
ShowMessage('Usuário ou senha inválidos');GOSTEI 1
Mais Respostas
Helton Faria
31/05/2021
você não pode obter os dados de um dataset fechado. note que você fecha o dataset (.close), tenta recuperar os dados (.fieldbyname) e só depois abre o dataset (.open).
pelo que eu entendi do teu código, deveria ser algo assim:
pelo que eu entendi do teu código, deveria ser algo assim:
Login := edtlogin.text; // login informado
Senha := edtsenha.text; // senha informada
FDQuery.Close;
FDQuery.Sql.Text := 'select nome from usuarios where nome = :login and senha = :password'
FDQuery.ParamByName('login').Asstring := login;
FDQuery.ParamByName('password').Asstring := senha;
FDQuery.Open;
If FDQuery.Eof then
ShowMessage('Usuário ou senha inválidos');Obrigado pela ajuda eu consegui fazer o que queria meu código ficou assim:
procedure TFrmLogin.rct_fundo_acessarClick(Sender: TObject);
var
login, senha, login_edt, senha_edt: String;
begin
login_edt := edt_login.text; // login informado
senha_edt := edt_senha.text; // senha informada
DM_Comanda.FDQuery.Close;
DM_Comanda.FDQuery.Sql.Clear;
DM_Comanda.FDQuery.Sql.Add('select nome,senha from usuarios where nome = :login and senha = :password');
DM_Comanda.FDQuery.ParamByName('login').Asstring := login_edt;
DM_Comanda.FDQuery.ParamByName('password').Asstring := senha_edt;
DM_Comanda.FDQuery.Open;
login := DM_Comanda.FDQuery.FieldByName('nome').Value;
senha := DM_Comanda.FDQuery.FieldByName('senha').Value;
If (login_edt = login) and (senha_edt = senha) then
begin
ShowMessage('Você está logado!!');
end
else
begin
ShowMessage('Você errou o login ou a senha!!!');
end;
end;Só que agora com o else depois do teste ta dando uma mensagem assim: Could not convert variant of type (null) into type (OleStr),
eu não entendo está tudo como String e está falando de converssão o que pode ser ?
GOSTEI 0
Emerson Nascimento
31/05/2021
se você já está mandando o login e senha nos parâmetros, não é necessário comparar novamente.
você está fazendo assim:
"me traga o nome do usuário que possui esse login e senha que foram digitados"
"agora veja se o login e senha digitados são os mesmo que eu procurei".
não faz sentido porque a busca com parâmetros só terá retorno se o login e senha forem encontrados.
basta:
você está fazendo assim:
"me traga o nome do usuário que possui esse login e senha que foram digitados"
"agora veja se o login e senha digitados são os mesmo que eu procurei".
não faz sentido porque a busca com parâmetros só terá retorno se o login e senha forem encontrados.
basta:
procedure TFrmLogin.rct_fundo_acessarClick(Sender: TObject);
begin
DM_Comanda.FDQuery.Close;
DM_Comanda.FDQuery.SQL.Text := 'select nome from usuarios where nome = :login and senha = :password';
DM_Comanda.FDQuery.ParamByName('login').Asstring := edt_login.text; // login informado
DM_Comanda.FDQuery.ParamByName('password').Asstring := edt_senha.text; // senha informada
DM_Comanda.FDQuery.Open;
If DM_Comanda.FDQuery.Eof then // se está vazio é porque o login ou senha estão errados
ShowMessage('Você errou o login ou a senha!!!')
else
ShowMessage('Você está logado!!');
end;GOSTEI 1
Helton Faria
31/05/2021
se você já está mandando o login e senha nos parâmetros, não é necessário comparar novamente.
você está fazendo assim:
"me traga o nome do usuário que possui esse login e senha que foram digitados"
"agora veja se o login e senha digitados são os mesmo que eu procurei".
não faz sentido porque a busca com parâmetros só terá retorno se o login e senha forem encontrados.
basta:
você está fazendo assim:
"me traga o nome do usuário que possui esse login e senha que foram digitados"
"agora veja se o login e senha digitados são os mesmo que eu procurei".
não faz sentido porque a busca com parâmetros só terá retorno se o login e senha forem encontrados.
basta:
procedure TFrmLogin.rct_fundo_acessarClick(Sender: TObject);
begin
DM_Comanda.FDQuery.Close;
DM_Comanda.FDQuery.SQL.Text := 'select nome from usuarios where nome = :login and senha = :password';
DM_Comanda.FDQuery.ParamByName('login').Asstring := edt_login.text; // login informado
DM_Comanda.FDQuery.ParamByName('password').Asstring := edt_senha.text; // senha informada
DM_Comanda.FDQuery.Open;
If DM_Comanda.FDQuery.Eof then // se está vazio é porque o login ou senha estão errados
ShowMessage('Você errou o login ou a senha!!!')
else
ShowMessage('Você está logado!!');
end;Sou estudante de Análise de Sistemas, o que certamente a função "eof" faz ?
GOSTEI 0
Helton Faria
31/05/2021
Mais uma útima pergunta, no php quando eu quero fazer uma verificação se o campo é vazio eu faria um else caso o campo fosse vazio ele exibiria o que eu quizesse,
como eu faço aqui no delphi ? meu código está assim :
/quote]
Quando eu clico no botão que filtra as mesas sem nada no campo ele exibe a mensagem para mim :
"" is not a valid integer value for integer type
como eu poderia estar corrigindo isto ?
como eu faço aqui no delphi ? meu código está assim :
procedure TFrmPrincipal.rct_atualizarmesaClick(Sender: TObject);
var
numesa : integer;
begin
numesa := edt_numcomand.Text.ToInteger;
if edt_numcomand.Text <> '' then
begin
DM_Comanda.FDQuery.Close;
DM_Comanda.FDQuery.SQL.Clear;
DM_Comanda.FDQuery.SQL.Add('select * from MESACARTAO where mesa like :cMesa');
DM_Comanda.FDQuery.ParamByName('cMesa').AsInteger := numesa;
DM_Comanda.FDQuery.Open;
lbl_numesa.Text := edt_numcomand.Text;
end;
end;[Quando eu clico no botão que filtra as mesas sem nada no campo ele exibe a mensagem para mim :
"" is not a valid integer value for integer type
como eu poderia estar corrigindo isto ?
GOSTEI 0
Emerson Nascimento
31/05/2021
EoF significa "End Of File" (fim de arquivo).
Se você acabou de abrir a tabela e já está no fim do arquivo quer dizer que não há dados.
Sobre o erro "is not a integer value"... Está ocorrendo porque você está tentando transformar uma string vazia em inteiro.
Para evitar o erro coloque a linha da atribuição de numesa dentro do if
Se você acabou de abrir a tabela e já está no fim do arquivo quer dizer que não há dados.
Sobre o erro "is not a integer value"... Está ocorrendo porque você está tentando transformar uma string vazia em inteiro.
Para evitar o erro coloque a linha da atribuição de numesa dentro do if
GOSTEI 1
Helton Faria
31/05/2021
EoF significa "End Of File" (fim de arquivo).
Se você acabou de abrir a tabela e já está no fim do arquivo quer dizer que não há dados.
Sobre o erro "is not a integer value"... Está ocorrendo porque você está tentando transformar uma string vazia em inteiro.
Para evitar o erro coloque a linha da atribuição de numesa dentro do if
Se você acabou de abrir a tabela e já está no fim do arquivo quer dizer que não há dados.
Sobre o erro "is not a integer value"... Está ocorrendo porque você está tentando transformar uma string vazia em inteiro.
Para evitar o erro coloque a linha da atribuição de numesa dentro do if
Emerson estou acostumado com o php web, muito obrigado por ter me ajudado eu estou começando agora a estudar o delphi há muitas diferenças, no php não precisa de tudo isso ele já entende o tipo de variável se é inteirou ou string e faz as conversões automáticamente, para mim tudo é novo agora. Obrigado!!!
GOSTEI 0