PDA

Ver la Versión Completa : Lookup y dbGrid


Vlady
14-02-2012, 16:13:26
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.

Vlady
15-02-2012, 15:42:10
Hola amigos alguien puede ayudarme?

Casimiro Notevi
15-02-2012, 15:54:50
Yo no lo he entendido, la verdad :confused:

elaguna
15-02-2012, 16:23:58
Algunas dudas.

TClientDataSet en el cual he creado un campo lookup ...¿"lookup" es un nuevo tipo de dato?

...dependiendo de un campo que se seleccione ...¿Se seleccione en donde?

...si en el primer registro que se selecciona un valor que no va a estar en el segundo registro...¿Primer registro?, ¿segundo registro?...de dónde?

...en la consulta que se hace me pone el campo lookup en blanco del primer registro ya insertado....?????

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.

Vlady
15-02-2012, 16:41:58
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.

elaguna
15-02-2012, 17:18:15
Me quedé igual.

Cuando dices:

...campo Lookup...
Supongo que te refieres a un "componente" Lookup y no a un "campo" de tu DB?

...cuando estoy llenando la DBGrid estoy en el primer registro llenando el valor de la gaseosa...
Estás en el "primer registro" de la consulta de los almacenes? o estás en el primer registro del ClientDataSet donde (supongo) estás escribiendo los datos de tu gaseosa.

Con "llenando el valor de la gaseosa" te refieres al precio ($)? o a qué? en particular lo de "llenando".

...al seleccionar el punto me aparece almacen1 y almacen2,...
Cuál "punto"?

...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...
En esta parte... no entendí nada.


Eduardo Laguna

elaguna
15-02-2012, 17:38:35
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:

2 Query's, uno para productos y otro para almacenes (éste último es el dinámico)
1 ClientDataSet para colocar los datos seleccionados y lo que quieras
Espero haberte entendido. Saludos.


Eduardo Laguna

Vlady
16-02-2012, 15:54:06
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.

Casimiro Notevi
16-02-2012, 16:19:11
La verdad no se ya como explicar

Ese es el problema, si no sabes explicarlo, ¿cómo quiéres que los demás lo entiendan? :confused:

elaguna
17-02-2012, 02:18:23
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

Vlady
17-02-2012, 15:41:05
Señor laguna gracias por tu ayuda

Pues a mí me parece que efectivamente es un problema de lógica.

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.



Aquí es donde me has comprendido, entonces si no es con un lookup como puedo hacer esto ya que lo debe hacer de forma dinamica para cada registro?

elaguna
17-02-2012, 21:01:06
Señor laguna gracias por tu ayuda



Aquí es donde me has comprendido, entonces si no es con un lookup como puedo hacer esto ya que lo debe hacer de forma dinamica para cada registro?


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.

marcoszorrilla
17-02-2012, 21:31:45
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.