Problemas na programção do Login so sistema
EDataBaseError with message ´Token unknown - line 1, char 74 LOGIN ´, Process stopped. Use Step or Run to continue
Estou usando DBExpress com SQLConnection , SQLQuery , DatasetProvider, ClientDataSet , DataSource
procedure TLogin.Button1Click(Sender: TObject);
var
strSqlLog: string;
begin
strSqlLog:= ´SELECT * FROM TB_USUARIO, TB_PERFIL WHERE TB_USUARIO.NIVEL = IDPERFIL´;
strSqlLog:= strSqlLog + ´AND LOGIN = ´ + #39 + (ValorNome.Text) + 39 ;
strSqlLog:= strSqlLog + ´AND SENHA = ´ + 39 + (valorSenha.Text) + 39 ;
menuPrin.qLogin.Close;
menuPrin.qLogin.SQL.Clear;
menuPrin.qLogin.SQL.Add(strSqlLog);
menuPrin.qLogin.Open;
if(menuPrin.qLogin.RecordCount) = 1 then
begin
menuPrin.StatusBar1.Panels[2].Text:= ´ ´ + ´Usuário: ´ + login.ValorNome.Text +
´ - ´ + menuPrin.qLogin.FieldByName(´DEPTO´).AsString;
login.Close;
end;
end;
Qual é o problema não consigo solucionar ? O Campo LOGIN E SENHA EXISTE NO BANCO FIREBIRD 1.5
Estou usando DBExpress com SQLConnection , SQLQuery , DatasetProvider, ClientDataSet , DataSource
procedure TLogin.Button1Click(Sender: TObject);
var
strSqlLog: string;
begin
strSqlLog:= ´SELECT * FROM TB_USUARIO, TB_PERFIL WHERE TB_USUARIO.NIVEL = IDPERFIL´;
strSqlLog:= strSqlLog + ´AND LOGIN = ´ + #39 + (ValorNome.Text) + 39 ;
strSqlLog:= strSqlLog + ´AND SENHA = ´ + 39 + (valorSenha.Text) + 39 ;
menuPrin.qLogin.Close;
menuPrin.qLogin.SQL.Clear;
menuPrin.qLogin.SQL.Add(strSqlLog);
menuPrin.qLogin.Open;
if(menuPrin.qLogin.RecordCount) = 1 then
begin
menuPrin.StatusBar1.Panels[2].Text:= ´ ´ + ´Usuário: ´ + login.ValorNome.Text +
´ - ´ + menuPrin.qLogin.FieldByName(´DEPTO´).AsString;
login.Close;
end;
end;
Qual é o problema não consigo solucionar ? O Campo LOGIN E SENHA EXISTE NO BANCO FIREBIRD 1.5
Afterdev
Curtidas 0
Respostas
Emerson Nascimento
01/06/2008
procedure TLogin.Button1Click(Sender: TObject); var strSqlLog: string; begin strSqlLog := ´SELECT * ´+ ´FROM TB_USUARIO, TB_PERFIL ´+ // tem um espaço no final ´WHERE TB_USUARIO.NIVEL = IDPERFIL ´+ // tem um espaço no final ´AND LOGIN = ´ + QuotedStr(ValorNome.Text) + ´ AND SENHA = ´ + QuotedStr(valorSenha.Text); // tem um espaço no início menuPrin.qLogin.Close; menuPrin.qLogin.SQL.Clear; menuPrin.qLogin.SQL.Add(strSqlLog); menuPrin.qLogin.Open; if(menuPrin.qLogin.RecordCount) = 1 then begin menuPrin.StatusBar1.Panels[2].Text:= ´ ´ + ´Usuário: ´ + login.ValorNome.Text + ´ - ´ + menuPrin.qLogin.FieldByName(´DEPTO´).AsString; login.Close; end; end;
da forma que você passou - sem os espaços - a string seria montada assim:
SELECT * FROM TB_USUARIO, TB_PERFIL WHERE TB_USUARIO.NIVEL = IDPERFILAND LOGIN = ´XXX´AND SENHA = ´XXX´.
perceba o trecho: TB_USUARIO.NIVEL = [b:d10ea201e0]IDPERFILAND[/b:d10ea201e0] LOGIN
a msg ´Token unknown - line 1, char 74 LOGIN´ mostra que a palavra LOGIN está exatamente na posição 74, por conta da falta do espaço entre [i:d10ea201e0]IDPERFIL[/i:d10ea201e0] e [i:d10ea201e0]AND[/i:d10ea201e0]
da forma que eu passei, a string será:
SELECT * FROM TB_USUARIO, TB_PERFIL WHERE TB_USUARIO.NIVEL = IDPERFIL AND LOGIN = ´XXX´ AND SENHA = ´XXX´
note que agora há espaços separando corretamente os comandos.
GOSTEI 0
Afterdev
01/06/2008
Emerson obrigado pela ajuda vou modificar , mas agora não está compilando, veja a mensagem:
[Fatal Error] File not found: ´c:\arquivos de programas\borland\delphi7\Rave5\Lib\ComCtrls.pas´
[Fatal Error] File not found: ´c:\arquivos de programas\borland\delphi7\Rave5\Lib\ComCtrls.pas´
GOSTEI 0
Afterdev
01/06/2008
procedure TLogin.Button1Click(Sender: TObject); var strSqlLog: string; begin strSqlLog := ´SELECT * ´+ ´FROM TB_USUARIO, TB_PERFIL ´+ // tem um espaço no final ´WHERE TB_USUARIO.NIVEL = IDPERFIL ´+ // tem um espaço no final ´AND LOGIN = ´ + QuotedStr(ValorNome.Text) + ´ AND SENHA = ´ + QuotedStr(valorSenha.Text); // tem um espaço no início menuPrin.qLogin.Close; menuPrin.qLogin.SQL.Clear; menuPrin.qLogin.SQL.Add(strSqlLog); menuPrin.qLogin.Open; if(menuPrin.qLogin.RecordCount) = 1 then begin menuPrin.StatusBar1.Panels[2].Text:= ´ ´ + ´Usuário: ´ + login.ValorNome.Text + ´ - ´ + menuPrin.qLogin.FieldByName(´DEPTO´).AsString; login.Close; end; end;
Olá Emerson !
Fiz conforme você mostrou e aparentemente está correto mais ocorre um erro SQL error code = -206 Column unknown IDPERFIL At line 1, column 68. Column does not belong to referenced table.
O Select que fiz na Query está exatamente igual, funcionou e trouxe todos os campos das tabelas Usuario e Perfil, inclusive o campo IDPERFIL, só que ao trocar o IDPERFIL por 0, no codigo do botão o sistema logou normalmente, porque já tinha cadastrado esse valor no banco antes, mas continuo com esse problema quando for cadastrar mais usuarios não vai dar certo ! Não sei como solucionar esse problema .... alias também coloquei no lugar do IDPERFIL a forma correta eu acho TB_PERFIL.IDPERFIL e não funcionou.,,,,
GOSTEI 0