Fórum Consulta SQL SOCORRO! #171438

25/07/2003

0

Amigos,

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

Sheudas

Responder

Posts

25/07/2003

Carnette

Experimenta colocar um espaço

pSQL:=´SELECT * FROM TAB_Proposicao´; <--- Original


\/---espaço
pSQL:=´SELECT * FROM TAB_Proposicao ´;


Responder

Gostei + 0

25/07/2003

Motta

nos campos alfa faça


pWHERE:=pWHERE + ´AND local like ¬´ + quotedstr(editLocalp.Text) +´¬´; // <<===


Responder

Gostei + 0

25/07/2003

Okama

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 +´¬´; dm.qProposicoes.SQL.Add(´SELECT * FROM TAB_Proposicao´+pWHERE); dm.qProposicoes.Active:=true; DBGrid1.DataSource:=dm.dsProposicoes;


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;


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar