Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Ayuda con DBComboBox por favor.. (https://www.clubdelphi.com/foros/showthread.php?t=24038)

adlfv 05-08-2005 18:32:07

Ayuda con DBComboBox por favor..
 
Hola a todos.

Quiero hacer que en un combo box salgan todos los valores de una determinada columna de una tabla.

Para ilustrarlo mejor, supongamos que tengo dos tablas: Empleados, y Departamentos. Empleados tiene un campo llamado Departamento que hace referencia a la clave primaria de Departamentos... y quiero que en el combo box me salgan los departamentos, para poder seleccionar uno de ellos.

Siempre lo he hecho de dos formas (ninguna de las dos me gusta, y creo que tiene que haber una forma mejor...):

1.- Los cargo a mano... En lugar de un componente DB, uso un ComboBox normal. Lo que hago es recorrer la tabla departamentos, y voy a mano agregando los valores a la propiedad Items. No me parece nada práctico, y tampoco creo que sea muy eficiente...

2.- Uso un DBLookUpComboBox... Creo un campo LookUp en la tabla Empleados, y asocio el control a dicho campo.

La pregunta es: Hay alguna forma de hacerlo mejor? Porque intuitivamente cuando ví el componente DBComboBox, pensé que éste cargaba todos los valores de una determinada columa de una tabla... pero veo que no...

Existe algún control que haga eso (los cargue automáticamente) y que además pueda por ejemplo filtrar o ser asociado como esclavo a otra tabla, o algo así?

Muchas gracias de antemano.

Un cordial saludo.

lgarcia 05-08-2005 18:52:37

Ayuda con DBComboBox
 
Hola:

Me parece que la herramienta mas poderosa es el DBLookComboBox ya que asociado con un DataSource a un Procedimiento almacenado o una Query donde puedes filtrar los valores que quieras y utilizas las propiedades ListSource para asociarla con el DataSource, ListField con lo quieres mostrar y KeyField con el valor a manipular. Este componente tiene una propiedad keyvalue que te da el valor del keyfield y text que te da el valor del ListField.

Saludos
Luis Garcia

_____________________________
La mejor manera de decir es hacer

Lepe 05-08-2005 18:57:32

Cita:

2.- Uso un DBLookUpComboBox... Creo un campo LookUp en la tabla Empleados, y asocio el control a dicho campo.
No hace falta crear un campo LookUp. Configurando el DBLookupCombo, automaticamente mostrará los nombres de departamentos, pero en la tabla empleados guardará el código del departamento.
Código Delphi [-]
// donde guarda lo que el usuario elija:
Datasource: TablaEmpleados
DataField: Departamento


// que muestra en el combo:
ListSource: TablaDepartamento

// lo que se muestra en la  lista desplegable
ListField: codigoDepartamento;NombreDepartamento  

// Lo que se muestra cuando se hace clic en el listado
ListFieldIndex := nombreDepartamento 

// Campo que hace de llave entre las 2 tablas:
KeyField := CodigoDepartamento

Un saludo

Lepe 05-08-2005 19:08:09

Respondiendo a tus otras preguntas, puedes crearte una rutina que dado un Dataset, lo recorra y añada a un Tstrings la columna que indiques por parámetro, vamos algo como:

Código Delphi [-]

procedure CargaValores(Dt:TDataset; Campo:String; DondeCargar:TStrings);
begin
  dt.First;
  while not dt.Eof do
     DondeCargar.Add( dt.FieldbyName(campo).AsString);
     dt.Next;
  end;
end;

para llamarlo simplemente:
Código Delphi [-]
  CargarValores( tablaClientes, 'NombreCliente', DBcombobox1);

El único problema es que en las inserciones y borrados, no se actualizará el combo. Un DBLookupCombobox si.


La franja horaria es GMT +2. Ahora son las 01:32:35.

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