![]() |
Lookup y dbGrid
Amigo buenos días despues de buscar en todos los foros y en google no he podido encontrar la solución a mi problema.
Primero trabajo con delphi 7 y firebird 2.0, estoy trabajando con el componente TClientDataSet en el cual he creado un campo lookup todo me funciona bien, el problema que tengo es que la consulta que llena el Lookup es dinamica dependiendo de un campo que se seleccione se consultan los registros a mostrar en el lookup el problema radia es por ejemplo si en el primer registro que se selecciona un valor que no va a estar en el segundo registro, es decir en la consulta que se hace me pone el campo lookup en blanco del primer registro ya insertado. El programa graba bien la información, el problema es que el usuario puede creer que el campo lookup de campo anterior se ha borrado, espero haya sido claro. Espero me puedan dar una luz para solucionar este problema. |
Hola amigos alguien puede ayudarme?
|
Yo no lo he entendido, la verdad :confused:
|
Algunas dudas.
Cita:
Cita:
Cita:
Cita:
Te recomiendo las Guía de Estilo y la Guía alternativa del foro. Te sugiero también el uso de signos de puntuación. Saludos. Eduardo Laguna. |
Gracias por su ayuda repito mi problema, tengo un producto ejemplo gaseosa, el cual se vende por ejemplo en dos puntos almacen1, almacen2 y tengo otro producto ejemplo cerveza que solo se vende en almacen1.
Los valores almacen1 y almacen2 son los que se despliegan en el campo Lookup, cuando estoy llenando la DBGrid estoy en el primer registro llenando el valor de la gaseosa al seleccionar el punto me aparece almacen1 y almacen2, el usuario selecciona almacen2 cuando paso al segundo registro, cerveza la consulta se actualiza porque solo se vende en almacen1 el usuario solo selecciona almacen1, pero el problema es cuando pasa al tercer registro. Como la consulta que llena el lookup esta solo con el punto almacen2 el primer registro de la gaseosa queda en blanco. Espero sea mas claro. |
Me quedé igual.
Cuando dices: Cita:
Cita:
Con "llenando el valor de la gaseosa" te refieres al precio ($)? o a qué? en particular lo de "llenando". Cita:
Cita:
Eduardo Laguna |
Haciendo otro intento.
Supongo que lo que deseas es manejar las existencias de determinado producto en varios almacenes. Si es así, entonces lo que te sugiero es que manejes un Query con tu catálogo de productos y lo muestres en el componente que quieras, un TDBListBox es bueno. Cuando selecciones algún elemento (producto) de éste TDBListBox entonces haces "otro" Query a la DB (no al ClientDataSet) para saber en qué almacenes se encuentra tu producto y lo muestras en otro TDBListBox. Ahora sí, ya puedes agregar los datos de tu producto y el almacén seleccionado al ClientDataSet. En resumen:
Eduardo Laguna |
La verdad no se ya como explicar, el problema no es de lógica de programación ni de relación de tablas el problemas es del campo lookup que se relaciona con la tabla que consulta las opciones que se va a listar, en el primer registro existen dos opciones almacen1 y almacen2 que son los datos para la gaseosa pero para el segundo registro como la cerveza solo se vende en almacen2 muestra almacen2 pero almacen1 ya no se muestra en el primer registro.
|
Cita:
|
Pues a mí me parece que efectivamente es un problema de lógica.
Si los datos de los almacenes los tomas tomando como parámetro el producto, es normal que cuando el parámetro sea un producto que solamente está en un almacén pues... solamente te muestre ese almacén. Por otra parte, si lo que tienes es un lookup dentro de un grid, es correcto que se actualice el lookup con cada registro y te muestre los mismos para todo el grid, es decir: Si en tu primer registro llenaste el lookup con las cadenas "Almacén1" y "Almacén2", y con el segundo registro solamente llenaste el lookup con "Almacén1", el último cambio que hayas realizado al lookup es el que se queda activo para todo el Grid. Espero haberte comprendido (créeme realmente lo estoy intentando) . ;-) Saludos. Eduardo Laguna |
Señor laguna gracias por tu ayuda
Cita:
|
Cita:
Pues el uso de controles dentro del Grid... así funcionan, me parece que no hay mucho que hacer. Por otra parte, si el lookup lo estás llenando de forma dinámica, cada que vez que actualizas la consulta, por lógica actualizas el contenido del lookup y por ende "muy probablemente" los datos no siempre serán válidos para cada uno de tus registros. Como alternativa se me ocurre (si es que los datos de almacén son sólo de consulta), que dejes el campo con tu catálogo de almacenes con todos los conceptos (Almacen1, Almacén2, ..., AlmacénX) y que los datos de almacén que le correspondan a cada artículo los coloques en un tercer control dentro del grid (por ejemplo un memo en la DB y un TText en el Grid), para que cada que cambies de registro no se actualicen los datos para todos. Saludos. Eduardo Laguna. |
Creo que debes utilizar un campo calculado para evaluar si el LookUp te devuelve algo o no, en caso de que devuelva datos dejas los datos que devuelva y en caso contrario por ejemplo lo rellenas con <<< No hay movimientos>>> o lo que te convenga.
Situación los Lookup los usamos pero no los mostramos en la rejilla, esto lo hacemos por medio de campos calculados que actuaran evaluando como dije antes si hay que dejar el contenido extraido por el LookUp si lo hay o un texto personalizado. Un Saludo. |
La franja horaria es GMT +2. Ahora son las 10:30:09. |
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