Cita:
Empezado por Casimiro Notevi
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
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;
TipServ.AddObject(MiStr.Tipo, TObject(MiStr));
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;