Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-03-2004
Avatar de jzginez
jzginez jzginez is offline
Miembro
 
Registrado: sep 2003
Ubicación: Puebla, México
Posts: 247
Poder: 21
jzginez Va por buen camino
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 , realmente esto no se puede hacer o como podria hacerlo.

gracias
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México
Responder Con Cita
  #2  
Antiguo 16-03-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
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 , realmente esto no se puede hacer o como podria hacerlo.
Yo lo he probado y a mi ni se me activa.

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;
Responder Con Cita
  #3  
Antiguo 16-03-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
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.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #4  
Antiguo 16-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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

// Saludos
Responder Con Cita
  #5  
Antiguo 16-03-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
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 )
Responder Con Cita
  #6  
Antiguo 16-03-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Creo que dependerá del motor de base de datos que se use...

Sorprendente y nada estándar, pero muy funcional característica de MySQL.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #7  
Antiguo 16-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por jachguate
Sorprendente y nada estándar, pero muy funcional característica de MySQL.
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
Responder Con Cita
  #8  
Antiguo 16-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #9  
Antiguo 16-03-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #10  
Antiguo 17-03-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
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.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #11  
Antiguo 19-10-2007
Avatar de peccatum
peccatum peccatum is offline
Miembro
 
Registrado: oct 2005
Posts: 89
Poder: 19
peccatum Va por buen camino
Cita:
Empezado por jachguate Ver Mensaje
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...
Responder Con Cita
  #12  
Antiguo 30-10-2007
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
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.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:54:35.


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