PDA

Ver la Versión Completa : Order by con parámetros


Carmelo Cash
02-12-2005, 14:54:27
Hola Foro:

Necesito una ayudita:

Estoy utilizando Delphi 5.0 e InteBase.

Saben si se pueden utilizar parámetros en el "order by" de una consulta?

Estoy haciendo:

Select
Customer_code Codigo,
Customer_name Nombre
From Customer
Order by :RR


Luego defino el parámetro como Integer o String (para probar de las dos maneras, (Order by 2 u Order by Customer_name)

y Luego pruebo de las dos maneras

query2.CLOSE;
query2.parambyname('RR').ASINTEGER:=2;
query2.OPEN;

o...

query2.CLOSE;
query2.parambyname('RR').ASSTRING:='Customer_code';
query2.OPEN;

y de las dos maneras me aparece un error

*** Token Unknown *** :confused:

Saben que estoy haciendo mal?

Lo puedo resolver escribiendo la consulta en tiempo de ejecución, pero me parece más elegante utilizar los parámetros.

Desde ya muchas gracias por su atención.

vtdeleon
02-12-2005, 15:56:07
Saludos

Bueno es que la definicion de un orden no es Entero ni es una Cadena de caracteres.
(No estoy seguro, prueba con Variant, a ver a ver)

Lo que haria es
var
rSlq:String:
begin
rSql:='Select Customer_code Codigo,Customer_name Nombre From Customer '+
'Order by %s';
query2.CLOSE;
query2.Sql.Text:=Format(rSql,['Customer_code']);
query2.OPEN;
end;

Carmelo Cash
02-12-2005, 16:31:08
La solución propuesta por vtdeleon está buena, pero es otra manera de escribir la consulta en tiempo de ejecución. No estamos utilizando parámetros.

Probé definir el parametro como variant y el resultado fué el mismo error.

Gracias vtdeleon. :)

FOURIER
14-12-2005, 01:23:02
En El Order by sólo pueden ir variables de las tablas o valores de las consultas.... si lo que quieren es ustedes ordenar con respecto al campo que quieran, no hay inconveniente alguno en que hagan eso;

aunque podría ser
var
String SCampo;
DM.Q.SQL.Text:='Select Customer_code Codigo, Customer_name Nombre From Customer Order by ';
suponiendo que los campos lo tienes en un Combobox
Scampo:=Combobox.Text;
DM.Q.SQL.Text:=DM.Q.SQL.Txt+SCampo;
DM.Q.Open;
Si es un edit donde especificas el campo del orden
Scampo:=Edit.text.Text;
DM.Q.SQL.Text:=DM.Q.SQL.Txt+Edit.text;
DM.Q.Open;

espero te sea de ayuda

Lepe
14-12-2005, 14:01:48
El problema, según entiendo, es que al pasar un parámetro AsString, Delphi lo insertará entre comillas simples, por tanto, ya no es un token válido.

Con número enteros, no he hecho pruebas.

Aconsejo utilizar la forma de vtdeleon, desde mi punto de vista, es también elegante; sobre todo usando un archivo de constantes para los sqls (archivo de texto), e incluso separado de la base de datos, para que despues de instalar el programa, pueda cambiarse los sqls sin tener que recompilar el proyecto.

saludos.