Hola.
Si tu intención es manejar un caudal medianamente importante de datos en memoria, una buena opción es usar
TClientDataSet, v.gr.:
Código Delphi
[-]
...
procedure TForm1.FormCreate(Sender: TObject);
procedure CreateCol(CDS: TClientDataSet; const fldName: string;
const fldType: TFieldType; const fldSize: Integer = 0;
const fldReq: Boolean = False);
var
fd: TFieldDef;
begin
fd := CDS.FieldDefs.AddFieldDef;
fd.DataType := fldType;
fd.Name := fldName;
fd.Size := fldSize;
fd.Required := fldReq;
end;
var
cdRub, cdEmp: TClientDataSet;
begin
cdRub := ClientDataSetRubro;
cdEmp := ClientDataSetEmpresa;
cdRub.Close;
cdRub.FieldDefs.Clear;
CreateCol(cdRub, 'ID', ftInteger);
CreateCol(cdRub, 'COD_RUBRO', ftString, 20);
CreateCol(cdRub, 'DSC_RUBRO', ftString, 100);
cdRub.CreateDataSet;
cdRub.Open;
cdEmp.Close;
cdEmp.FieldDefs.Clear;
CreateCol(cdEmp, 'ID', ftInteger);
CreateCol(cdEmp, 'COD_EMPRESA', ftString, 20);
CreateCol(cdEmp, 'NOM_EMPRESA', ftString, 100);
CreateCol(cdEmp, 'RUBRO_ID', ftInteger); cdEmp.CreateDataSet;
cdEmp.Open;
end;
...
De ese modo,
TDataSource mediante, podras conectarle componentes data-aware y aprovechar sus beneficios como si se tratase de una bd en disco.
Por motivos de claridad he creado los campos en tiempo de ejecución pero lo podes hacer desde el
Fields Editor en tiempo de diseño.
Este enlace te podría resultar útil:
La potencia de los TClientDataSet
Saludos