Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Combobox con indice y valor (https://www.clubdelphi.com/foros/showthread.php?t=28534)

Moises22 22-12-2005 13:52:25

Combobox con indice y valor
 
Hola a todos.

He estado mirando y no e encontrado solucion a mi problema. Tengo una aplicacion que conecta con access con ADOConnection dentro de un DataModule y lo que yo quiero hacer es que en ejecucion con un ADOQuery hago una consulta sobre una tabla la cual quiero listar en el TCOMBOBOX. Pero claro mi problema es que añado los registros mostrando el nombre, pero necesito la id de estos nombre porque despues en el onchange hago una consulta dependiendo del item que se haya elegido, evidentemente el campo Id no se corresponde con el index del combobox.

Como podria hacerlo??? (espero que me hayan entendido) :(

Muchas gracias por adelantado

luisgutierrezb 22-12-2005 22:57:23

para guardarlo:
Código Delphi [-]
Combobox1.Items.AddObject('Nombre del Item', TOBject(ID)); //donde id es integer
para obtenerlo:
//Id := TInteger(Combobox1.Items.Objects[ComboxBox1.ItemIndex]);//Linea corregida "Tinteger".
Id := Integer(Combobox1.Items.Objects[ComboxBox1.ItemIndex]);

Héctor Randolph 23-12-2005 04:21:15

Hola Moises.

Quiero hacer una sugerencia, descarga esta suite de componentes SMComponents

En particular revisa uno que se llama TSMDBFilterComboBox, este componente tiene las carácteristicas que tú describes. Me refiero a que puedes llenar automáticamente la lista de un ComboBox con los registros de un DataSet y la caja de edición del combo no está ligada con un campo.

Lo principal es que el ComboBox tiene las propiedades FieldDisplay y FieldValue; de esta forma puedes recuperar la información del registro que selecciona el usuario de la lista.

Nota: No hay que confunfirlo con un DBLookUpComboBox, tienen diferentes funcionalidades.

Saludos y que haya suerte.

Delfino 23-12-2005 08:06:35

Cita:

Combobox1.Items.AddObject('Nombre del Item', TOBject(ID));
mejor para no tener q liberar los objects :

Código Delphi [-]
Combobox1.Items.Add('Nombre del Item' + '=' + ID)

asi obtienes pares de name=value, y puedes recuperarlo con las mismas propeidades del combo(names, values, valuefromindex, indexofname):

Código Delphi [-]
s := Combobox1.Values['Nombre del Item']

Moises22 23-12-2005 11:16:58

Gracias por responder, para el caso que en este momento estoy haciendo usare la respuesta que me ha dado luis gutierrezb pero me ha dado el siguiente problema :eek: :

Undeclared identifier: 'TInteger' en la linea id:=TInteger(oficinasCombobox1.Items.Objects[oficinasComboBox1.ItemIndex]);

Tambien he hechado un vistazo a la libreria que me ha sugerido hector y me servira de mucho, asi que muchas gractias tb. Y en cuanto a la respuesta de Delfino estaria perfecto, seria la mejor opcion creo, pero no puedo mostrar la id en el combobox.

Espero que me ayudeis con el problema que me da la forma de gutierrezb. Muchas gracias a todos

sgarcia 17-05-2007 01:30:55

Saludos a todos, como libero los TObject...
GRACIAS

luisgutierrezb 17-05-2007 02:43:46

para liberarlos

Código Delphi [-]
oficinasCombobox1.Items.Objects[oficinasComboBox1.ItemIndex].Free

Stereo100 11-09-2016 21:12:07

Por si a alguien le puede servir :), en lazarus para cargar el combobox con un item y su valor correspondiente de una BD se hace así:

Código Delphi [-]
    Combobox1.Clear;
    SQLQuery1.SQL.Text := 'SELECT * FROM users';
    SQLQuery1.Open;
    while not SQLQuery1.EOF do
    begin
      Combobox1.Items.AddObject(SQLQuery1.FieldByName('UserName').AsString, TObject(SQLQuery1.FieldByName('ID').AsInteger));
      SQLQuery1.Next;
    end;
    SQLQuery1.Close;
Luego para recuperar el ID según el item elegido del combobox1 se hace:

Código Delphi [-]
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  ShowMessage('el ID es: '+inttostr(Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex])));
end;
Y para una vez cargado los valores en el combobox1 deseamos comenzar con el primer item seleccionado, podemos usar este code:

Código Delphi [-]
ComboBox1.ItemIndex:=0;
Usando Lazarus 1.6 (32bits) + Win8.1x64 + Sqlite
Saludos hermanos :) :)

Rocio90 21-09-2016 13:08:50

usa el método
Código:

.Free


La franja horaria es GMT +2. Ahora son las 11:26:53.

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