Fórum Consulta SQL SOCORRO! #171438
25/07/2003
0
Estou montando uma consulta a vários campos de uma tabela utilizando o seguinte código:
var
pSQL: string;
pWHERE: string;
begin
dm.qProposicoes.Active:=false;
dm.qProposicoes.SQL.Clear;
pSQL:=´SELECT * FROM TAB_Proposicao´;
if editCodigop.Text <> ´´ then
pWHERE:=´WHERE cod_prop like ¬´+ editCodigop.Text+´¬´;
if editAnop.Text <> ´´ then
pWHERE:= pWHERE + ´AND ano =´+ editAnop.Text +´´;
if editTipostcp.Text <> ´´ then
pWHERE:=pWHERE + ´AND tipo_sol like¬´+ editTipostcp.Text +´¬´;
if editRespp.Text <> ´´ then
pWHERE:=pWHERE + ´AND responsavel like ¬´+ editRespp.Text +´¬´;
if editSituacaop.Text <> ´´ then
pWHERE:=pWHERE + ´AND situacao like ¬´+ editSituacaop.Text +´¬´;
if editLocalp.text <> ´´ then
pWHERE:=pWHERE + ´AND local like ¬´ + editLocalp.Text +´¬´;
if editEmentap.Text <> ´´ then
pWHERE:=pWHERE + ´AND ementa_prop like ¬´ + editEmentap.Text +´¬´;
dm.qProposicoes.SQL.Add(´SELECT * FROM TAB_Proposicao´+pWHERE);
dm.qProposicoes.Active:=true;
DBGrid1.DataSource:=dm.dsProposicoes;
Quando não preencho nenhuma edit a consulta me retorna todos os registros da tabela, mas quando preencho alguma recebo a seguinte mensagem de erro:
Project Convites.exe raised exception class with message´ invalid use of keyword.
Token: like
O que estou fazendo de errado?
Obrigado
Sheudas
Curtir tópico
+ 0Posts
25/07/2003
Carnette
pSQL:=´SELECT * FROM TAB_Proposicao´; <--- Original
\/---espaço
pSQL:=´SELECT * FROM TAB_Proposicao ´;
Gostei + 0
25/07/2003
Motta
pWHERE:=pWHERE + ´AND local like ¬´ + quotedstr(editLocalp.Text) +´¬´; // <<===
Gostei + 0
25/07/2003
Okama
Consultas dinâmicas devem estar preparadas para qualquer parâmetro informado. Veja no código acima, se ´editCodigop´ for preenchido é adicionado uma consulta iniciando com ´where´, se não for preenchido, o ´where´ é perdido e a consulta fica +/- assim:
[b:2ce3b33109]´SELECT * FROM TAB_Proposicao AND ano = 2003´[/b:2ce3b33109]
Outro problema é o uso de aspas e espaços. A primeira consulta não dá espaço antes do ´Where´. Deve ficar assim:
[b:2ce3b33109]´SELECT * FROM TAB_ProposicaoWHERE cod_prop like ....´[/b:2ce3b33109]
Para as aspas use [b:2ce3b33109]QuotedStr( Trim( editCodigop ) );[/b:2ce3b33109]
Se o ´LIKE´ está dando erro substitua por ´=´ .
Antes de executar o código, dê uma olhada como ficou a consulta:
dm.qProposicoes.SQL.Add(´SELECT * FROM TAB_Proposicao´+pWHERE);
[b:2ce3b33109]Showmessage( dm.qProposicoes.SQLText );[/b:2ce3b33109]dm.qProposicoes.Active:=true;
DBGrid1.DataSource:=dm.dsProposicoes;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)