Fórum O que há de errado nessa query??? #164740

05/06/2003

0

QUERY3.Active:=FALSE;
QUERY3.CLOSE;
QUERY3.SQL.CLEAR;
QUERY3.SQL.ADD(´SELECT * FROM TBATIV WHERE DATA between :rdb1 and :rdb2 and executor= :RE order by :ORD1, :ORD2´);
QUERY3.ParamByName(´RDB1´).ASDate:=STRTODATE (ME1.TEXT);
QUERY3.PARAMBYNAME(´RDB2´).AsDate:=STRTODATE(ME2.TEXT);
QUERY3.PARAMBYNAME(´RE´).AsSTRING:=COMBOBOX1.TEXT;
QUERY3.PARAMBYNAME(´ORD1´).AsSTRING:=COMBOBOX2.TEXT;
QUERY3.PARAMBYNAME(´ORD2´).AsSTRING:=COMBOBOX3.TEXT;
QUERY3.Open;

Aí qdo eu a executo aparece o erro:
---------------------------
Debugger Exception Notification
---------------------------
Project ativ.exe raised exception class EDBEngineError with message ´Invalid use of keyword.
Token: ?,
Line Number: 1´. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

O que é que está errado aí???
Vlw!


L!nk!n

L!nk!n

Responder

Posts

05/06/2003

Paulo

l!nk!, aparentemente está tudo ok, porem tente fazer diferente, não q esteja errado, mas vc sabe..
A primeira linha(Query3.Active := False) elimine esta. Deixando apartir do Query3.Close;
Depois no parametro RDB1 e RDB2 ao invés .AsDate, coloque .AsDateTime; Se não funcionar, com certeza não vai atrapalhar.
Depois faça duas orações, um jejum e torça para q funcione, porque creio eu q está tudo certo.


Responder

Gostei + 0

05/06/2003

L!nk!n

Valew Paulo, eu descobri o problema. A questão eh que eu não posso passar as instruções de um ORDER BY como parâmetro.
Então eu tenho que criar a instrução SQL dinamicamente. Ex.:

QUERY3.SQL.ADD(´SELECT * FROM TBATIV WHERE DATA between :rdb1 and :rdb2 and executor= :RE´);
QUERY3.SQL.ADD(´ORDER BY ´+COMBOBOX2.TEXT+´, ´ +COMBOBOX3.TEXT+´);


Isso funcionou!
Vlw!
Flw!


Responder

Gostei + 0

05/06/2003

Luc.morais

[quote=´l!nk!n´]
QUERY3.Active:=FALSE;
QUERY3.CLOSE;
QUERY3.SQL.CLEAR;
QUERY3.SQL.ADD(´SELECT * FROM TBATIV WHERE DATA between :rdb1 and :rdb2 and executor= :RE order by :ORD1, :ORD2´);
QUERY3.ParamByName(´RDB1´).ASDate:=STRTODATE (ME1.TEXT);
QUERY3.PARAMBYNAME(´RDB2´).AsDate:=STRTODATE(ME2.TEXT);
QUERY3.PARAMBYNAME(´RE´).AsSTRING:=COMBOBOX1.TEXT;
QUERY3.PARAMBYNAME(´ORD1´).AsSTRING:=COMBOBOX2.TEXT;
QUERY3.PARAMBYNAME(´ORD2´).AsSTRING:=COMBOBOX3.TEXT;
QUERY3.Open;

Aí qdo eu a executo aparece o erro:
---------------------------
Debugger Exception Notification
---------------------------
Project ativ.exe raised exception class EDBEngineError with message ´Invalid use of keyword.
Token: ?,
Line Number: 1´. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

O que é que está errado aí???
Vlw!



Vc não pode usar parâmetro no ´order by´. Tente montar seu sql sem usar o parâmetro no order by:

Exemplo:

QUERY3.CLOSE;
QUERY3.SQL.CLEAR;
QUERY3.SQL.ADD(´SELECT * FROM TBATIV WHERE DATA between :rdb1 and :rdb2 and executor= :RE order by ´ + COMBOBOX2.TEXT + ´, ´ + COMBOBOX3.TEXT);
QUERY3.ParamByName(´RDB1´).ASDate:=STRTODATE (ME1.TEXT);
QUERY3.PARAMBYNAME(´RDB2´).AsDate:=STRTODATE(ME2.TEXT);
QUERY3.PARAMBYNAME(´RE´).AsSTRING:=COMBOBOX1.TEXT;
QUERY3.Open;

Luciano


Responder

Gostei + 0

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

Aceitar