FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Valor en celda de DBGrid según código en base de datos
Tengo un DBGrid donde despliego los pagos que ha hecho un cliente. Allí muestro datos como la fecha del pago, el monto y la forma de pago.
Para desplegarlo utilizo un TIBQuery con la siguiente consulta:
El tema es que en el campo PAGO_FORMAPAGO almaceno un caracter que me indica la forma de pago, donde: 0 indica un pago en efectivo 1 indica un pago por transferencia y así sucesivamente... Debido a lo ya explicado, en el DBGrid me aparece el caracter respectivo, pero yo quiero que me aparezca lo que representa. Tengo entendido que los DBGrid no proveen de ningún recurso para cambiar el valor en el momento de desplegarlo y por lo tanto todo cambio debe ser en la consulta. ¿O me equivoco? ¿Es posible hacer el cambio en el DataSource o más bien debo cambiar la consulta SQL? Sabría hacer la consulta si el significado de PAGO_FORMAPAGO está en otra tabla, y podría solucionarlo con algo así:
Pero, ¿cómo podría cambiar esa primera consulta SQL sin crear una tabla nueva? Nota: Utilizo Interbase 6.0 Gracias a todos de antemano....
__________________
Saludos, Gabo A menos que se indique lo contrario, el código estará hecho en C++Builder. |
#2
|
||||
|
||||
Una de las maneras para hacer lo que quieres es utilizar el evento OnGetText del campo FORMA_PAGO del DataSet en el cual vas a hacer la consulta.
No sé si tienes un DataSet para dicha consulta ? Pero si es así, puedes utilizar dicho evento que sería algo así como :
De esta manera en el DBGrid que utilizas sale el texto que defines ewn esta función. (En tiempo de diseño, no. Pero en tiempo de ejecución, si). Espero haberte ayudado.
__________________
Piensa siempre en positivo ! |
#3
|
||||
|
||||
Cita:
¡Y claro que eres una ayuda! Aunque no me contestes la pregunta directamente, me sirve para seguir familiarizándome con el resto de los controles y sus eventos.
__________________
Saludos, Gabo A menos que se indique lo contrario, el código estará hecho en C++Builder. |
#4
|
||||
|
||||
Perdón .... lo mismo es prácticamente utilizar el TIBDataSet que el TIBQuery.
No había sabido expresarme correctamente, y no me fijé detalladamente en tu exposición. Pues bien. El DBGrid lo tendrás asociado al TDataSource, y a su vez el DataSource lo tendrás asociado al TQuery. Correcto. hasta aquí. Lo que necesitas ahora es hacer doble click encima del elemento TQuery y ahí te aparecerá (en principio) una lista en blanco. De nuevo click derecho y añades todos los campos que te aparecen, que serán aquellos que has definido en tu consulta SQL. Siguiente paso. Sobre el campo FORMA_PAGO haz click, y en Object Inspector selecciona los eventos. Tendrás el evento OnGetText y ahí pones el código que te puse anteriormente. Y ya está. Con esto en tiempo de ejecución obtendrás el resultado esperado.
__________________
Piensa siempre en positivo ! |
#5
|
||||
|
||||
Tampoco ví la respuesta de Neftalí. Pero creo que lo más fácil e inmediato es lo que he detallado en mi respuesta anterior.
Yo al menos lo utilizo en innumerables ocasiones de dicha manera.
__________________
Piensa siempre en positivo ! |
#6
|
||||
|
||||
Funciona muy bien con ese sistema, no lo conocía.
Gracias gluglu!!! Gracias Neftalí!!!
__________________
Saludos, Gabo A menos que se indique lo contrario, el código estará hecho en C++Builder. |
#7
|
||||
|
||||
Creo que sí puedes conseguirlo directamente. Añade los campos al DataSet (Tabla/Query) y una vez añadidos revisa los eventos OnGetText y OnSetText del campo Forma de Pago.
Si no quieres hacerlo así puedes modificar la consulta hacer la JOIN y conseguir el campo que necesitas. Si lo llamas igual que el anterior (y el anterior lo quitas) seguramente no tendrás que modificar el dbGrid, ya que los campos serán los mismos. Por último, se me ocurre que puedes crear una vista. Para conseguir lo mismo que con la respuesta anterior. Que los campos de salida sean los mismos y así no tendrás que modificar el Grid. NOTA: Veo que se me adelantaron.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#8
|
||||
|
||||
Hola Neftalí, gracias por tu respuesta.
Cita:
Vale, pero esta solución sería creando una nueva tabla, ¿no? Eso si podría hacerlo, pero lo que me gustaría saber es como hacerlo sin crear la tabla...
__________________
Saludos, Gabo A menos que se indique lo contrario, el código estará hecho en C++Builder. |
#9
|
||||
|
||||
El Query o la Tabla derivan del TDataSet, por lo tanto sirven también. Actílvalos y haz un Click derecho para acceder a los Fields (FieldEditor); Desde ahí hay una opción para añadirlos todos.
Cita:
O el una tabla o como hemos comentado antes, en el DataSet. La otra opción sería usar CASE o IF en la consulta si los valores son pocos. De todas ellas me inclino por la de la tabla nueva (si es posible).
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#10
|
||||
|
||||
Cita:
Cita:
__________________
Saludos, Gabo A menos que se indique lo contrario, el código estará hecho en C++Builder. |
#11
|
||||
|
||||
Hola Gabo,
Para mi lo mas sensato es utilizar un ClientDataSet que contenga todos los campos de tu query y ademas le adiciono un campo internalCalc que sea el que se calcule en tiempo de ejecucion en se evento OnCalcFields ... asi vuelves independiente tus datos de la forma en la que los visualizas (Siempre existe la de crear una tabla con los correspondientes valores y hacer un join). Saludos |
#12
|
||||
|
||||
Cita:
Gracias por la sugerencia, aunque me sigue pareciendo mejor la idea de gluglu. No me implica agregar ningún otro componente y la encuentro más simple...
__________________
Saludos, Gabo A menos que se indique lo contrario, el código estará hecho en C++Builder. |
#13
|
||||
|
||||
Cuando te toque modificar un programa entero buscando el 0,1,2 etc.. modifcar fuentes,sqls, compilar, probar, rehacer instalador y llevar al cliente.... después nos contarás lo pesados que fuimos con la tablita
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#14
|
||||
|
||||
Cita:
Saludos |
#15
|
||||
|
||||
Hola!!
Perdón por la demora pero hemos estado con festivos por acá En general, prefiero usar tablas para esos menesteres, pero insisto en que hay casos en que no lo veo necesario, como el ejemplo mencionado del "Estado_civil". Aunque pase el tiempo no se va a crear ningún nuevo estado civil, por lo que aunque me toque recompilar mi código muchas veces más por n motivos, nunca haré una modificación en cuanto a eso.
__________________
Saludos, Gabo A menos que se indique lo contrario, el código estará hecho en C++Builder. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Obtener valor de una celda de un DBGrid | Albano | Conexión con bases de datos | 10 | 13-01-2006 17:53:26 |
Tomar el valor de una celda de un dbgrid | Petolansa | Conexión con bases de datos | 9 | 09-09-2005 02:33:34 |
Obtener el valor de una celda de dbgrid | gescoto99 | OOP | 3 | 31-03-2004 22:47:16 |
|