Ver Mensaje Individual
  #2  
Antiguo 17-05-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 31
Lepe Va por buen camino
Con un String no se puede realizar tan rápido la cosa.

Un integer ocupa 2 bytes en memoria, exactamente lo mismo que un puntero a un objeto, de ahí que se pueda guardar el integer sin problema alguno.

Un string, es un puntero a memoria donde se guardará la cadena. Como no estas reservando memoria, estas escribiendo en una zona de memoria que no te pertenece. Que algunas veces recuperes parte de la cadena... es solo suerte, deberías recibir un Access Violation al asignar o recuperar la cadena de texto.

Soluciones hay muchas, pero creo que la más cómoda, es crearte tu propio objeto:
Código Delphi [-]

TCliente = Class(TObject);
public
  Nombre:string
  Facturado:Currency
end;


// carga de valores al combo
var C:TCliente;
while not Table1.Eof do
  begin
   C := TCliente.Create;
   C.Nombre := Table1campo2.AsString;
   C.Facturado := Table1campo1.Value;

   ComboBox1.Items.AddObject(Table1Campo1.Value , C);
   Table1.Next;
  end;

// recuperacion de los valores
edit1.text := TCliente(ComboBox1.Items.Objects[ComboBox1.ItemIndex]).Nombre;


//Antes de cerrar el Form, (o de vaciar el contenido del combo) tienes que liberar los objetos creados:
 For I:= combo.items.count-1 downto 0 do
   TCliente(Combo.items.objects[i]).Free;
He añadido el campo "Facturado" como mero ejemplo de que puedes guardar más cosas en el objeto.

Saludos.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita