Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Uso del combobox (https://www.clubdelphi.com/foros/showthread.php?t=28495)

yo_pablo 21-12-2005 14:41:37

Uso del combobox
 
Buenas... estoy trabajando con delphi 7 y el problema que tengo es que cargo un combobox con strings y valores asociados y luego me retorna cualquier cosa. Para ser más específico lo cargo con:
while not tabla.eof do
begin
ComboBox.AddItem(tabla.descripcion.value,TObject(tabla.claveprimaria.value));
tabla.next;
end;

Tanto la descripción como la clave son strings. Luego para recuperar la clave seleccionada uso lo siguiente:
variable:=String(ComboBox.Items.Objects[ComboBox.ItemIndex]);
Pero me retorna cualquier valor...
Me podrían decir qué estoy haciendo mal ????

Mil gracias.

Neftali [Germán.Estévez] 21-12-2005 15:51:23

La primera pregunta que me hago es ¿Entiendes lo que estás haciendo en ésta línea?

Código Delphi [-]
ComboBox.AddItem(tabla.descripcion.value,TObject(tabla.claveprimaria.value));

(1) tabla.claveprimaria.value es un variant, no puedes hacer el cast así como así a TObject.
(2) Cuando almacenas un TObject, almacenas realmente el puntero al objeto; En éste (si es que eso fuera un TObject correcto), al final tendrías el apuntador al último objeto correcto, pèro los demás apuntarían a "basura", ya que cuando haces un Tabla.Next, no se crean objetos nuevos de tipo TField, sino que se van reaprovechando los mismos... (no se si me explico bien); Es decir, tabla.claveprimaria.value es siempre el mismo elemento que va cambiando de valor.

Cita:

variable:=String(ComboBox.Items.Objects[ComboBox.ItemIndex]);
Como ya te he dicho, no puedes acceder al valor variant como objeto.

yo_pablo 23-12-2005 20:57:31

Muchas gracias por la prontitud. En principio tenes razon, no entendía el verdadero significado de la linea. Hay alguna forma de utilizar un combobox de esa manera ?

Gracias.

Héctor Randolph 23-12-2005 21:24:29

Muy parecido a lo que se expone en este otro hilo.

Bueno, mi recomendación sería la misma para este caso, instala el componente TSMDBFilterComboBox y utiliza las propiedades FieldDisplay y FieldValue para recuperar los valores de la lista.

Por si acaso pongo nuevamente el enlace para descargar el componente mencionado SMComponents

Saludos.

yo_pablo 23-12-2005 22:44:14

Muchas gracias, lei el hilo que me pasaste y me aclaró varias dudas.

FOURIER 24-12-2005 08:53:14

Espero te sirva
 
Podrías hacer por ejemplo:

while not tabla.eof do
begin
ComboBox.AddItem(tabla.descripcion.value,ComboBox);
tabla.next;
end;

variable:=ComboBox.Items[ComboBox.ItemIndex];

Eso sería una forma de hacer lo que tu quieres hacer


La franja horaria es GMT +2. Ahora son las 20:24:27.

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