FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Seleccion multiple para montar query
Hola a tod@s,
estoy atascado dándole vueltas a este tema pero no tengo nada claro como solventarlo y que sea ágil, por lo que os pido ayuda nuevamente sobre ideas o procesos que se os ocurran.... En un grid (asociado a un ClientDataSet) tengo un campo temporal "seleccionado" para que el usuario escoja la tienda (1.200 registros) sobre los que lanzar una segunda qry que realiza cálculos, hasta aquí todo bien. El problema lo tengo a la hora de cómo montar el segundo qry en función de las tiendas que se hayan seleccionado. Hasta ahora estaba pensando en recorrer el cdsTDAS y en función del campo "seleccionado" (boolean) ir guardando el codigo de la tienda para luego montar la qry con las tiendas seleccionadas, algo así :
pero aquí tengo algunas dudas, 1.- se podría montar un query como el siguiente o habría limitaciones ?? :
2.- cómo puedo eliminar el último "', or '" de la qry que voy montando?? 3.- no me parece la mejor consulta del mundo pero no se me ocurre o conozco otra forma de optimizarla. no se si me he explicado correctamente, agradecería vuestra ayuda, se admiten propuestas Saludos y Gracias |
#2
|
||||
|
||||
el código de arriba está mal, sorry por no depurarlo, el que funciona correctamente es :
lanza la consulta correctamente y no tarda mucho la verdad es que me ha sorprendido.... las dudas 1 y 2 ya están resueltas pero sigo teniendo la duda de si consideráis que es la mejor forma de hacerlo. gracias y saludos |
#3
|
||||
|
||||
Opcion 1:
Si el campo tmp_select no es temporal (está en la tabla), podrías hacer algo asi: - Marcas la tabla de selección - Luego haces este select:
En principio no tiene límite de cuantas tiendas están seleccionadas Opcion 2: También puedes generar el sql, de una forma parecida a la que ya haces:
Deberás probar los límites de la base de datos que utilices. No se si te permitirá hacer un sql muy largo o si te permitirá tantos "or" , si seleccionas todas las tiendas. |
#4
|
||||
|
||||
Te sugiero un pequeño cambio que puede que te facilite las cosas.
Incluye una opción para que lo que tú selecciones lo incluya o excluya. Claro, la generación de la select será diferente en cada caso. Pienso que un usuario que tenga que seleccionar de esa lista, una de dos. O selecciona todas o sólamente un grupo. De esta manera seguramente la select te saldrá más corta. Aunque ya te digo, que el usuario seleccione entre 1200 registros, puede ser un infierno. Concretamente yo, si una lista tiene más de 30 registros, soy incapaz de hacer nada con ella. Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#5
|
||||
|
||||
gracias duilioisola y [fjcg02] por las respuestas,
lamentablemente el campo "seleccionado" es un temporal en el ClientDataSet. El proceso es el siguiente : 1.- tienen una ventana de selección con 3 dbgrid dónde se agrupan esos registros en función de la zona de venta, director de venta y tienda. Pero no puedo utilizar esas agrupaciones de zona de venta o director de venta ya que en la tabla de partes no se conserva esa relación. 2.- la selección de las tiendas puede ser en función de varios criterios, o bien por los agrupamientos del punto 1 o bien seleccionándolas de forma aleatoria manualmente por lo que no me queda otra que recorrer la tabla de tiendas para saber cuáles han seleccionado. duilioisola, respecto a esa qry, no se me había ocurrido pasarle todos valores en una sola validación como indicas, eso debo probarlo hasta ahora está funcionando con la qry que dije al principio (la de tantos "or ..."). sigo probando y os cuento, pero si veis algo que se pueda mejorar no dudéis en decirlo Saludos |
#6
|
||||
|
||||
Si quieres seguir con los OR yo tuve un problema parecido hace poco, lo solucioné usando una cadena, que era la condición autogenerada, e incrustandola en el SQL.
Y con respecto a la multiselección, por qué no haces un Array dinámico en el evento que sea necesario (OnSelectRow quizá? no tengo el delphi delante para mirar xD) con los registros que selecciones, luego es solo hacer un bucle for. |
#7
|
||||
|
||||
gracias eflosten por la respuesta,
muestro el proceso completo para que se entienda mejor, un código vale más que mil palabras, sobre todo si son mías este es el resultado de una form modal dónde se hace la selección de las tiendas :
esta es la llamada a mostrar la form modal de selección de las tiendas y la cadena completa del qry con los where :
lanzo el qry de cálculos :
haciendo pruebas he seleccionado las 1.200 tiendas y el qry de resultados ha tardado menos de 4 segundos en calcular los datos de los partes (150 registros ahora mismo), teniendo en cuenta que es un mysql remoto vía adsl... como lo véis ?? lo que me da miedo es el día que la tabla de los partes tenga miles de registros y seleccionen todas las tiendas.... se admiten sugerencias |
#8
|
||||
|
||||
Se me ocurre una tercera solución.
- Crea una tabla que contenga el código de las tiendas - Muestras el Grid y dejas que el usuario seleccione las que desee. - Recorre el grid e inserta las seleccionadas en la tabla. - Luego puedes hacer un join o un select como el que te he mencionado más arriba.
|
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
seleccion multiple | cyber_zero | Varios | 2 | 26-06-2008 17:22:33 |
Selección Múltiple de Items en un ListView | Rolo | Varios | 6 | 31-08-2007 21:28:58 |
Selección multiple con TCheckBox | Nelly | Varios | 1 | 09-08-2007 00:28:06 |
selección múltiple en dbgrid | davidgaldo | Conexión con bases de datos | 2 | 16-04-2004 15:15:04 |
|