分享
 
 
 

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

王朝delphi·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

1.建立临时表

数据输入是开发数据库程序的必然环节。在Client/Server结构中,客户端可能要输入一批数据后,再向服务器的后台数据库提交,这就需要在本地(客户端)建立临时数据表来存储用户输入的数据,待提交后,清除本地表数据。

这种方法的好处是:提高输入效率,减小网络负担。

由于用户一次输入的数据量一般情况下较小(不会超过几百条记录),所以临时表可以建立在内存中,这样处理速度较快。

方法1:使用查询控件(TQuery)

第1步:在窗体上放上查询控件(TQuery),设置好所连接的数据表。

第2步:使TQuery. CachedUpdates=True;

TQuery. RequestLive=True

第3步:在原有的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′

这样临时表就建立完成了。

方法2:使用代码创建临时表

代码如下:

function CreateTableInMemory(const AFieldDefs:TFieldDefs):TDataSet;

var

TempTable:TClientDataSet;

begin

TempTable:=nil;

Result:=nil;

if AFieldDefs$#@60;$#@62;nil then

begin

try

TempTable:=TClientDataSet.Create(application);

TempTable.FieldDefs.Assign(AFieldDefs);

TempTable.CreateDataSet;

Result:=(TempTable as TDataSet);

Except

if TempTable$#@60;$#@62;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(′ ue′,ftInteger,0,False);

end;

with DataSource1 do

begin

DataSet:=CreateTableInMemory(ADataSet.FieldDefs);

DataSet.Open;

end;

ADataSet.Free;

end;

临时表创建完成。

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

2.配置数据引擎(BDE、SQL Link)

有关数据库程序分发时,需要携带数据引擎(BDE、SQL Link),并且在客户端安装完程序后还需要配置数据引擎,如用户名(username)、密码(PassWord)等等。假如手工配置的话,工作量比较大(根据客户机数量而定)。

而InstallShield For Delphi又似乎没有这方面的选项,其实InstallShield For Delphi可以做到,在生成安装程序的目录里有一个*.iwz的文本文件,只要在[IDAPI Alias]片段中手工加入即可。 例如:

[IDAPI Alias]

usesname=SYSDBA

password=masterkey

安装程序后数据引擎自动配置完毕。

3.在InterBase数据库中使用函数

程序员可能在用InterBase作为后台数据库时,会为其提供的函数过少而感到不方便(只有四个),无法方便地编写出复杂的存储过程。InterBase本身无法编写函数,但它可以使用外部函数(调用DLL中的函数)。下例中说明如何在InterBase 中声明SUBSTR函数。

DECLARE EXTERNAL FUNCTION SUBSTR

CSTRING(80), SMALLINT, SMALLINT

RETURNS CSTRING(80)

ENTRY_POINT ″IB_UDF_substr″ MODULE_NAME ″ib_udf″

其中:MODULE_NAME为DLL的名称,ENTRY_POINT为函数名。

声明后便可以使用,例如:

select SUBSTR(country)

from country

本例使用的是Delphi安装时自带的IBLocal数据库。用户也可以自己编写函数来扩充InterBase。

更多内容请看数据库相关文章专题,或

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有