Página 1 de 1
TDBCombobox y MySQL
Publicado: Jue Mar 10, 2016 5:18 pm
por jasm
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.
Re: TDBCombobox y MySQL
Publicado: Jue Mar 10, 2016 9:02 pm
por jasm
Después de todo el día buscando la forma de echarlo a andar, he terminado "retocando" la clase TComboBox de esta forma:
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.
Re: TDBCombobox y MySQL
Publicado: Jue Mar 10, 2016 9:44 pm
por ignacio
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
Re: TDBCombobox y MySQL
Publicado: Vie Mar 11, 2016 12:21 pm
por jasm
Hola Ignacio,
Gracias por la aclaración.
El tema es que en el 95% de los casos necesitamos el comportamiento que he descrito.
Saludos.
Re: TDBCombobox y MySQL
Publicado: Vie Mar 11, 2016 12:31 pm
por ignacio
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:
Código: Seleccionar todo
aItems := oDataSource:QueryArray( "..." )
Aeval( aItems, {|v,e| aItems[e] := v[1] } )
oDbCombo:aItems := aItems
Saludos
Re: TDBCombobox y MySQL
Publicado: Mar Mar 15, 2016 10:27 am
por jasm
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.
Re: TDBCombobox y MySQL
Publicado: Mar Mar 15, 2016 12:22 pm
por ignacio
José Alfonso,
Para ti la perra gorda
Un saludo