![]() |
#2
sdta2023-03-25 12:44
|
以对不确定的临时 dbf 临时表进行若干操作,制作了一个 DBF 类,程序用法如下。

Local loDbf As cat_publics.vcx
loDbf = NewObject("Dbf", "cat_publics.vcx")
If loDbf.Open("c:\abc.dbf")
Insert Into (loDbf.Alias) ....
Update (loDbf.Alias) ....
Delete (loDbf.Alias) ....
EndIf
好了就这样子。由于 loDdf 是一个局部变量 vfp 会自动销毁它,Destory 事件则保证不管什么时候程序是否出错,都能把 c:\abc.dbf 关闭。
DBF 类示例代码如下:

**************************************************
*-- 类: dbf (g:\CAT_publics\vcx_common\cat_publics.vcx)
*-- 父类: control
*-- 基类: control
*-- 时间戳: 01/12/23 08:01:12 PM
*
DEFINE CLASS dbf AS control
Width = 25
Height = 25
Alias = ""
*-- 错误是否提示
alert = .T.
Name = "dbf"
PROCEDURE open
LPARAMETERS tcDbfName, tcAlias, tlExclusive, tnBuffering
*-- 说明
* 打开 tcDbfName 指定的工作区,在类关闭后自动关闭
*-- 参数
* tcDbfName
* DBF 文件名
* tcAlias
* 可选,工作区别名
* tlExclusive
* 可选,是否独占打开
* tnBuffering
* 可选,是否设置缓冲模式
*-- 返回值
* .T. 打开成功
* .F. 打开失败
If Not File(m.tcDbfName) And This.Alert = .T.
Sy_MsgBox("文件(%s)不存在!", 16, _Screen, m.tcDbfName)
Return .F.
EndIf
*-- 关闭上一次工作区
Use In Select(This.Alias)
This.Alias = Evl(m.tcAlias, "")
If Empty(This.Alias)
This.Alias = Sys(2015)
EndIf
*-- 关闭同名工作区
Use In Select(This.Alias)
*-- 打开文件
loErr = NULL
Try
If m.tlExclusive
Use (m.tcDbfName) In 0 Alias (This.Alias) Exclusive
Else
Use (m.tcDbfName) In 0 Alias (This.Alias) Shared Again
EndIf
Catch To loErr
If This.Alert = .T.
Sy_TryErr(m.loErr)
EndIf
EndTry
If Used(This.Alias) And Vartype(m.tnBuffering) == "N"
CursorSetProp("Buffering", m.tnBuffering, This.Alias)
EndIf
If IsNull(m.loErr)
Return .T.
Else
Return .F.
EndIf
ENDPROC
PROCEDURE Destroy
If Used(This.Alias) ;
And CursorGetProp("Buffering", This.Alias) > 1 ;
And GetNextModified(0, This.Alias) <> 0
Use In Select(This.Alias)
Sy_MsgBox("注意:缓冲内的数据并未提交,己被放弃!", 16)
Else
Use In Select(This.Alias)
EndIf
ENDPROC
ENDDEFINE
*
*-- EndDefine: dbf
**************************************************