FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
combo box -> campo calculado
Hola, yo como siempre con mis preguntas de primer grado :sonrojado:
Tengo un campo calculado que lo unico que hace es mostrar dos campos concatenados con una coma (Nombre y apellido, el valor del campo calculado resultante seria "PEREZ, JUAN" , por ejemplo). Un combobox que permite seleccionar la ordenación, entre ellas ordenar por Nombre o Apellido... Lo que yo quiero es que si ordena por apellido ponga primero el apellido, y si ordena por nombre ponga primero el nombre.... (si ordena por nombre que aparezca "JUAN, PEREZ"). Lo que se me ocurrió es que en el evento onCalcFields del componente Dataset poner un condicional que se fije el valor text del combo, pero no funciona... el combo al realizar la ordenación cierra y abre el dataSet, pensé que al reabrirse el evento se recalcularía como yo quiero pero nada... en teoría cual sería la forma correcta de lograrlo? al parecer no me toma el valor del combobox. la otra que me queda es usar dos campos calculados y setear a visible el que sea pertinente, pero esa forma como que no me agrada mucho... saludos! |
#2
|
||||
|
||||
Hola
La verdad no entiendo. Supongo que tendras una tabla en la que esten los campos nombre y apellido. Si es asi, para que hacer un campo calculado, si se puede hacer con una sentencia sql y un if then. Lo que haces en el campo calculado es una concatenacion, por que no directa?. Saludos |
#3
|
||||
|
||||
la sentencia sql del dataset es un simple 'select * from personas'
en el evento onCalcFields del campo calculado del dataset tengo una asignación como esta: 'Dataset1['cldNOMBRE_COMPLETO']:= Dataset1['APELLIDOS']+', '+Dataset1['NOMBRES'] ;' En el combo box tengo los criterios de ordenación, cuando cambia su texto a "Nombre" yo quiero que lo asignado al campo 'cldNOMBRE_COMPLETO' sea primero el nombre, después el apellido(dar vuelta la parte derecha de la asignación). Lo que hice es, dentro del evento onCalcFields un if then else que se fija el valor del combobox, pero de esta forma no funciona.... lo que dices supongo que es un select condicional en vez de el 'select * from personas' que tengo en el dataset? si es así, como sería la sintáxis de eso? gracias |
#4
|
||||
|
||||
utiliza un dblookupcpmbobox, conectado a un dataset que tenga el campo que tu dices, puedes separar el nombre de los campos con punto y coma ";"
__________________
...Yo naci en esta ribera del arauca vibr@d0r Soy hermano de la espuma, de la garza, de la rosa y del sol... Viva Venezuela |
#5
|
||||
|
||||
hola eduarcol
en el combobox solamente aparecen los criterios de ordenamiento: "nombre" ... "apellido"... etc , una lista estática me basta, ese no es mi problema =( saludos |
#6
|
||||
|
||||
Hola
Veamos si logro entender esto. Tienes una tabla en la que hay dos campos, nombre y apellido. Tienes un combobox en el que tienes una serie de items para elegir, entre ellos Nombre y apellido. Este combobox es el que genera el filtro. Si estoy bien hasta aqui me dices. Ahora pregunto: donde vas a presentar ese filtro?. Saludos |
#7
|
||||
|
||||
no es un filtro...
Tengo un grid donde tengo los datos de las personas. Esta tiene varios campos: nombre, apellido, dni, etcétera (los campos de la tabla en la base de datos)... solo que al usuario no le muestro los campos 'reales' sino campos calculados. En el evento 'onCalcFields' del dataset tengo la asignación que puse mas arriba. Lo que hace el combo es controlar el ordenamiento, en el evento 'onChange' lo que hace es agregar la linea 'order by <itemdelcombo.text> asc' al dataset. Esto funciona bien si no pongo el condicional en el evento onCalcFields que hace una comprobación como la siguiente: if combobox.text = nombres then dataset1[calcfield] := dataset1 [nombre] + dataset1[apellido] else dataset1[calcfield] := dataset1[APELLIDO] + dataset1[nombre]; se entiende? gracias edit: calcfield es lo que le presento al usuario las otras columnas tienen la propiedad Visible a false ... Última edición por peccatum fecha: 05-03-2008 a las 02:38:21. |
#8
|
|||
|
|||
Quizá debas detallar más tu código. A mi me funciona bien usando MySQL y componentes MyDAC:
Y en el evento OnChange del combo:
Con esto, se ordena y el campo calculado cambia como se espera. Bye |
#9
|
||||
|
||||
Hola
Mas que claro keyboy. Gracias por la explicacion, creo que no debe haber mas dudas. El concepto del combobox es lo que pretendía hacer, pero te salio mejor a ti, maestro al fin. Saludos |
#10
|
||||
|
||||
Grande KeyBoy siguiendo tu ejemplo funcionó...
Lo que si, no uso la parte de codigo que pusiste en combobox.onchange, para especificar el ordenamiento ahí dentro yo agrego una linea al SelectSQL del DataSet: Dataset1.SelectSQL.Strings[2]:='Order by '+ Combobox1.Text + ' asc'; ¿Es indiferente hacerlo de cualquiera de las dos formas? Mil gracias a todos y saludos.... |
#11
|
||||
|
||||
cosa
en un principio no me funcionó por que al cerrar y abrir el dataset para agregar la linea 'order by...' se pierden los parámetros (por lo menos en los componentes que utilizo Mercury Data Objets)
ese era el problema jeje, hoy me dí cuenta de ello edit: ya se... me pasa por no mostrar adecuadamente el código :sonrojado2: Última edición por peccatum fecha: 05-03-2008 a las 20:20:54. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Campo Calculado!!! | Ledian_Fdez | OOP | 1 | 03-10-2007 22:10:01 |
Pasar un campo calculado a un campo del mismo DbGrid | maravert | Conexión con bases de datos | 3 | 12-05-2006 00:31:30 |
Campo calculado | sercornejov | MySQL | 3 | 09-08-2005 02:54:35 |
Campo de bd calculado | davidgaldo | MS SQL Server | 3 | 20-05-2005 15:50:22 |
|