Chris aca te dejo el código completo de ese Procedimiento que dices..Los valores se cargan bien porque en el combo se desplega con todos los elementos que deberían aparecer, solo que al seleccionar uno de ellos (el index lo obtiene bien) el resultado es siempre el mismo objeto..
Código Delphi
[-]
procedure TfrmElegirEmpresa.ListaEmpresa;
var nuevoItem,Item2:TEmpresa;
bandera,i,j:integer;
begin
ZQuery1.Connection := frmTablas.ConnectionJHL;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Text := 'select obtener_empresas (' + IntToStr(frmLogin.codigo_usuario) + ')' ;
ZQuery1.Open;
cmbEmpresa.Items.Clear;
nuevoItem := TEmpresa.Create;
frmTablas.tblEmpresa.First;
for i:= 0 to frmTablas.tblEmpresa.RecordCount-1 do
begin
nuevoItem.id := frmTablas.tblEmpresa['cod_empresa'] ;
nuevoItem.Descripcion := frmTablas.tblEmpresa['razon_social'];
ZQuery1.First;
for j:=0 to ZQuery1.RecordCount-1 do
begin
if (DBGrid1.Fields[0].Value = nuevoItem.id) then
begin
cmbEmpresa.Items.AddObject(nuevoItem.Descripcion, nuevoItem);
end;
ZQuery1.Next
end;
frmTablas.tblEmpresa.Next;
end;
end;