中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Delphi > 综合文章
用Delphi开发数据库程序经验三则
作者:QQ  时间:2006-10-05 13:03 出处:ccidnet.com 责编:月夜寒箫
              摘要:用Delphi开发数据库程序经验三则

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<>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;

临时表创建完成。

方法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

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有