关于Delphi内存表的使用说明

  • Post author:
  • Post category:其他


关于内存表的使用说明

1.建立临时表

数据输入是开发数据库程序的必然环节。在Client/Server结构中,客户端可能要输入一批数据后,再向服务器的后台数据库提交,这就需要在本地(客户端)建立临时数据表来存储用户输入的数据,待提交后,清除本地表数据。

2 建立临时表如下:

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(‘Name’,ftString,30,False);

Add(‘Value’,ftInteger,0,False);

end;

with DataSource1 do

begin

DataSet:=CreateTableInMemory(ADataSet.FieldDefs);

DataSet.Open;

end;

ADataSet.Free;

end;

一、 Delphi使用内存表

1.1 Delphi创建内存表步骤:

1. 创建一个Ttable实例。

2. 设置一个DataBaseName为一个目录或是已有的数据库别名。

3. 指定TableName的值。

4. 设置TableType属性指明要创建的数据库表类型。(如果此属性为ttDefault表示数据库类型与TableName指定值的扩展名对应)。

5. 调用TTable.FidldDefs对象的Add方法向数据库表中添加字段。Add有4个参数:

 字段名:string。

 字段类型:TfieldType。

 字段大小:Word。一般只对String和Memo类型使用。

 字段是否NotNull: Boolean。

6. 使用TTable.IndexDefs.Add()方法定义索引。Add有三个参数:

 索引名:string;

 索引字段名:string;

 索引类型:TIndexOptions;

7. 调用TTable的CreateTable。这种方法适用于本地表。SQL表要用TQuery来创建。

代码如下:

var

MemTable: TTable;

begin

with MemTable.Create(Self) do

begin

DatabaseName := ‘c:\Temp’;

TableName := ‘Test’;

TableType := ttParadox;

with FieldDefs do

begin

Add(‘Age’, ftInteger, 0, True);

Add(‘Name’, ftString, 25, False);

Add(‘Weight’, ftFloat, 0, False);

end;

IndexDefs.Add(”, ‘Age’, [ixPrimary, ixUnique]);

CreateTable;

end;

end;

二、 kbmMemTable使用简述

2.1 kbmMemTable创建步骤:

1. 创建一个kbmMemTable对象实例。

2. 调用kbmMemTable.FidldDefs对象的Add方法向数据库表中添加字段。Add的方法和Delphi相同。

3. 使用kbmMemTable.IndexDefs.Add()方法定义索引。Add的方法和Delphi相同。

4. 调用kbmMemTable的CreateTable。

重要的区别:因为kbmMemTable不需要BDE的支持。所以不要指明DatabaseName, TableName和TableType三个属性。

代码如下:

with kbmMemTable1 do

begin

with kbmMemTable1.FieldDefs do

begin

Clear;

Add(‘Period’, ftInteger, 0, false);

Add(‘VALUE’, ftLargeInt, 0, false);

Add(‘BytesField’, ftBytes, 20, false);

Add(‘Color’, ftInteger, 0, false);

Add(‘Date’, ftDate, 0, false);

Add(‘Memo’, ftMemo, 0, false);

Add(‘AutoInc’, ftAutoInc, 0, false);

end;

with kbmMemTable1.IndexDefs do

begin

Clear;

Add(‘Index1’, ‘VALUE’, []);

end;

CreateTable;

end;


三、与Delphi创建内存表的对比

3.1主从表功能

kbmMemTable可以象其它TDataSet一样,通过设置MasterSource和MasterField来简单的完成主从表的操作。

3.2 SQL功能

没有发现kbmMemTable可以支持SQL语句的操作。它提供按字段排序和对排序字段的查找功能。

三、 kbmMemTable特点

从其它TDataSet得到数据。

代码如下:

LoadFromDataSet(Table1, [mtcpoStructure, mtcpoProperties]);

这样kbmMemTable就完全得到来自一个DataSet对象中的全部数据.

保存和载入内存表中数据的功能

Delphi的TTable不提供SaveToFile功能。

kbmMemTable提供保存到文件的功能,保存的文件有两种格式:

Options: TkbmMemTable.SaveFlags;

1. 二进制格式。kbmMemTable.SaveToBinaryFile(‘c:\test.bin’, Options).

kbmMemTable1.LoadFromBinaryFile(‘c:\test.bin’)

2. .csv格式。kbmMemTable.SaveToFile(‘c:\test.csv’, Options);

kbmMemTable1.LoadFromFile(‘c:\test.csv’)

(一种Excel支持的文档格式)打开后的内容如下:

@@FILE VERSION@@ 200

@@TABLEDEF START@@

Period=Integer,0,”Period”,””,10

VALUE=LargeInt,0,”VALUE”,””,15

BytesField=Bytes,20,”BytesField”,””,10

Color=Integer,0,”Color”,””,10

Date=Date,0,”Date”,””,10

Memo=Memo,0,”Memo”,””,10

AutoInc=AutoInc,0,”AutoInc”,””,10

CALC=String,20,”CALC”,””,20

@@TABLEDEF END@@

Period VALUE BytesField Color Date Memo AutoInc CALC

1 198 0 02/11/2001 This is a memo%n2001-11-2 10:19:52 1 0 1-二月

2 196 3 03/11/2001 This is a memo%n2001-11-2 10:19:52 2 1 2-三月

在文档的头部份描述了表的字段结构,在下面则是数据区域。

转载于:https://www.cnblogs.com/chenbg2001/archive/2009/12/28/1634476.html