MemTableEh 内存表使用
内存表有很多种,常见的有ClientDataSet、KBMemTable、MemTableEh、FDMemTable 大部分内存表都实现列自由序列化和数据导入导出,而这里要介绍的MemtableEh 由于版本限制,不得不通过低级的方法来实现一些其他内存表可以轻松搞定的事情
1.表复制
- 表复制包括2种情况,一是只复制表结构,不复制数据;二是同时赋值数据和表结构
目前MemTableEh只有一个CopyStructure方法,即复制表结构,复制数据只能遍历数据集逐个复制:
示例:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBGridEhGrouping, StdCtrls, DB, GridsEh, DBGridEh, DBTables,
MemTableDataEh, MemTableEh;
type
TForm1 = class(TForm)
Table1: TTable;
DBGridEh1: TDBGridEh;
DataSource1: TDataSource;
Button1: TButton;
MemTableEh1: TMemTableEh;
DataSource2: TDataSource;
DBGridEh2: TDBGridEh;
Button2: TButton;
Table1NAME: TStringField;
Table1SIZE: TSmallintField;
Table1WEIGHT: TSmallintField;
Table1AREA: TStringField;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
s:=Dbgrideh1.GetFooterValue(0,DBGridEh1.Columns[2]);
caption:=s;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i:Integer;
begin
MemTableEh1.CopyStructure(table1);
MemTableEh1.CreateDataSet;
MemTableEh1.Active:=True;
Table1.First;
MemTableEh1.DisableControls;
while not Table1.Eof do
begin
with MemTableEh1 do
begin
Append;
for i:=0 to Table1.FieldCount-1 do
begin
FieldByName(Table1.Fields[i].FieldName).Value:=Table1.FieldbyName(Table1.Fields[i].FieldName).Value;
end;
Post;
end;
Table1.Next;
end;
MemTableEh1.Append;
MemTableEh1.FieldByName('Name').Value:='总计:';
MemTableEh1.FieldByName('Size').Value:=DBGridEh1.GetFooterValue(0,DBGridEh1.Columns[1]);
MemTableEh1.FieldByName('Weight').Value:=DBGridEh1.GetFooterValue(0,DBGridEh1.Columns[2]);
MemTableEh1.Post;
MemTableEh1.EnableControls;
end;
end.
效果:


浙公网安备 33010602011771号