登录社区:用户名: 密码: 忘记密码 网页功能:加入收藏 设为首页 网站搜索  

文档

下载

图书

论坛

安全

源码

硬件

游戏
首页 | 信息 | 空间 | VB | VC | Delphi | Java | Flash | 补丁 | 控件 | 安全 | 黑客 | 电子书 | 笔记本 | 手机 | MP3 | 杀毒 | QQ群 | 产品库 | 分类信息 | 编程网站
  立华软件园 - Visual Basic 专区 - 技术文档 - Delphi 技术文章 | VB源代码 | 电子图书 | VB网站 | 相关下载 | 在线论坛 | QQ群组 | 搜索   
 VB技术文档
  · 窗体界面
  · 系统控制
  · VB.Net
  · 多媒体
  · 网络编程
  · API函数
  · 游戏编程
  · 数据报表
  · 其他文档
 VB源代码
  · 窗体界面
  · 文件目录
  · 多媒体
  · 网络编程
  · 系统API
  · 数据报表
  · 游戏编程
  · VBA办公
  · 其他代码
 VB论坛
  · Visual Basic 讨论区
  · VB.Net 讨论区
  · VB数据库开发讨论区
  · VB系统API讨论区
 其他VB资源
  · VB下载资源
  · VB电子图书
  · VB QQ群组讨论区
  · VB 其他网站资源




用Delphi开发数据库程序经验三则
发表日期:2006-04-16作者:[转贴] 出处:  

  一、建立临时表

  数据输入是开发数据库程序的必然环节。在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的联机帮助)。

  二、配置数据引擎(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(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 。

我来说两句】 【发送给朋友】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 用Delphi开发数据库程序经验三则

 ■ [欢迎对本文发表评论]
用  户:  匿名发出:
您要为您所发的言论的后果负责,故请各位遵纪守法并注意语言文明。

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放 / 友情链接  
Copyright ©2001-2006 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00191