Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-03-2008
Avatar de peccatum
peccatum peccatum is offline
Miembro
 
Registrado: oct 2005
Posts: 89
Poder: 19
peccatum Va por buen camino
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!
Responder Con Cita
  #2  
Antiguo 04-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 05-03-2008
Avatar de peccatum
peccatum peccatum is offline
Miembro
 
Registrado: oct 2005
Posts: 89
Poder: 19
peccatum Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 05-03-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 05-03-2008
Avatar de peccatum
peccatum peccatum is offline
Miembro
 
Registrado: oct 2005
Posts: 89
Poder: 19
peccatum Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 05-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 05-03-2008
Avatar de peccatum
peccatum peccatum is offline
Miembro
 
Registrado: oct 2005
Posts: 89
Poder: 19
peccatum Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Este combobox es el que genera el filtro.
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.
Responder Con Cita
  #8  
Antiguo 05-03-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
Quizá debas detallar más tu código. A mi me funciona bien usando MySQL y componentes MyDAC:

Código Delphi [-]
procedure TForm1.MyQuery1CalcFields(DataSet: TDataSet);
begin
  if ComboBox1.ItemIndex = 0 then
    DataSet['nombre_completo'] := DataSet['apellido'] + ', ' + DataSet['nombre']
  else
    DataSet['nombre_completo'] := DataSet['nombre'] + ', ' + DataSet['apellido']
end;

Y en el evento OnChange del combo:

Código Delphi [-]
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  if ComboBox1.ItemIndex = 0 then
    MyQuery1.IndexFieldNames := 'apellido'
  else
    MyQuery1.IndexFieldNames := 'nombre';
end;

Con esto, se ordena y el campo calculado cambia como se espera.

Bye
Responder Con Cita
  #9  
Antiguo 05-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
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
Responder Con Cita
  #10  
Antiguo 05-03-2008
Avatar de peccatum
peccatum peccatum is offline
Miembro
 
Registrado: oct 2005
Posts: 89
Poder: 19
peccatum Va por buen camino
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....
Responder Con Cita
  #11  
Antiguo 05-03-2008
Avatar de peccatum
peccatum peccatum is offline
Miembro
 
Registrado: oct 2005
Posts: 89
Poder: 19
peccatum Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 13:53:13.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi