关于Delphi内存表的使用说明

关于Delphi内存表的使用说明:

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 [email protected]@ 200 
@@TABLEDEF [email protected]@ 
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 [email protected]@ 
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/jijm123/p/10353245.html

时间: 2024-10-14 12:06:14

关于Delphi内存表的使用说明的相关文章

MySQL 中的临时表和内存表

内存表: 1.通过My.cnf中的max_heap_table_size指定,支持动态指定 2.表定义是存放在磁盘上的,扩展名为.frm,重启不会丢失,数据是存放在内存中的,所以重启会丢失数据 3.不支持BLOB或TEXT列 4.内存表初始化,可以使用--init-file来初始化,避免重启mysql后数据被清空.比如--init-file="/data/mysql/init.sql", init.sql格式为:          use db_test;          selec

MySql 内存表使用

MySql 内存表使用 内存表使用哈希散列索引把数据保存在内存中,因此具有极快的速度,适合缓存中小型数据库,但是使用上受到一些限制,以下是蓝草使用的一些感受. 1.heap对所有用户的连接是可见的,这使得它非常适合做缓存. 2.仅适合使用的场合.heap不允许使用xxxTEXT和xxxBLOB数据类型:只允许使用=和<=>操作符来搜索记录(不允许<.>.<=或>=):不支持auto_increment:只允许对非空数据列进行索引(not null). 注:操作符 “&l

delphi 内存申请和释放

2012-02-22 12:421 内存分配常见函数GetMem和FreeMem.GetMemory和FreeMemory.New和Dispose.StrAlloc和StrDispose.AllocMem.SysGetMem和SysFreeMem. 2 GetMem和FreeMem.GetMemory和FreeMemory由于DELPHI的内存管理都知道分配内存的大小,因此在释放内存的时候,只要给指针地址不用给出长度就可以了.另外提倡用GetMemory和FreeMemory来代替GetMem和

MySQL内存表和临时表

#MySQL内存表和临时表 DROP TABLE IF EXISTS tbl; CREATE TABLE tbl ( id INT NOT NULL AUTO_INCREMENT, title VARCHAR (50) NOT NULL, author VARCHAR (50) NOT NULL, PRIMARY KEY (id) ) ENGINE = INNODB DEFAULT CHARSET = utf8; INSERT INTO tbl(title, author) VALUES('Le

PLSQL中的内存表--Index By Table

其实内存表有点类似于java中的数组,但是它有比起数组更强大的地方. 1.首先来简单介绍内存表的作用: 使用BINARY_INTEGER 类型构成的索引主键 简单类型 或者用户自定义类型的字段作为具体的数组元素 2.如何来使用内存表类型呢? 定义内存表类型 TYPE type_name IS  TABLE OF 存储类型(number , employees.last_name%TYPE , employees%ROWTYPE , varchar2) INDEX BY (BINARY_INTEG

sql server 2014内存表

内存数据库,指的是将数据库的数据放在内存中直接操作.相对于存放在磁盘上,内存的数据读写速度要高出很多,故可以提高应用的性能.微软的SQL Server 2014已于2014年4月1日正式发布,SQL 2014一个主要的功能即为内存数据库. 目前来说,数据库镜像和复制是无法与内存优化表兼容的,但AlwaysOn,日志传送,备份还原是完整支持. 由于内存表数据的存放机制和普通表(基于磁盘的表)完全不同,因此内存表的数据需要一个特别的文件夹(注意不是文件哦)来存放 USE [master] --创建数

FireDAC内存表

position:static(静态定位) 当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位问题.所以当没有定义position属性时,并不说明该元素没有自己的位置,它会遵循默认显示为静态位置,在静态定位状态下无法通过坐标值(top,left,right,bottom)来改变它的位置. position:absolute(绝对定位) 当position属性定义为absolute时,元素会脱离文档流

旗正规则引擎内存表出错的原因及解决方法分享

1        内存表 1.1     汇总 1.1.1       错误 汇总列中必须包含分组列所属部门 1.1.2       解决方案 点击图片中的"sum(基本工资)",弹出窗体,将所属部门加入.引发该问题的原因是,分组列存在的字段,必须要包含在汇总列中. 1.2     更新 1.2.1       错误 数组个数小于取值位置:-1 1.2.2       解决方案 出现该错误的原因是内存表中没有数据.可能性有两个,一.内存表真没有数据,二.更行的时候字段的英文名称没有对应

SQL Server 在Alwayson上使用内存表&quot;踩坑&quot;

200 ? "200px" : this.width)!important;} --> 介绍 因为线上alwayson环境的一个数据库上使用内存表.经过大概一个星期监控程序发现了一个非常严重问题这个数据库的日志文件不会截断,已用空间一直在增加(存在定时的每个小时的日志备份),同时内存表数据库文件也无法删除,下面就介绍一下后面我的处理过程. 数据库:SQL Server2014 Enterprise Edition (64-bit) 删除文件 使用一个单独非alwayson环境的数