Array
(
)

Ajuda com SQL

Lb9
   - 05 dez 2005

PessoaALL, preciso de ajuda mais uma vez.

Estou construindo um sistema de login e recebo erro do SQL:
InterbaseError with message ´Dynamic SQL Error
SQL Error Code = -104
Token Unknown - line 1, char 65
fantasia´.

O código que digitei é o seguinte:

procedure TLogin.BitBtn1Click(Sender: TObject);
var
strSqlLog: string;
mensagem: string;
begin
strSqlLog := ´SELECT * FROM usuario, perfil WHERE usuario.nivel = perfil.id´;
strSqlLog := strSqlLog + ´AND fantasia =´ + #39 + (ValorNome.Text) + 39 ;
strSqlLog := strSqlLog + ´AND senha =´ + 39 + (ValorSenha.Text) + 39 ;

menuPrin.QueryLogin.Close;
menuPrin.QueryLogin.SQL.Clear;
menuPrin.QueryLogin.SQL.Add(strSqlLog);
menuPrin.QueryLogin.Open;

if not menuPrin.QueryLogin.IsEmpty then
begin
menuPrin.StatusBar1.Panels[2].Text := ´ ´+´Usuário: ´+ login.ValorNome.Text+´ - ´+menuPrin.QueryLogin.FieldByName(´dpto´).AsString;
end
else
begin
mensagem := ´Nome ou senha do usuário inválido.´ + #13 + 13 + ´Se você esqueceu sua senha, consulte ´ + 13 + ´ o administrador do sistema.´;
Application.MessageBox(Pchar(mensagem), ´Login não autorizado´,mb_Ok+mb_IconError);
ValorSenha.Text := ´´;
ValorSenha.SetFocus;
ModalResult := mrNone;
end;
end;

Estou usando um SQLQuery no menuPrin com a expressão:
strSqlLog := ´SELECT * FROM usuario, perfil WHERE usuario.nivel = perfil.id´;

Alquém pode me ajudar ???? :oops:


Bruno Belchior
   - 06 dez 2005

#Código

strSqlLog := Format(´select * from USUARIO as U join PERFIL as P on U.nivel = P.id where Fantasia = ¬s and Senha =¬s´,  [QuotedStr(ValorNome.Text), QuotedStr(ValorSenha.Text)]);
Coloquen um Break point nessas linhas e pegue o valor da variável e veja o erro de SQL no seu banco e dados...


Wiltonfenix
   - 06 dez 2005

Faça algumas mudanças no SQL:

#Código

strSqlLog := ´SELECT * FROM usuario, perfil WHERE usuario.nivel = perfil.id´; 
strSqlLog := strSqlLog + ´ AND fantasia = "´+ValorNome.Text+´"´ ;
strSqlLog := strSqlLog + ´AND senha = "´+ValorSenha.Text+´"´;



Wiltonfenix
   - 06 dez 2005

#Código

strSqlLog := ´SELECT * FROM usuario, perfil WHERE usuario.nivel = perfil.id´; 
strSqlLog := strSqlLog + ´ AND fantasia = "´+ValorNome.Text+´"´ ;
strSqlLog := strSqlLog + ´ AND senha = "´+ValorSenha.Text+´"´;



Lb9
   - 06 dez 2005

Wilton valeu pela dica, mas com este código o erro mudou para:

SQL Error Code = -206
Column Unknown
A´.

Este A é a senha q coloquei no banco para teste.


Lb9
   - 06 dez 2005

A senha não é o conteúdo da coluna fantasia


Bruno Belchior
   - 07 dez 2005

Qual o Banco de Dados afinal?


Lb9
   - 07 dez 2005

Nooooossa amigo desculpe, é o Interbase 6.5.


Xtreme
   - 07 dez 2005

tenta assim

#Código

strSqlLog := ´ SELECT * FROM usuario, perfil WHERE usuario.nivel = perfil.id ´;
strSqlLog := strSqlLog + ´ AND fantasia = ´+quotedstr(ValorNome.Text);
strSqlLog := strSqlLog + ´ AND senha = ´+quotedstr(ValorSenha.Text);



Bruno Belchior
   - 07 dez 2005


Citação:
#Código

strSqlLog := Format(´select * from USUARIO as U join PERFIL as P on U.nivel = P.id where Fantasia = ¬s and Senha =¬s´,  [QuotedStr(ValorNome.Text), QuotedStr(ValorSenha.Text)]);
Coloquen um Break point nessas linhas e pegue o valor da variável e veja o erro de SQL no seu banco e dados...Como eu disse, coloque um BreakPoint e pegue o valor da variável strSqlLog, depois jogue no IBConsole e verá exatamente onde ocorreu o erro, apesar de acreditar q o SQL acima está correto...


Lb9
   - 07 dez 2005


Citação:
tenta assim

#Código

strSqlLog := ´ SELECT * FROM usuario, perfil WHERE usuario.nivel = perfil.id ´;
strSqlLog := strSqlLog + ´ AND fantasia = ´+quotedstr(ValorNome.Text);
strSqlLog := strSqlLog + ´ AND senha = ´+quotedstr(ValorSenha.Text);


Pessoal muito obrigado a todos que contribuiram. Essa foi a solução do problema.

Lucas


Lb9
   - 07 dez 2005

Apesar de ter o problema solucionado, gostaria de saber qual a função desse ´quotedstr´ antes de carregar os dados do usuário.

Alguém pode explicar, assim fica uma solução tipo:

´Mata a cobra e mostra o pau´. :lol:

Obrigado mais uma vez.


Bruno Belchior
   - 08 dez 2005

QuotedStr coloca aspas em uma string, em vez de fazer aquela bagunça com strings, abrindo e fechando diversas aspas, basta usá-la...