delphi query 存储为dbf_在Delphi程序中维护DBF数据库

本文介绍了如何在Delphi程序中使用BDE函数进行DBF数据库的操作,包括真正删除记录、显示被删除记录、获取当前记录号、设置查询匹配方式以及恢复被删除记录的方法。通过调用BDE函数,如DbiPackTable、DbiSetProp等,实现了对xBase数据库的维护,与Foxpro的类似操作进行了对比。
摘要由CSDN通过智能技术生成

下载本文示例代码

p>

由于Delphi开发的易用性和快速 性,很多原来使用Foxpro和VisualFoxpro编程的程序员转向了Delphi.但由于工作上或其它的原因,原来的应用系统尤其是应用数据,不可能被 一下丢弃,因而需要用Delphi来维护xBase数据库的应用系统.本文总结了在工作和学习中的经验,与广大Delphi程序员和爱好者共享.

在下面讨论中,主要应用了BDE的 函数.Delphi1.0没有提供BDE函数的帮助文件,请参见Delphi\Doc中的DbiTypes.int、DbiProcs.int和DbiErrs.int三个文件;在Delphi3.0/4.0中可参见BDE帮助文件.本文 讨论的DBF数据库操作主要有:真正删除记录、显示被删除记录、获取当前记录号、设置查询匹配方式、恢复被删除记录.

一.真正删除记录

在Delphi程序中,用TTable 或TQuery构件的方法Delete执行删除记录的操作时执行的是软删除,即相当于Foxpro中的SetDeleteOff的效果,仅将记录用星号*标记为删除, 实际并没有数据库中进行物理上的删除.要进行真正的删除,需要进行Pack Table的操作.

在Delphi程序中真正删除记录, 需要调用BDE函数,函数名为DbiPackTable,函数原型为:

functionDbiPackTable(hDb:hDBIDb;hCursor :hDBICur;pszTableName:PChar;pszDriverType:PChar;bRegenIdxs

:Bool):DBIResult;

其中:hDb为数据库TDatabse的句柄,

hCursor为数据表TTable的句柄,

pszTableName为要删除记录的数据表的名称,

pszDriverType为要删除记录的数据表的类型,

bRegenIdxs表示是否在删除记录后自动更新索引文件.

在上面前四个参数中,hDb不能为NULL .hCursor、pszTableName、pszDriverType可以为NULL,但必须提供足够的信息来标识数据表的文件名称和类型,当hCursor不为空时,pszTableName 和pszDriverType可以为NULL;当pszTableName为数据表的路径和文件名时,hCursor和pszDriverType可以为NULL.

值得注意的是,在删除记录时,如 果用Table来实现,则Table必须以Exclusive=True的方式打开.下面就是一个典型的例子.

首先,应在uses语句加上:

DbiTypes,DbiProcs,DbiErrs.{Pack一个DBF数据表,DbfTable包含了数据表的信息

}

functionPackDbf le(DbfTable:TTable):boolean;

var

errResult:DBIResult;

begin

ifnotDbfTable.Exclusivethen {如果不是以独占方式,操作失败}

begin

result:=false;

exit;

end;

{进行删除操作}

errResult:=DbiPackTable(DbfTable.dbHandle, DbfTable.handle,NIL,NIL,true);

{根据返回结果,返回成功与否的标志}

iferrResult=DBIERR_NONEthen {没有错误,操作成功}

result:=true

else{没有错误,操作失败}

result:=false;

end;

二.显示或不显示被软删除记录

当DBF数据库中 的记录被软删除后,缺省情况下在TDBGrid等数据库构件中是看不见这些 记录的.我们可以用BDE函数来控制是否显示DBF数据库中被软删除的记录,就象在Foxpro中利用语句SetDeleteON/OFF那样.

要用到的函数名为DbiSetProp,函数原型为:

functionDbiSetProp(hObj :hDBIObj;iProp:Longint;iPropValue:Longint):DBIResult;

该函数用来设置DBI对象中某个 属性的值.

其中:hObj为DBI对象名称,我 们这里为数据表TTable的句柄;

iProp为属性名称,我们用的是软删除属性curSO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值