我用rxmemorydata处理内存字段,但用在blob字段上就出错,提示type error.在网上查找,听说kbmmemtable可以解决此问题,请教高手,如何在kbmmemtable中保存和读取blob字段。是通过adoquery读出的图片字段存放在kbmmemtable的图片字段中,谢谢。
最好有代码,谢谢了。
最好有代码,谢谢了。
解决方案 »
- [50分]难题,关于delphi操作Excel !!!!!!
- 当combobox1内容改变时灵性combobox2里的内容也跟着改变
- 哈哈哈哈....人生快乐莫过于找到一条路...
- could not create output file 'dy2.dcu'
- 一个问题一直想不明白,高手进来看下吧
- RichEdit关于打字速度测试的问题?
- demo验证
- 怎样用exescope简单修改exe的图片?
- 如何动态加载bpl并调用其中的类函数
- 关于注册表....高分
- user中的GetApplicationVer 这个不知道啥控件,死活找不到,求助!!!!!!!!
- 有什么小型数据库比ACCESS还要好的吗?
一、 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-三月
在文档的头部份描述了表的字段结构,在下面则是数据区域。
begin
//添加Integer类型字段Field1
with FieldDefs.AddFieldDef do
begin
DataType := ftInteger;
Name := 'Field1 ';
end;
//添加string类型字段Field2
with FieldDefs.AddFieldDef do
begin
DataType := ftString;
Size := 10;
Name := 'Field2 ';
end;
//在Field1上建索引
with IndexDefs.AddIndexDef do
begin
Fields := 'Field1 ';
Name := 'IntIndex ';
end;
//创建内存表
CreateDataSet;
end;
begin
//添加Integer类型的字段Field1
with FieldDefs.AddFieldDef do
begin
DataType := ftInteger;
Name := 'Field1 ';
end;
//添加string类型的字段Field2
with FieldDefs.AddFieldDef do
begin
DataType := ftString;
Size := 10;
Name := 'Field2 ';
end;
//在Field1上建索引
with IndexDefs.AddIndexDef do
begin
Fields := 'Field1 ';
Name := 'IntIndex ';
end;
//创建内存表
CreateDataSet;
end;