![]() |
consulta valores no consecutivos mismo campo
Buenas, necesito hacer una consulta masiva dentro del mismo campo de una tabla en sql.
El ejemplo que quería poner para entendernos sería, que la tabla llamada 'MOTIVOS' tiene dos campos: año, HechoRelevante. Quiero seleccionar 20 años de las 100 del siglo XX que yo elija no tienen que ser consecutivos, y sacar el hecho relevante de ese año elegido. Al no ser consecutivos se complica y tengo que buscar uno a uno, podía usar un ListBox que contenga esos años que yo selecciono pero tendría que usar lines1, lines2,lines3 o bien edit como pongo en el ejemplo.
La pregunta es cómo puedo usar la línea SQL, para que no se haga tan larga, he buscado en internet y en el foro y no he encontrado ningún ejemplo que me dé respuesta. |
Para esto se usa la cláusula:
|
Propuesta
Puede ser -como te lo menciona mamcx-, pero con una variante/parámetro
Lo cual el parámetro "anios", contendría una cadena como la que sigue Cita:
Ejemplo:
Y luego ejecutaría el procedimiento
Algo mas o menos asi lo haría, no tengo a la mano Delphi para probar, pero podrías intentarlo y nos dices si mas o menos te sirvio. Saludos. |
En principio
Me da error y no puedo ejecutarlo Por otro lado
yo la última línea la he modificado directamente a:
y me tomaría (19251955) como si fuera un número global. He intentado los siguientes ejemplos:
Ninguno de los de arriba funciona, El único que funciona de momento, pero la cadena sería muy grande para 15 ó 20 años.
|
Lo que te escribió roman esta bien, pero veo que tu campo es texto porque dices que te funciono esto:
Al poner "Quotedstr" le es estas diciendo a delphi que le pongas comillas simples, entonces prueba en tu consulta así:
|
Una tercera opción es tener una segunda tabla donde se rellenen los años seleccionados.
Código:
MOTIVOS
De esta forma puede seleccionar solo un año o varios o todos... |
Cita:
Eso debería ser un integer... |
Buenas de nuevo, y gracias en serio.
La siguiente secuencia funciona BIEN que es la que MRoman, por un lapsus dije no.
Pero el texto completo es el siguiente que no lo puse por simplificar:
Con esto puedo meter los datos filtrados en un dbgrid, stringGrid, Rave Reports, etc etc sin problemas pero al estar en unas comillas sólo puedo elegir los años (1925, 1955, etc.etc) en modo diseño y no en modo ejecucion, lo que necesitaría es meter los años en un Listbox, en una Variable u otro contenedor, y de ahí diseñar el Query para que sólo salgan los años que necesito. |
Cita:
Ahora, creo que el componente del IBQuery, quedaría asi:
Para cuando se ejecute las instrucciones anteriores, ya deberá traer datos la variable ANIOS2: Código:
(1973,1910,1917) Te envío un ejemplo de como lo uso
Aqui lleno la variable "cPromotor" con las claves de algunos promotores que el usuario ha seleccionado:
Usé la sentencia CASE en programación para seleccionar la opción 0,1 o 2 de un combo que el usuario selecciona para saber que tipo de procesamiento se va a realizar, estos serían los ITEMS del combo: Código:
Todas las lecherias todos los promotores Saludos. |
En relación a:
Cita:
era por usar un lenguaje natural. Lo cierto es que como he dicho funciona:
y no
He intentando 200 maneras pero no lo consigo, He intentando el procedimiento que me pones:
Pero no sé ejecutarlo, Gracias, mañana intentaré con la mente más fresca pasar una variable a parámetro a ver. |
Eso de arriba debe ser así y me comentas como te fue:
Lo demás es hacer un bucle para coger los años, Roman ya te dio un ejemplo. |
Estimado GINMARMENOR.
Le propongo otra opción...
Aquí solo debería generar la lista de años junto con un separador...Asumo que el año es de 4 digitos... Saludos cordiales |
Cita:
Saludos. |
En este código deberás hacer un cambio:
Y otra cosa, mejor mandános tu código para ver como le estas haciendo...y aqui entre todos te ayudamos a resolverlo de la mejor manera. Saludos. |
Yo lo que veo mal es el procedimiento que utilizas para concatenar los valores.
Esto trabaja sobre una variable local, la cual se pierde después de terminar el procedimiento. Incluso si fuera una variable global "," te dejaría una coma al final. Deberías hacerlo así:
|
Perdonar la tardanza, pero estaba saturado ayer.
He probado las soluciones que me mandáis y FUNCIONAN, BIENNNNNNNN.
y Lógicamente también así:
Como me has pedido MRoman, mi código era meter en un StringGrid ó en un QuickReport, Rave Report, etc etc, sólo aquellos años que yo eligiera aleatoriamente, sin tener que ser todos los que son menores ó mayores que tal año, que eso sería más fácil. Por lo que mi código quedaría así:
Bueno esto sería acabado el código entero simplificado a lo máximo, he utilizado para rellenar y sacar los datos finales un striggrid He utilizado un Memo1, en vez de Edit, por comodidad y el Memo me deja introducir los años más cómodamente, He utilizado tres Anios1,Anios2,Anios3, donde el primero cojo, la primera línea del Memo el Segundo cojo Anios1 + el Acumulado del Anios2, (1925,1955,1920,) y se quedaría así con una coma inoportuna ahí. y Tercero cojo el Anios 2 entero, y como el Anios2 siempre acababa en ',' o siempre empezaba ',' no había forma de quitarla pues le añadido en el anios3 un '0' y quedaría así (1925,1955,1920,0) el 0 nunca va representar ningún año y no me altera en nada el resultado y así no me da error. Lo mismo se puede hacer más simple, estoy abierto a aprender, y reducirlo al máximo, vosotros sois mucho mas expertos que yo. Así que no me queda más que agredecer, el interés y las soluciones que me habéis dado, con esto se me ha abierto un abanico muy grande para escoger dentro de un campo de forma aleatoria. Muchísimas Gracias. |
Estimado Colega, si está utilizando un TMemo, le sugiero el siguiente cambio...
Saludos cordiales |
Ok, va cojonudo, ahorramos bucle y dos variables.
Ok, He utilizado Memo1, por rapidez y sencillez, no sé si habrá otro componente más apropiado. Gracias. |
La franja horaria es GMT +2. Ahora son las 11:14:27. |
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