关于内存表的使用说明
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-三月 在文档的头部份描述了表的字段结构,在下面则是数据区域。
|
请发表评论