Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Ordenar un query por parametros (https://www.clubdelphi.com/foros/showthread.php?t=8284)

jzginez 16-03-2004 18:45:20

Ordenar un query por parametros
 
Hola amigos espero me puedan decir si sí se puede hacer lo siguiente o estoy fumando algo raro.

tengo el query siguiente.

Select Matricula, Nombre, Grupo, Reinscrip
from alumnos
Where Reinscrip = 'S'
Order by Matricula

Con lo cual obtengo un listado general de alumnos inscritos y el grupo al que pertenecen, pero para otro listado necesito exactamente el mismo query pero ordenado por grupo y matricula:

Select Matricula, Nombre, Grupo, Reinscrip
from alumnos
Where Reinscrip = 'S'
Order by Grupo, Matricula

Lo que actualmente hago es que en tiempo de ejecución reescribo la sentencia sql.

viendo el uso de parametros se me ocurio cambiar mis consultas a

Select Matricula, Nombre, Grupo, Reinscrip
from alumnos
Where Reinscrip = 'S'
Order by :Campo1, :Campo2

Y ahora solo mandar el parametro con el nombre del campo por el que quiero ordenar

query1.active:= False;
query1.parameters.parameterbyname('Campo1').value:= 'Grupo';
query1.parameters.parameterbyname('Campo2').value:= 'Matricula';
query1.active:= True;

al ejecutar la aplicación el query el query si se activa pero no esta ordenado, por eso pregunto a todos ustedes expertos :D, realmente esto no se puede hacer o como podria hacerlo.

gracias

__cadetill 16-03-2004 20:56:02

Cita:

Empezado por jzginez
al ejecutar la aplicación el query el query si se activa pero no esta ordenado, por eso pregunto a todos ustedes expertos :D, realmente esto no se puede hacer o como podria hacerlo.

Yo lo he probado y a mi ni se me activa. :confused:

Yo te aconsejaría la creación dinámica de toda la sentencia SQL

Código:

Query.SQL.Clear;
Query.SQL.Add('select .....');
...
Query.SQL.Add('Order By ......');
Query.Open;


jachguate 16-03-2004 21:49:22

No necesariamente tenes que reconstruir toda la sentencia SQL... simplemente podes sustituir la línea del order by... pero no con parámetros...

Hasta luego.

;)

roman 16-03-2004 22:12:27

Cuando leí este mensaje hubiera jurado que me iba a pasar como a Cadetill y que ni siquiera abriría la consulta. Curiosamente hice la prueba con lo primero que tenía a mano: Zeos y MySql y a menos que ya vea doble, sí funcionó además de activarse.

Ya algún día veré por qué funciona lo que no debería de funcionar :rolleyes:

// Saludos

__cadetill 16-03-2004 22:37:15

Cita:

Empezado por roman
Curiosamente hice la prueba con lo primero que tenía a mano: Zeos y MySql y a menos que ya vea doble, sí funcionó además de activarse.

Bueno, cierto, no he dicho con qué he hecho la prueba: BDE + Paradox (lo que primero tenía a mano :D)

jachguate 16-03-2004 22:56:10

Creo que dependerá del motor de base de datos que se use...

Sorprendente y nada estándar, pero muy funcional característica de MySQL. :eek:

roman 16-03-2004 22:58:29

Cita:

Empezado por jachguate
Sorprendente y nada estándar, pero muy funcional característica de MySQL. :eek:

No estaría tan seguro de que MySql sea el causante de tal bondad. Apostaría más por el lado de Zeos.

Si lo primero que alguien tiene a la mano es Zeos e Interbase podría hacer la prueba e informarnos.

// Saludos

roman 16-03-2004 23:22:29

Curioseando un poco por el código de Zeos me parece entender que si no se especifica el valor de un parámetro por defecto pone NULL y ya verificado MySql acepta consultas con

ORDER BY campo, NULL

¿Esto último es estandard?

// Saludos

marcoszorrilla 16-03-2004 23:33:22

Una solución menos elegante pero que funcionaría en cualquier sistema sería utilizar una sentencia If con una variable:
Código:


Select Matricula, Nombre, Grupo, Reinscrip
from alumnos
Where Reinscrip = 'S'

if lUnCampo = True then
Order by Matricula
else
Order by Grupo, Matricula;

MiQuery.Open;

Un Saludo.

jachguate 17-03-2004 00:12:17

Cita:

Empezado por roman
¿Esto último es estandard?

Si es estándar... dado que NULL es un valor "ordenable".... es como si le dijeras OrderBy 'ConstanteCadena'..

Al final de cuentas, cualquier procesador de SQL simplemente no hará ninguna ordenación por ese criterio...

Hasta luego.

;)

peccatum 19-10-2007 17:07:33

Cita:

Empezado por jachguate (Mensaje 34322)
No necesariamente tenes que reconstruir toda la sentencia SQL... simplemente podes sustituir la línea del order by... pero no con parámetros...

Hasta luego.

;)

como se hace para sustituir solo la linea que dice order by?

saludos...

jachguate 30-10-2007 00:18:02

Por ejemplo, suponiendo que la línea que dice "order by" es la séptima del query...

Código Delphi [-]
  if cbPorNombre.Checked then
    query1.sql[6] := ' order by nombre'
  else
    query1.sql[6] := 'order by codigo';

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 04:44:17.

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