Hola,
Tengo un TDCombobox al que le he asignado un dataset de MySQL y solo me muestra la primera fila de la consulta.
¿Alguna pista?
Gracias.
In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
TDBCombobox y MySQL
Re: TDBCombobox y MySQL
Después de todo el día buscando la forma de echarlo a andar, he terminado "retocando" la clase TComboBox de esta forma:
INFORMACION de datas y métodos:
oDataSet -> Data que contiene el dataset que se desea controlar.
isEmpty() -> Método que retorna .t. si el combobox está vacío.
setvalue( value ) -> Método que indica que FIELD del DataSource se va a usar para mostrar en el comboBox. Asigna el FIELD y carga el comboBox.
setItem( dataSearch, item ) -> Método que sirve para colocar el combobox en la posicion indicada en dataSearch -> FIELD por el que se buscará el dato y item -> Valor del dato.
getItem() -> Método para seleccionar el Dataset actual. Devuelve el DataSet de la fila seleccionada en el comboBox.
Código: Seleccionar todo
CLASS TComboBox from XComboBox
DATA oDataSet
METHOD isEmpty() INLINE empty( ::aItems )
METHOD setValue( value )
METHOD setItem( dataSearch, item )
METHOD getItem()
END CLASS
METHOD setValue( value ) CLASS TComboBox
::oDataSet:goTop()
while !::oDataSet:eof()
::AddItem( ::oDataSet:FieldGetByName(value) )
::oDataSet:skip()
end
::nIndex := 1
RETURN nil
METHOD setItem( dataSearch, item ) CLASS TComboBox
local n := 1
::nIndex := 1
::oDataSet:goTop()
while !::oDataSet:eof()
if ::oDataSet:FieldGetByName(dataSearch) == item
::nIndex := n
end if
n++
::oDataSet:skip()
end
RETURN nil
METHOD getItem() CLASS TComboBox
::oDataSet:goto( ::nIndex )
RETURN ::oDataSet
INFORMACION de datas y métodos:
oDataSet -> Data que contiene el dataset que se desea controlar.
isEmpty() -> Método que retorna .t. si el combobox está vacío.
setvalue( value ) -> Método que indica que FIELD del DataSource se va a usar para mostrar en el comboBox. Asigna el FIELD y carga el comboBox.
setItem( dataSearch, item ) -> Método que sirve para colocar el combobox en la posicion indicada en dataSearch -> FIELD por el que se buscará el dato y item -> Valor del dato.
getItem() -> Método para seleccionar el Dataset actual. Devuelve el DataSet de la fila seleccionada en el comboBox.
- ignacio
- Site Admin
- Mensajes: 9253
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: TDBCombobox y MySQL
Buenos días,
Me temo que no está pensado para ser usado de esa forma. La lista del DBCombo no se alimenta con un recordset, hay que alimentarla manualmente. La conexión con su dataset se refiere a su valor actual y no los items de su lista.
Saludos
Me temo que no está pensado para ser usado de esa forma. La lista del DBCombo no se alimenta con un recordset, hay que alimentarla manualmente. La conexión con su dataset se refiere a su valor actual y no los items de su lista.
Saludos
Re: TDBCombobox y MySQL
Hola Ignacio,
Gracias por la aclaración.
El tema es que en el 95% de los casos necesitamos el comportamiento que he descrito.
Saludos.
Gracias por la aclaración.
El tema es que en el 95% de los casos necesitamos el comportamiento que he descrito.
Saludos.
- ignacio
- Site Admin
- Mensajes: 9253
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: TDBCombobox y MySQL
Hola,
No voy a discutir el hecho de que lo necesitéis de esa forma, pero en mi opinión no es coherente con el resto de los datacontrols. En cualquier caso todo se resuelve con muy pocas líneas de código:
Saludos
No voy a discutir el hecho de que lo necesitéis de esa forma, pero en mi opinión no es coherente con el resto de los datacontrols. En cualquier caso todo se resuelve con muy pocas líneas de código:
Código: Seleccionar todo
aItems := oDataSource:QueryArray( "..." )
Aeval( aItems, {|v,e| aItems[e] := v[1] } )
oDbCombo:aItems := aItems
Re: TDBCombobox y MySQL
Ignacio,
Es una solución para cargar el comboBox, si; aunque le falta:
1.- Acceder directamente al elemento seleccionado (en este caso on DataSet) de forma directa y que puedas tener a mano todos los campos del DataSet.
2.- No hay un método de clase directo para saber si el comboBox está vacío, tienes que tirar del aItems y de nIndex.
3.- No es POO.
Saludos.
Es una solución para cargar el comboBox, si; aunque le falta:
1.- Acceder directamente al elemento seleccionado (en este caso on DataSet) de forma directa y que puedas tener a mano todos los campos del DataSet.
2.- No hay un método de clase directo para saber si el comboBox está vacío, tienes que tirar del aItems y de nIndex.
3.- No es POO.
Saludos.
- ignacio
- Site Admin
- Mensajes: 9253
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: TDBCombobox y MySQL
José Alfonso,
Para ti la perra gorda
Un saludo
Para ti la perra gorda
Un saludo