function CreateTableInMemory(const AFieldDefs:TFieldDefs): TDataSet;
var
  TempTable:TClientDataSet;
begin
  TempTable:=nil;
  Result:=nil;
  if AFieldDefs<>nil then
  begin
  try
    TempTable:=TClientDataSet.Create(Application);
    TempTable.FieldDefs.Assign(AFieldDefs);
    TempTable.CreateDataSet;
    Result:=(TempTable as TDataSet);
  Except
    if TempTable<>nil then TempTable.Free;
    Result := nil;
    raise;
    end
  end
end;procedure TForm1.Button1Click(Sender: TObject);
var
  ADataSet:TDataSet;
begin
  ADataSet:=TDataSet.Create(Self);
  with ADataSet.FieldDefs do
  begin
    Add('State', ftBoolean,0,False);
    Add('FileName',ftString,30,False);
    Add('Description',ftString,30,False);
  end;  with DataSource1 do
  begin
    DataSet:=CreateTableInMemory(ADataSet.FieldDefs);
    DataSet.Open;
  end;  ADataSet.Free;
end;