Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Order by con parámetros (https://www.clubdelphi.com/foros/showthread.php?t=27885)

Carmelo Cash 02-12-2005 14:54:27

Order by con parámetros
 
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
Código Delphi [-]
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

espero te sea de ayuda
 
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.


La franja horaria es GMT +2. Ahora son las 06:27:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi