Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-11-2013
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Question Campo clave y campo valor en un ComboBox

Buenas, tengo que resolver algo mas o menos "sencillo". Necesito traer desde una Tabla (Firebird 2.1) dos campos: cod_cliente, nombre_cliente. Una lista con un Select...

Quiero poner nombre_cliente en un comboBox para que se le despliegue al usuario pero, al momento de guardar en la BD, uso solamente cod_cliente.

La cosa es así, en un TComboBox no puedo traer ambos valores, mostrar uno y guardarme el otro para usarlo cuando quiera. En un TDBComboBox si es posible (keyValue, KeyField, KeyValue)

Ahora bien; si NO quisiera usar TDBComboBox, ¿qué otra opción tengo? ¿Hay algún componente que me permita guardar la estructura (clave, valor) y poder hacer lo que comento (exceptuando el TDBComboBox claro)?

Espero haber sido claro, gracias y buen fin de semana.

Santiago.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #2  
Antiguo 01-11-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola santiago14.

Cita:
Empezado por santiago14 Ver Mensaje
...
La cosa es así, en un TComboBox no puedo traer ambos valores, mostrar uno y guardarme el otro para usarlo cuando quiera. En un TDBComboBox si es posible (keyValue, KeyField, KeyValue)
...
No es complicado hacer lo que queres usando un TComboBox:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  while not IBQuery.Eof do
  begin
    ComboBox1.AddItem(IBQuery.FieldByName('NOMBRE_CLIENTE').AsString,
      TObject(IBQuery.FieldByName('COD_CLIENTE').AsInteger));
    IBQuery.Next;
  end;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  with ComboBox1 do
    ShowMessage(Format('%s %d',[Items[ItemIndex], // NOMBRE_CLIENTE
      Integer(Items.Objects[ItemIndex])]));       // COD_CLIENTE
end;

(Creo haber contestado esto en un hilo anterior pero no pude encontrarlo. )

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 01-11-2013
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Thumbs up ¡¡Genial!!

Gracias compañero, la verdad que me sacaste de un lío bárbaro.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #4  
Antiguo 04-11-2013
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Smile Eliminar los objetos asociados a los elementos del combo.

Hasta ahora con la gran ayuda que obtuve aquí me fue muy bien.
Resulta que necesito eliminar los elementos del combo, los de la lista son fáciles (combo.clear) pero los objetos asociados no se como hacerlo. No estoy seguro que al hacer .clear de la lista se eliminen los objetos asociados, si es así, mi problema está resuelto sino, pido ayuda.

Necesito eliminar todos los objetos asociados de una, algo así como el .clear del combo para ponerlo en limpio y volver a cargarlo. La ayuda de Delphi, en el objeto Items, dice:

The TStrings object does not own the objects in the Objects array. Objects added to the Objects array still exist even if the TStrings object is destroyed. They must be explicitly destroyed by the application.

En alusión a esto es que escribo.

Espero haber sido claro.

Gracias.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #5  
Antiguo 04-11-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola santiago14.

Correcto, una instancia de TStrings no es propietaria de los objetos asociados, por lo que es tu tarea liberar la memoria ocupada. Si bien lo podes realizar directamente sobre el combobox, por motivos de reusabilidad tal vez te convenga hacerte una función que lo haga para cualquier componente que utilice TStrings.

Código Delphi [-]
...
procedure FreeObjects(TS: TStrings);
var
  i: Integer;
begin
  TS.Clear;
  for i := TS.Count-1 downto 0 do
  begin
    TS.Objects[i].Free;
    TS.Objects[i] := nil
  end;
end;

Ejemplo de uso:
Código Delphi [-]
procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeObjects(ComboBox1.Items);
  FreeObjects(ListBox1.Items);
  FreeObjects(Memo1.Lines);  
  // etc
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 04-11-2013 a las 14:59:59.
Responder Con Cita
  #6  
Antiguo 04-11-2013
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Wink

He estado conversando con gente del equipo donde trabajo respecto a la solución que plantea ecfisa; la verdad que a mí me parece muy buena y pone punto final a un problem que es recurrente.

Uno de los chicos del grupo argumenta que "podría ser una solución algo lenta" cuando se trate de llenar, en este caso un Combo, con muchos datos que vienen de la BD. Digamos 5.000 registros.

Yo la verdad que no creo, pero... ¿Alguien a hecho esa medición?

Gracias.

Santiago.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Copiar el valor de vario campo en un ComboBox NISOTO Firebird e Interbase 10 09-08-2012 23:55:00
Asignar el valor de un campo aggregate a un campo de la base TrUnkS Conexión con bases de datos 1 23-02-2010 05:17:42
Como pasarle un valor a un Combobox desde un campo Arturo Varios 2 02-10-2006 23:52:14
UPDATE de un campo dependiendo del valor de un campo de otra tabla Javi2 SQL 5 18-04-2005 16:35:05
Mas de un campo clave en IB. BECERRA Firebird e Interbase 7 28-05-2003 11:46:48


La franja horaria es GMT +2. Ahora son las 03:37:32.


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
Copyright 1996-2007 Club Delphi