用自定义函数判断Access对象的状态和视图

ZDNet软件频道 时间:2003-10-15 作者:ZDNet China,周靖 译 |  我要评论()
本文关键词:
你能对一个Access对象采取什么行动,通常要取决于它的状态——是打开还是关闭。如果打开,还要取决于它当前的视图(设计视图、窗体视图、打印预览等等)。本文介绍的是一个库级泛型函数,它能提供任何状态中的任何对象的信息。需要它时,把它放到一个模块中即可。
本文译自Builder.com,未经许可请勿转载你能对一个Access对象采取什么行动,通常要取决于它的状态——是打开还是关闭。如果打开,还要取决于它当前的视图(设计视图、窗体视图、打印预览等等)。在开发阶段,以及在最终的产品中,你可能需要在继续一个特定的行动之前,调查一个对象的状态和视图。为此,有多种方案可供选择。本文介绍的是一个库级泛型函数,它能提供任何状态中的任何对象的信息。需要它时,把它放到一个模块中即可。

问题陈述

判断对象是打开还是关闭是一个非常简单的任务,使用SysCmd函数即可搞定。如果传递的对象打开,以下函数返回True,否则返回False:
Public Function PassedObjStatus(objtype, objname) _
    As Boolean
  If SysCmd(acSysCmdGetObjectState, _
     objtype, objname) <> 0 Then
   ObjStatus = True
  End If
End Function


然而,上述过程存在2个问题:

  • 事先必须知道对象的名称和类型。
  • 只能判断对象是打开还是关闭。所以,假如对象打开,但不在一个工作视图(比如设计视图)中,过程仍然返回False。

为了解决第一个问题,可使用CurrentObjectTypeCurrentObjectName属性来获取所选对象的名称和类型。遗憾的是,鱼与熊掌不能兼得,你要么让函数使用当前选定的对象,要么向它传递参数,因为函数本身不能判断两者的区别。从开发的角度来说,为每一种可能性都提供一个函数显得过于啰嗦。这个问题将通过下一节提供的库级函数来解决,它既能处理选定的对象,也能接收传递的参数,所以能判断任何对象的状态。在第二个库级函数中,我们将使用CurrentView属性来解决第二个问题,该函数能判断一个打开对象的当前视图。

先解决最紧迫的问题:对象是打开还是关闭?
有时,为了继续下一步行动,你惟一需要知道的就是对象是打开还是关闭。在这种情况下,请使用如清单A所示的函数。

该函数接受2个可选参数,即对象的名称和类型。A总结了对象类型常量。

A

常量 整数值
acTable 0
acQuery 1
acForm 2
acReport 3
acMacro 4
acModule 5
acDataAccessPage 6
acServerView 7
acDiagram 8
acStoredProcedure 9

对象常量

如果IsMissing函数返回True,表明你没有提供参数值。结果就是,函数将依赖CurrentObjectTypeCurrentObjectName属性来判断对象的类型和名称:

ObjState = SysCmd(acSysCmdGetObjectState, _
    Application.CurrentObjectType, _
    Application.CurrentObjectName)

如果通过参数值提供了对象的名称和类型,Else条件就使用那些值来判断状态:
Else
  ObjState = SysCmd(acSysCmdGetObjectState, _
     objtype, objname)


注意,如果要提供参数值,则必须同时提供对象的名称和类型。

B总结了函数返回的整数值。

B

常量 状态解释 整数值 Enum
adStateClosed 对象关闭 0 ObjectStateEnum
acObjStateOpen 对象打开 1 acSysCmdGetObjectState
acObjStateDirty 进行了更改,但没有保存 2 acSysCmdGetObjectState
acObjStateNew 是新对象 4 acSysCmdGetObjectState

函数值

大多数值都是acSysCmdGetObjectState常量的成员。adStateClosed常量是ActiveX数据对象库(ADODB)的ObjectStateEnum的一个成员。我们使用它是为了提高可读性。如果你在一个DAO项目中运行,请将adStateClosed替换成整数值0;否则,adStateClosed会返回一个Empty值。如果你喜欢使用常量,请用Const关键字来创建一个自定义常量,这样可避免使用0。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134