用Delphi开发数据库程序经验三则
由于用户一次输入的数据量一般情况下较小(不会超过几百条记录) 所以临时表可以建立在内存中 这样处理速度较快 方法 使用查询控件(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
lishixinzhi/Article/program/Delphi/201311/8520