Delphi: using TClientDataset as an in-memory dataset

前端 未结 11 2240
无人及你
无人及你 2020-12-14 08:00

According to this page, it\'s possible to use TClientDataset as an in-memory dataset, completely independent of any actual databases or files. It describes how

11条回答
  •  粉色の甜心
    2020-12-14 08:36

    This is a corrected working code mentioned by OP in the first post. You get a memory table from a TClientDataset shown in DBGrid.

    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, DBClient, Grids, DBGrids, StdCtrls, MidasLib;
    
    type
      TForm1 = class(TForm)
        MemTable: TClientDataSet;
        Button1: TButton;
        Button2: TButton;
        DBGrid1: TDBGrid;
        DataSource1: TDataSource;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: word;
    begin
      MemTable.DisableControls;
      for i := 1 to 20000 do
      begin
        MemTable.Append;
        MemTable.FieldByName('ID').AsInteger       := i;
        MemTable.FieldByName('Status').AsString    := 'Code'+IntToStr(i);
        MemTable.FieldByName('Created').AsDateTime := Date();
        MemTable.FieldByName('Volume').AsFloat     := Random(10000);
        MemTable.Post;
      end;
      MemTable.EnableControls;
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      MemTable.IndexFieldNames := 'Volume';
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      MemTable.FieldDefs.Add('ID',      ftInteger, 0, False);
      MemTable.FieldDefs.Add('Status',  ftString, 10, False);
      MemTable.FieldDefs.Add('Created', ftDate,    0, False);
      MemTable.FieldDefs.Add('Volume',  ftFloat,   0, False);
      MemTable.CreateDataSet;
    end;
    
    end.
    

提交回复
热议问题