Array
(
)

Clausula Where com problema ?

Naelson
   - 27 mar 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


Paullsoftware
   - 27 mar 2006

por que voce não substitui#Código

Query1.Sql.Add(´Where Notificacao.OficioNum like ´+´´´´+´¬´+edit1.text+´¬´+´´´´); 
Query1.Sql.Add(´AND Notificacao.OficioAno like ´+´´´´+´¬´+edit2.text+´¬´+´´´´);

por#Código
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:


Paulocesar1301
   - 27 mar 2006

Para evitar problemas com aspas use:

#Código


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



Aroldo Zanela
   - 27 mar 2006

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.


Naelson
   - 27 mar 2006

Olá de novo,

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

Query1: Parametro ´Param1´ não encontrado

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;


Paullsoftware
   - 27 mar 2006

fiz uns teste asim e funcionou perfeitamente, acho que#Código


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:
#Código
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:
#Código
Query1.Params[0]AsString := Chr(39) + ´¬´ + Edit1.text + ´¬´ + Chr(39); 
Query1.Params.[1].AsString := Chr(39) + ´¬´ + Edit2.text + ´¬´ + Chr(39);
que é a mesma coisa!
você pode até substituir o like por starting with assim:
#Código

Query1.Sql.Add(´ Where Notificacao.OficioNum starting with :Param1 ´);
Query1.Sql.Add(´ AND Notificacao.OficioNum starting with :Param2 ´);
Query1.Params[0]AsString := Edit1.text;
Query1.Params.[1].AsString := Edit2.text;
espero ter ajudado!