//kbmMemTable
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, DB, StdCtrls, kbmMemTable;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  kbmMemTable1 : TkbmMemTable;
  Id:Integer;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  //建表
  kbmMemTable1.FieldDefs.Clear;
  kbmMemTable1.FieldDefs.Add('Id', ftInteger, , False);
  kbmMemTable1.FieldDefs.Add('Value', FtString, , False);
  kbmMemTable1.FieldDefs.Add('Time', ftDateTime, , False);
  kbmMemTable1.IndexDefs.Add('Index1','Id',[]);//定义索引
  kbmMemTable1.CreateTable;
  kbmMemTable1.Active := True;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  fld_Id:TIntegerField;
  fld_Value:TStringField;
  fld_Time:TDateTimeField;
  i:Integer;
begin
  //插入
  with kbmMemTable1 do
  begin
    DisableControls; //切断数据感知控件
    try
      Open; //打开
      //定义Field
      fld_Id:=TIntegerField(FieldByName('Id'));
      fld_Value:=TStringField(FieldByName('Value'));
      fld_Time:=TDateTimeField(FieldByName('Time'));
      for i := to do
      begin
        Inc(Id);
        Append; //附加数据
        //赋值
        fld_Id.AsInteger := Id;
        fld_Value.AsString := 'Hello PFeng!'+inttostr(Id);
        fld_Time.AsDateTime := Now;
        Post; //确定
      end;
      UpdateIndexes;//更新索引
    finally
      EnableControls; //连接数据感知控件
    end;
  end;
end;
 
procedure TForm1.Button3Click(Sender: TObject);
var
  fld_Id:TIntegerField;
  fld_Value:TStringField;
  fld_Time:TDateTimeField;
begin
  //更新
  with kbmMemTable1 do
  begin
    Open;
    fld_Id:=TIntegerField(FieldByName('Id'));
    fld_Value:=TStringField(FieldByName('Value'));
    fld_Time:=TDateTimeField(FieldByName('Time'));
    if Locate('Id',,[]) then
    begin
      Edit;
      fld_Value.AsString := '内容被修改';
      fld_Time.AsDateTime := Now;
      Post;
    end;
  end;
end;
 
procedure TForm1.Button4Click(Sender: TObject);
var
  fld_Id:TIntegerField;
  fld_Value:TStringField;
  fld_Time:TDateTimeField;
begin
  //查询
  with kbmMemTable1 do
  begin
    Open;
    fld_Id:=TIntegerField(FieldByName('Id'));
    fld_Value:=TStringField(FieldByName('Value'));
    fld_Time:=TDateTimeField(FieldByName('Time'));
    if Locate('Id',,[]) then
    ShowMessage(fld_Value.AsString);
    //还可以用FindKey实现,结合索引速度更快
    // kbmMemTable1.IndexFieldNames:='Id';
    // if kbmMemtable1.FindKey([5]) then ...
  end;
end;
 
procedure TForm1.Button5Click(Sender: TObject);
var
  fld_Id:TIntegerField;
  fld_Value:TStringField;
  fld_Time:TDateTimeField;
begin
  //删除
  with kbmMemTable1 do
  begin
    Open;
    fld_Id:=TIntegerField(FieldByName('Id'));
    fld_Value:=TStringField(FieldByName('Value'));
    fld_Time:=TDateTimeField(FieldByName('Time'));
    if Locate('Id',,[]) then
    begin
      Delete;
      UpdateIndexes;
    end;
  end;
end;
 
procedure TForm1.Button6Click(Sender: TObject);
var
  fld_Id:TIntegerField;
  fld_Value:TStringField;
  fld_Time:TDateTimeField;
  id:Integer;
begin
  //循环比较最小值
  with kbmMemTable1 do
  begin
    Open;
    fld_Id:=TIntegerField(FieldByName('Id'));
    fld_Value:=TStringField(FieldByName('Value'));
    fld_Time:=TDateTimeField(FieldByName('Time'));
    DisableControls;
    try
      First;
      id := fld_Id.AsInteger;
      while not Eof do
      begin
        if id > fld_Id.AsInteger then
        id := fld_Id.AsInteger;
        Next;
      end;
      Locate('Id',id,[]);
    finally
      EnableControls;
    end;
  end;
end;
 
procedure TForm1.Button7Click(Sender: TObject);
begin
  //清空
  kbmMemTable1.EmptyTable;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  kbmMemTable1 := TkbmMemTable.Create(Self);
  DataSource1.DataSet := kbmMemTable1;
end;
 
end.

KbmMemTable是一款高效且强大的内存表控件,内存表顾名思义其最大的优势就是速度,KbmMemTable不仅完美地实现了高效的特征,同时,最新版本还支持索引、SQL语句等高级用法。其用法超简单,基本用法和ClientDataSet一致,以下是我简单的应用示例,实现了增删改查等基本功能:

05-06 04:21