Ir al contenido


Foto

[RESUELTO] Uso de TDBListBox


  • Por favor identifícate para responder
11 respuestas en este tema

#1 jc

jc

    Member

  • Miembros
  • PipPip
  • 40 mensajes
  • LocationMojácar, Almería, España

Escrito 21 mayo 2011 - 10:34

Hola

Estaba tratando de usar este componente pero, o no funciona como esperaba, o no he logrado hacerlo.

Yo esperaba que funcionase igual que el componente TDBGrid, que al establecer las propiedades adecuadas, incluso en tiempo de diseño, te muestra el contenido de la consulta.

El caso es que no lo consigo, lo que hago es establecer las propiedades DataSource apuntando al componente TDataSource y DataField al campo que quiero mostrar, pero no me muestra nada, ni en tiempo de diseño ni de ejecución, tampoco da ningún error. En el mismo formulario metí un TDBGrid (para probar) y este sí muestra los resultados de la consulta, por lo que la conexión con la base de datos se hace correctamente.

Mirando webs vi varios ejemplos y en todos rellenan el control de forma manual, es decir, una vez hecha la consulta SQL, mediante un while van metiendo los datos asignándolos a la propiedad Items. Algo así:



delphi
  1. while not SQLconsulta.EOF do begin  // SQLconsulta es un TSQLQuery
  2.         ListaClientes.Items.Add(SQLconsulta.Fields[0].Text);  // ListaClientes es un TDBListBox
  3.         SQLconsulta.Next; 
  4. end;



Mi duda es si es la forma de hacerlo o hay algún bug en el control que impide que se llenen de forma automática como ocurre con el TDBGrid o no lo estoy haciendo bien.

Saludos
  • 0

#2 robert01

robert01

    Advanced Member

  • Miembros
  • PipPipPip
  • 162 mensajes
  • LocationArgentina

Escrito 21 mayo 2011 - 11:21

Hola

Estuve probando y no se que hiciste mal porque no encontré problemas. Usé una base de datos firebird, un control MDOQuery, un  Datasource y un DBListBox.

Lo unico que cambié fue el índice para que muestre el nombre de un cliente en lugar del código del mismo

Ah, para probar puse el source en el evento FormShow

No se si entendí mal tu pregunta o hice otra cosa


Saludos

  • 0

#3 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 21 mayo 2011 - 12:32

Hola,
No utilizo Lázarus por lo que no sabría decir si en efecto es un bug. Yo lo primero que pensaría es si te aseguraste de que esté abierto el DataSource y el DataSet que lo alimenta, quizá se te ha pasado por alto esto o se trata alguna de esas "novatadas" que nos tienen en vela.

Saludos,

  • 0

#4 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 21 mayo 2011 - 01:19

Hola.

Hola

Estaba tratando de usar este componente pero, o no funciona como esperaba, o no he logrado hacerlo.

Yo esperaba que funcionase igual que el componente TDBGrid, que al establecer las propiedades adecuadas, incluso en tiempo de diseño, te muestra el contenido de la consulta.

El caso es que no lo consigo, lo que hago es establecer las propiedades DataSource apuntando al componente TDataSource y DataField al campo que quiero mostrar, pero no me muestra nada, ni en tiempo de diseño ni de ejecución, tampoco da ningún error. En el mismo formulario metí un TDBGrid (para probar) y este sí muestra los resultados de la consulta, por lo que la conexión con la base de datos se hace correctamente.

Mirando webs vi varios ejemplos y en todos rellenan el control de forma manual, es decir, una vez hecha la consulta SQL, mediante un while van metiendo los datos asignándolos a la propiedad Items. Algo así:



delphi
  1. while not SQLconsulta.EOF do begin  // SQLconsulta es un TSQLQuery
  2.         ListaClientes.Items.Add(SQLconsulta.Fields[0].Text);  // ListaClientes es un TDBListBox
  3.         SQLconsulta.Next; 
  4. end;



Mi duda es si es la forma de hacerlo o hay algún bug en el control que impide que se llenen de forma automática como ocurre con el TDBGrid o no lo estoy haciendo bien.

Saludos


Creo que te equivocas de componente. Un TDBListBox solo te debería guardar en la base de datos el elemento seleccionado de la lista, pero los elementos de la lista los tienes que especificar manualmente. De forma muy parecida a como funciona un TDBComboBox.

Imagino que el componente que estás buscando es el TDBLookupListBox. En este componente tendrás las propiedades ListSource, ListField, KeyField, para especificar los datos de la base de datos que hay que cargar en la lista, y las propiedades Datasource y DataField, para especificar en que tabla quieres almacenar el elemento seleccionado.

Saludos.
  • 0

#5 jc

jc

    Member

  • Miembros
  • PipPip
  • 40 mensajes
  • LocationMojácar, Almería, España

Escrito 22 mayo 2011 - 02:32


Creo que te equivocas de componente. Un TDBListBox solo te debería guardar en la base de datos el elemento seleccionado de la lista, pero los elementos de la lista los tienes que especificar manualmente. De forma muy parecida a como funciona un TDBComboBox.

Imagino que el componente que estás buscando es el TDBLookupListBox. En este componente tendrás las propiedades ListSource, ListField, KeyField, para especificar los datos de la base de datos que hay que cargar en la lista, y las propiedades Datasource y DataField, para especificar en que tabla quieres almacenar el elemento seleccionado.


Efectivamente, cambiando el control ahora sí se comporta como yo esperaba.

Aprovecho para comentar que apenas encuentro documentación sobre este tipo de controles, me puse a hacer un ejemplo sencillo para familiarizarme con éstos controles y me está costando una barbaridad por la falta de información.

Saludos
  • 0

#6 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 22 mayo 2011 - 06:24



Creo que te equivocas de componente. Un TDBListBox solo te debería guardar en la base de datos el elemento seleccionado de la lista, pero los elementos de la lista los tienes que especificar manualmente. De forma muy parecida a como funciona un TDBComboBox.

Imagino que el componente que estás buscando es el TDBLookupListBox. En este componente tendrás las propiedades ListSource, ListField, KeyField, para especificar los datos de la base de datos que hay que cargar en la lista, y las propiedades Datasource y DataField, para especificar en que tabla quieres almacenar el elemento seleccionado.


Efectivamente, cambiando el control ahora sí se comporta como yo esperaba.

Aprovecho para comentar que apenas encuentro documentación sobre este tipo de controles, me puse a hacer un ejemplo sencillo para familiarizarme con éstos controles y me está costando una barbaridad por la falta de información.

Saludos


La documentación de Delphi te servirá perfectamente, puesto que los componentes de la LCL de Lazarus son un clon de la VCL de Delphi.

Hay bastantes buenos libros para Delphi (algunos se pueden encontrar en redes Peer to Peer).
  • 0

#7 robert01

robert01

    Advanced Member

  • Miembros
  • PipPipPip
  • 162 mensajes
  • LocationArgentina

Escrito 22 mayo 2011 - 08:13


La documentación de Delphi te servirá perfectamente, puesto que los componentes de la LCL de Lazarus son un clon de la VCL de Delphi.


Yo no estoy de acuerdo, tiene muchas similitudes pero no es un clon. Un clon es una copia exactamente igual al original y creo que Lazarus no se merece que lo llamemos clon de Delphi

Saludos
  • 0

#8 jc

jc

    Member

  • Miembros
  • PipPip
  • 40 mensajes
  • LocationMojácar, Almería, España

Escrito 22 mayo 2011 - 01:32

La  documentación de Delphi te servirá perfectamente, puesto que los  componentes de la LCL de Lazarus son un clon de la VCL de Delphi.

Hay bastantes buenos libros para Delphi (algunos se pueden encontrar en redes Peer to Peer).


Es cierto, fíjate, cuando empecé con Lazarus, toda la documentación que tenía eran un libro básico sobre la primera versión de Delphi y otro, una guía rápida, de Kilix. Esos dos me han sacado de muchos apuros y aun los tengo siempre a mano.

Yo no estoy de acuerdo, tiene muchas similitudes pero no es un clon. Un clon es una copia exactamente igual al original y creo que Lazarus no se merece que lo llamemos clon de Delphi


Así es, aunque tienen muchas similitudes, de momento me voy apañando bien con la documentación de Delphi, al menos me sirve como guía de cómo hacer las cosas. Aunque con los controles de bases de datos me está costando un poquito más, también debido a mi escasa experiencia con SQL, pero bueno, poco a poco :)

Saludos
  • 0

#9 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 22 mayo 2011 - 04:36



La documentación de Delphi te servirá perfectamente, puesto que los componentes de la LCL de Lazarus son un clon de la VCL de Delphi.


Yo no estoy de acuerdo, tiene muchas similitudes pero no es un clon. Un clon es una copia exactamente igual al original y creo que Lazarus no se merece que lo llamemos clon de Delphi

Saludos


Bueno, no veo que sea nada peyorativo (le tengo mucha estima a Lazarus y lo último que quiero hacer es menospreciarlo).

Pero aún así, recuerda que no he dicho que Lazarus sea un clon de Delphi, sino que la LCL lo es de la VCL.
  • 0

#10 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 22 mayo 2011 - 08:18

Hola,

Yo no uso Lázarus pero de lo que pude enterarme hace unos años me hace pensar que la diferencia entre la LCL y la VCL debe ser relativamente modesta.
Marc, la LCL NO PUEDE SER UN CLON. De serlo estaría infringiendo, nuevamente, la licencia de la VCL (que no es libre).
Hace un tiempo el equipo de Lázarus se vió envuelto en un juicio por esto y se vio obligado a hacer unos cambios.
Quizá la LCL tenga sus bases, e inspiraciones, en la VCL pero desde el juicio yo diría que el equipo de Lázarus es más que cauteloso antes de tener otro lío.

Saludos,
  • 0

#11 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 23 mayo 2011 - 03:54

Hola Delphius.

Hola,

Yo no uso Lázarus pero de lo que pude enterarme hace unos años me hace pensar que la diferencia entre la LCL y la VCL debe ser relativamente modesta.
Marc, la LCL NO PUEDE SER UN CLON. De serlo estaría infringiendo, nuevamente, la licencia de la VCL (que no es libre).
Hace un tiempo el equipo de Lázarus se vió envuelto en un juicio por esto y se vio obligado a hacer unos cambios.
Quizá la LCL tenga sus bases, e inspiraciones, en la VCL pero desde el juicio yo diría que el equipo de Lázarus es más que cauteloso antes de tener otro lío.

Saludos,


Con un clon me refiero a que implementa exactamente las mismas clases, propiedades y funcionalidad que implementa la VCL (aunque evidentemente todo el código interno está re-escrito desde cero). Por eso los programas Lazarus son compatibles con Delphi y viceversa (siempre que no uses componentes de terceros), y por eso la documentación de Delphi es perfectamente aplicable a Lazarus.

Saludos.
  • 0

#12 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 23 mayo 2011 - 12:00

Hola Delphius.

Con un clon me refiero a que implementa exactamente las mismas clases, propiedades y funcionalidad que implementa la VCL (aunque evidentemente todo el código interno está re-escrito desde cero). Por eso los programas Lazarus son compatibles con Delphi y viceversa (siempre que no uses componentes de terceros), y por eso la documentación de Delphi es perfectamente aplicable a Lazarus.

Saludos.

Ha... ahora entiendo. Esta bien,
Y debe ser así ya que tanto Delphi como Lázarus deben apegarse, lo más posible, al estándar ANSI-ISO de Pascal.
Tengo entendido que el Object Pascal que utilizamos es en realidad Object Pascal Extendido (o quizá más que extendido ya... porque con la instroducción de los genéricos y otras modificaciones ya debería haberse renovado el estándar).

Saludos,
  • 0




IP.Board spam blocked by CleanTalk.