Clausula Where com problema ?

27/03/2006

Olá a todos.

O que pode estar errado com esta query?
Recebo esta mensagem ao executar.

---------------------------
Consfrm
---------------------------
Invalid use of keyword.

Token: Where

Line Number: 6.
---------------------------
OK
---------------------------


Query1.Sql.Add(´SELECT Notificacao.OficioNum, Notificacao.OficioAno, Notificacao.OrgaoDescricao, Notificacao.Cargo, Notificacao.Titulo, Notificacao.SubTitulo, Notificacao.Notificado, Oficio.Processo, Oficio.Nome´);
Query1.Sql.Add(´FROM ´Notificacao.DB´ Notificacao´);
Query1.Sql.Add(´ RIGHT OUTER JOIN ´Oficio.DB´ Oficio´);
Query1.Sql.Add(´ ON (Notificacao.OficioNum = Oficio.OficioNum´);
Query1.Sql.Add(´ AND (Notificacao.OficioAno = Oficio.OficioAno´);
Query1.Sql.Add(´Where Notificacao.OficioNum like ´+´´´´+´¬´+edit1.text+´¬´+´´´´);
Query1.Sql.Add(´AND Notificacao.OficioAno like ´+´´´´+´¬´+edit2.text+´¬´+´´´´);


um abraço a todos

Naelson


Naelson

Respostas

27/03/2006

Paullsoftware

por que voce não substitui
Query1.Sql.Add(´Where Notificacao.OficioNum like ´+´´´´+´¬´+edit1.text+´¬´+´´´´); 
Query1.Sql.Add(´AND Notificacao.OficioAno like ´+´´´´+´¬´+edit2.text+´¬´+´´´´); 

por
Query1.Sql.Add(´Where Notificacao.OficioNum like :Param1´); 
Query1.Sql.Add(´AND Notificacao.OficioAno like :Param2´); 
Query1.ParamByName(´Param1´).AsString := Chr(39) + ´¬´ + Edit1.text + ´¬´ + Chr(39);
Query1.ParamByName(´Param2´).AsString := Chr(39) + ´¬´ + Edit2.text + ´¬´ + Chr(39);
....

e faz um teste! :wink:


Responder Citar

27/03/2006

Paulocesar1301

Para evitar problemas com aspas use:

QuotedStr(´¬´ + Trim(edit2.text) + ´¬´)



Responder Citar

27/03/2006

Aroldo Zanela

Colega,

Use QuotedStr também para o nomes das tabelas entre aspas, ou então remova-as (somente dos nomes de tabelas) e feche todos os parenteses dentro da instrução SQL.


Responder Citar

27/03/2006

Naelson

Olá de novo,

Fiz os acertos, beleza, resolveu o problema do ´Where´, agora é com parametros, veja:

[color=red:bb16e583f7]Query1: Parametro ´Param1´ não encontrado[/color:bb16e583f7]

Como eu faço para passar parametros para a Query, pois pelo Object Inspector não consigo.

Podem me ajudar novamente.

um abraço

Naelson


Query1.Close;
Query1.SQL.Clear;
Query1.Sql.Add(´SELECT Notificacao.OficioNum, Notificacao.OficioAno, Notificacao.OrgaoDescricao, Notificacao.Cargo, Notificacao.Titulo, Notificacao.SubTitulo, Notificacao.Notificado, Oficio.Processo, Oficio.Nome´);
Query1.Sql.Add(´FROM ´Notificacao.DB´ Notificacao´);
Query1.Sql.Add(´ INNER JOIN ´Oficio.DB´ Oficio´);
Query1.Sql.Add(´ ON (Notificacao.OficioNum = Oficio.OficioNum)´);
Query1.Sql.Add(´ AND (Notificacao.OficioAno = Oficio.OficioAno)´);
Query1.Params.ParamByName(´Param1´).AsString := Chr(39) + ´¬´ + Edit1.text + ´¬´ + Chr(39);
Query1.Params.ParamByName(´Param2´).AsString := Chr(39) + ´¬´ + Edit2.text + ´¬´ + Chr(39);
Query1.Sql.Add(´Where Notificacao.OficioNum like :Param1´);
Query1.Sql.Add(´AND Notificacao.OficioNum like :Param2´);
Query1.Open;


Responder Citar

27/03/2006

Paullsoftware

fiz uns teste asim e funcionou perfeitamente, acho que
Query1.Close; 
Query1.SQL.Clear; 
Query1.Sql.Add(´SELECT Notificacao.OficioNum, Notificacao.OficioAno, Notificacao.OrgaoDescricao, Notificacao.Cargo, Notificacao.Titulo, Notificacao.SubTitulo, Notificacao.Notificado, Oficio.Processo, Oficio.Nome´); 
Query1.Sql.Add(´FROM "Notificacao.DB" Notificacao´); 
Query1.Sql.Add(´ INNER JOIN "Oficio.DB" Oficio´); 
Query1.Sql.Add(´ ON (Notificacao.OficioNum = Oficio.OficioNum)´); 
Query1.Sql.Add(´ AND (Notificacao.OficioAno = Oficio.OficioAno)´); 
Query1.Params.ParamByName(´Param1´).AsString := Chr(39) + ´¬´ + Edit1.text + ´¬´ + Chr(39); 
Query1.Params.ParamByName(´Param2´).AsString := Chr(39) + ´¬´ + Edit2.text + ´¬´ + Chr(39); 
Query1.Sql.Add(´Where Notificacao.OficioNum like :Param1´); 
Query1.Sql.Add(´AND Notificacao.OficioNum like :Param2´); 
Query1.Open;

deveria ser assim:
Query1.Close; 
Query1.SQL.Clear; 
Query1.Sql.Add(´SELECT Notificacao.OficioNum, Notificacao.OficioAno, Notificacao.OrgaoDescricao, Notificacao.Cargo, Notificacao.Titulo, Notificacao.SubTitulo, Notificacao.Notificado, Oficio.Processo, Oficio.Nome´); 
Query1.Sql.Add(´FROM "Notificacao.DB" Notificacao´); 
Query1.Sql.Add(´ INNER JOIN "Oficio.DB" Oficio´); 
Query1.Sql.Add(´ ON (Notificacao.OficioNum = Oficio.OficioNum)´); 
Query1.Sql.Add(´ AND (Notificacao.OficioAno = Oficio.OficioAno)´); 
Query1.Sql.Add(´Where Notificacao.OficioNum like :Param1´); 
Query1.Sql.Add(´AND Notificacao.OficioNum like :Param2´); 
Query1.Params.ParamByName(´Param1´).AsString := Chr(39) + ´¬´ + Edit1.text + ´¬´ + Chr(39); 
Query1.Params.ParamByName(´Param2´).AsString := Chr(39) + ´¬´ + Edit2.text + ´¬´ + Chr(39); 
Query1.Open;

ou então tente assim:
Query1.Params[0&93;AsString := Chr(39) + ´¬´ + Edit1.text + ´¬´ + Chr(39); 
Query1.Params.&91;1&93;.AsString := Chr(39) + ´¬´ + Edit2.text + ´¬´ + Chr(39); 
que é a mesma coisa!
você pode até substituir o like por starting with assim:
Query1.Sql.Add(´ Where Notificacao.OficioNum  starting with :Param1 ´); 
Query1.Sql.Add(´ AND Notificacao.OficioNum starting with :Param2 ´); 
Query1.Params&91;0&93;AsString :=  Edit1.text; 
Query1.Params.&91;1&93;.AsString := Edit2.text; 
espero ter ajudado!


Responder Citar