Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con ComboBox (https://www.clubdelphi.com/foros/showthread.php?t=61333)

paladincubano 04-11-2008 13:21:29

Ayuda con ComboBox
 
Hola, primero que todo decir que he buscado algo en el foro relacionado y de momento no he encontrado nada.

Tengo una tabla ej. Paises con idPais (integer) y Pais (nvarchar)
Cuando voy a crear una ficha nueva de un usuario desplego en la forma un ComboBox (nada de controles DB) y leo todos los paises y se lo asigno a los items de ese combobox. Resumiendo, me queda un combobox con todos los paises.
Ahora, a la hora de crear el registro en la tabla clientes, esta tiene un campo que se llama idPais. Alli debo poner el id del pais seleccionado en el combobox.

Para eso normalmente yo busco en la tabla el nombre del pais y saco su Id y se lo asigno al cliente, muy bien.
Pero hay un problema, en caso de que halla 2 paises iguales (sean abiertos porque esto me sirve para otras tablas que si tienen nombres de articulos iguales pero no son los mismos) a la hora de buscar el pais puede que asigne al usuario el pais erroneo, no se si me entienden.

Pudiera poner en los items del combobox la cadena ej xx- Espana, y a la hora de poner el idPais al cliente buscar la xx y asignar ese valor, pero no me gusta que en el combobox esten los id.

Mi pregunta (al fin), puedo poner como especie de un campo oculto en los items del combobox a la hora de asignarlos de tal forma que yo sepa cuando escojo españa que es el id 72????

Espero haberme echo entender y muchas gracias.
saludos

Caro 04-11-2008 13:30:31

Hola paladincubano, yo utilizaría un StringList para llenar los Id.

En el momento en que llenas los datos en tu ComboBox

Código Delphi [-]
 sl: TStringList;
begin
  sl:=TStringList.Create;
  
  Query.First;
  While Not Query.Eof do
   begin
    ComboBox.Items.Add(Query.FieldByName('pais').AsString); 
    sl.Add(Query.FieldByName('IdPais').AsString);
    Query.Next;
   end;

Ahora en el momento que quieras recuperar el codigo, solo sería acceder al StringList en la posición en la que esta tu ComboBox.

Código Delphi [-]
 showmessage(sl[ComBox.ItemIndex]);

Pero también puedes utilizar un BDLookUpComboBox.

Saluditos

paladincubano 04-11-2008 13:34:20

Ya gracias por tu ayuda y lo rapido en contestar. Pero ya habia pensado en hacer eso, de echo, lo habia implementado en algunos casos que necesitaba con mucha frecuencia. Pero no se, mucho trabajo, por eso preguntaba si habia alguna forma de hacerlo directamente en el combobox con InsertObject o algo asi. Si no hay otra forma de hacerlo, pues bueno, siempre queda eas que dices que por supuesto es mejor que la que yo implemento a veces que es buscar el nombre en la base de datos y sacar el id (cuando no se repiten datos).
de todas formas gracias de nuevo.

Lepe 04-11-2008 13:41:24

Puedes usar una rutina genérica:
Código Delphi [-]
procedure CargaCampo(campo:string; CampoId:String; Lista:TStrings);
begin

 
  // ese codigo aqui con esta modificación:
  Lista.AddObject( Fieldbyname(campo).asString, pointer(Fieldbyname(CAmpoId).AsInteger));
end;
ya sólo tienes que llamar a esta rutina con
Código Delphi [-]
CargaCampo('pais','idpais', combobox1.items
id := integer(combobox1.items.Objects[combobox.itemindex]); //así sacas el ID guardado
... o usar un DBLookUpCombobox, (aunque no tendrá todas las funcionalidades, pero bueno.

Saludos

paladincubano 04-11-2008 14:02:47

Vale, encontre lo que buscaba.

http://www.clubdelphi.com/foros/show...light=combobox

gracias por todo.

Edito: Por si a alguien le sirve mas explicito el codigo es:

ComboBox1.Items.AddObject(DM.Query1['Pais'],TObject(Integer(DM.Query1['idPais'])));

y para sacar el id es:

Index:= Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);


La franja horaria es GMT +2. Ahora son las 03:23:52.

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