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