Ver Mensaje Individual
  #6  
Antiguo 17-07-2014
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Reputación: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Vaya monstruos delphi estáis hechos... yo seguiré con lo mio: aconsejar leer la guía de estilo, con ese cumplo
No nos engañes...

Un par más a las que ya ha añadido ecfisa (he tomado su código como base):

(1) Es usando sólo el TStringList y utilizar el "formato" de Name=Value.
Pare ello están las propiedades Names y Values de TStrings.

Seguramente no es el más adecuado si tienes miles de registros.


Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
  str:string;
begin
  TipServ:= TStringList.Create;
  with qryTiposServicios do
  begin
    Open;
    while not eof do begin
       TipServ.Add(FieldByName('TIPO').AsString + '=' + FieldByName('DESCRIPCION').AsString);
      Next;
    end;
  end;

end;

procedure TForm1.btnShowClick(Sender: TObject);
var
  i: Integer;
  str:string;
begin
  Memo1.Clear;
  for i:= 0 to TipServ.Count-1 do begin
    Str := TipServ.Names[i];
    Memo1.Lines.Add(Str + ' --> ' + TipServ.Values[Str]);
  end;
end;

procedure TForm1.btnDestroyClick(Sender: TObject);
begin

  TipServ.Free;

end;

(2) La segunda es utilizando un Record. En este caso el Record tendría solo la descripción, ya que el Tipo lo añadimos como cadena en el TStringList, pero sería útil si en el record hubiera que almacenar más datos.


Código Delphi [-]

type

   // Añado los dos, qun que sólo haría falta 1, pero es ilustrativo por si
  // tuvieramos que almecenar más datos en el record
  RecordDesc = record
    Tipo:string;
    Descripcion:string;
  end;

  PRecordDesc = ^RecordDesc;
  
  procedure TForm1.FormCreate(Sender: TObject);
var
  MiStr:PRecordDesc;
begin
  TipServ:= TStringList.Create;
  with qryTiposServicios do
  begin
    Open;
    while not eof do begin
      New(MiStr);
      MiStr.Tipo := FieldByName('TIPO').AsString;
      MiStr.Descripcion := FieldByName('DESCRIPCION').AsString;

      // Añadirlo
      TipServ.AddObject(MiStr.Tipo, TObject(MiStr));
      // Siguiente
      Next;
    end;
  end;

end;

procedure TForm1.btnShowClick(Sender: TObject);
var
  MiStr:PRecordDesc;
  i:integer;
begin
  Memo1.Clear;
  for i:= 0 to TipServ.Count-1 do begin
    MiStr := PRecordDesc(TipServ.Objects[i]);
    Memo1.Lines.Add(TipServ[i] + ' --> ' + MiStr.Descripcion);
  end;
end;

procedure TForm1.btnDestroyClick(Sender: TObject);
var
  i: Integer;
  MiStr:PRecordDesc;
begin
  for i:= 0 to Pred(TipServ.Count) do begin
    MiStr := PRecordDesc(TipServ.Objects[i]);
    Dispose(MiStr);
  end;
  TipServ.Free;

end;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita