其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

用Delphi开发数据库程序经验三则


发布日期:2023年09月14日
 
用Delphi开发数据库程序经验三则
建立临时表

数据输入是开发数据库程序的必然环节在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 ″biolifedb″ Biolife

where BiolifeCategory=′A′ and BiolifeCategory=′B′

这样临时表就建立完成了

方法使用代码创建临时表

代码如下

function CreateTableInMemory(const AFieldDefs:TFieldDefs):TDataSet;

var

TempTable:TClientDataSet;

begin

TempTable:=nil;

Result:=nil;

if AFieldDefs<>nil then

begin

try

TempTable:=TClientDataSetCreate(Application);

TempTableFieldDefsAssign(AFieldDefs);

TempTableCreateDataSet;

Result:=(TempTable as TDataSet);

Except

if TempTable<>nil then

TempTableFree;

Result:=nil;

raise;

  end;

end;

end;

在程序中按如下方法使用

procedure TFormButtonClick(Sender: TObject);

var

ADataSet:TDataSet;

begin

ADataSet:=TDataSetCreate(Self);

with ADataSetFieldDefs do

begin

Add(′Name′ftStringFalse);

Add(′Value′ftIntegerFalse);

end;

with DataSource do

begin

DataSet:=CreateTableInMemory(ADataSetFieldDefs);

DataSetOpen;

end;

ADataSetFree;

end;

临时表创建完成

方法使用简单但由于利用查询控件清空数据时需要查询服务器后台数据库所以速度稍慢而且不适用于临时表中各个字段由数个数据表的字段拼凑而成的情况方法适用范围广速度快但需要编写代码(代码中TFieldDefs的使用方法十分简单见Delphi的联机帮助)

配置数据引擎(BDESQL Link)

有关数据库程序分发时需要携带数据引擎(BDESQL 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

               

上一篇:扩展Delphi的线程同步对象

下一篇:Delphi开发经验四则