建立临时表
数据输入是开发数据库程序的必然环节
在Client/Server结构中
客户端可能要输入一批数据后
再向服务器的后台数据库提交
这就需要在本地(客户端)建立临时数据表来存储用户输入的数据
待提交后
清除本地表数据
这种方法的好处是
提高输入效率
减小网络负担
由于用户一次输入的数据量一般情况下较小(不会超过几百条记录)
所以临时表可以建立在内存中
这样处理速度较快
方法
使用查询控件(TQuery)
第
步
在窗体上放上查询控件(TQuery)
设置好所连接的数据表
第
步
使TQuery
CachedUpdates=True;
TQuery
RequestLive=True
第
步
在原有的SQL语句后加入一条Where子语句
要求加入这条Where子语句后SQL查询结果为空
例如
SELECT Biolife
″Species No″
Category
Common_Name
Biolife
″Species Name″
Biolife
″Length (cm)″
Length_In
Notes
Graphic
FROM ″biolife
db″ Biolife
where Biolife
Category=′A′ and Biolife
Category=′B′
这样临时表就建立完成了
方法
使用代码创建临时表
代码如下
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 TForm
Button
Click(Sender: TObject);
var ADataSet:TDataSet;
begin
ADataSet:=TDataSet
Create(Self);
with ADataSet
FieldDefs do
begin
Add(′Name′
ftString
False);
Add(′Value′
ftInteger
False);
end;
with DataSource
do
begin
DataSet:=CreateTableInMemory(ADataSet
FieldDefs);
DataSet
Open;
end;
ADataSet
Free;
end;
临时表创建完成
方法
使用简单
但由于利用查询控件
清空数据时需要查询服务器后台数据库
所以速度稍慢
而且不适用于临时表中各个字段由数个数据表的字段拼凑而成的情况
方法
适用范围广
速度快
但需要编写代码
(代码中TFieldDefs的使用方法十分简单
见Delphi的联机帮助)
配置数据引擎(BDE
SQL Link)
有关数据库程序分发时
需要携带数据引擎(BDE
SQL Link)
并且在客户端安装完程序后还需要配置数据引擎
如用户名(username)
密码(Password)等等
如果手工配置的话
工作量比较大(根据客户机数量而定)
而InstallShield For Delphi又好像没有这方面的选项
其实InstallShield For Delphi可以做到
在生成安装程序的目录里有一个*
iwz的文本文件
只要在[IDAPI Alias]片段中手工加入即可
例如
[IDAPI Alias]
usesname=SYSDBA
password=masterkey
安装程序后数据引擎自动配置完毕
在InterBase数据库中使用函数
程序员可能在用InterBase作为后台数据库时
会为其提供的函数过少而感到不方便(只有四个)
无法方便地编写出复杂的存储过程
InterBase本身无法编写函数
但它可以使用外部函数(调用DLL中的函数)
下例中说明如何在InterBase 中声明SUBSTR函数
DECLARE EXTERNAL FUNCTION SUBSTR
CSTRING(
)
SMALLINT
SMALLINT
RETURNS CSTRING(
)
ENTRY_POINT ″IB_UDF_substr″ MODULE_NAME ″ib_udf″
其中
MODULE_NAME为DLL的名称
ENTRY_POINT为函数名
声明后便可以使用
例如
select SUBSTR(country)
from country
本例使用的是Delphi安装时自带的IBLocal数据库
用户也可以自己编写函数来扩充InterBase
</SPA !-sse>