3

我有一个应用程序,它使用以下过程来更改一些当前数据库属性。

Public Sub SetStartupOptions(propname As String, propdb As Variant, prop As Variant)
On Error GoTo Err_SetStartupOptions

  'Set passed startup property.

  'some of the startup properties you can use...
  ' "StartupShowDBWindow", DB_BOOLEAN, False
  ' "StartupShowStatusBar", DB_BOOLEAN, False
  ' "AllowBuiltinToolbars", DB_BOOLEAN, False
  ' "AllowFullMenus", DB_BOOLEAN, False
  ' "AllowBreakIntoCode", DB_BOOLEAN, False
  ' "AllowSpecialKeys", DB_BOOLEAN, False
  ' "AllowBypassKey", DB_BOOLEAN, False

  Dim dbs As Object

  Dim prp As Object

  Set dbs = CurrentDb


    If propname = "DBOpen" Then
        dbs.Properties("AllowBreakIntoCode") = prop
        dbs.Properties("AllowSpecialKeys") = prop
        dbs.Properties("AllowBypassKey") = prop
        dbs.Properties("AllowFullMenus") = prop
        dbs.Properties("StartUpShowDBWindow") = prop
    Else
        dbs.Properties(propname) = prop
   End If

  Set dbs = Nothing

  Set prp = Nothing

Exit_SetStartupOptions:
    Exit Sub

Err_SetStartupOptions:
    Select Case Err.Number
        Case 3270

           Set prp = dbs.CreateProperty(propname, propdb, prop)

           Resume Next

          Case Else
              Dim ErrAns As Integer, ErrMsg As String
              If ErrChoice = vbYesNoCancel Then
                  ErrMsg = Err.Description & ": " & Str(Err.Number) & vbNewLine & "Press 'Yes' to resume next;" & vbCrLf & _
                   "'No' to Exit Procedure." & vbCrLf & "or 'Cancel' to break into code"
             Else
                  ErrMsg = Err.Description & ": " & Str(Err.Number) & vbNewLine & "Press 'Yes' to resume next;" & vbCrLf & _
                    "'No' to Exit Procedure."
             End If
            ErrAns = MsgBox(ErrMsg, _
            vbCritical + vbQuestion + ErrChoice, "SetStartupOptions")
            If ErrAns = vbYes Then
                Resume Next
            ElseIf ErrAns = vbCancel Then
                On Error GoTo 0
                Resume
            Else
                Resume Exit_SetStartupOptions
            End If
    End Select

End Sub

过程可用于添加和设置 DB.properties 的值,这些是在 Access 选项屏幕中设置的属性。我有一个有限的属性名称列表,但是,有人知道我在哪里可以找到被识别的属性的完整列表吗?(即启动表单名称,启动功能区名称,...)

4

1 回答 1

3

您可以使用此处所示的非常简单的过程列出运行代码时存在的数据库的所有属性。

Public Sub ListDBProps()
    Dim db As Database
    Dim prp As Property

    Set db = CurrentDb

    For Each prp In db.Properties
        Debug.Print prp.Name
    Next prp

End Sub

这有几个问题。请注意,我说“在您运行代码时存在”。也就是说,Access 在“根据需要”的基础上为数据库(可能还有其他对象)创建属性。例如,当您将数据库编译成以前称为 MDE,现在是 ACCDE 时,Access 将添加一个名为“MDE”的类型为“Text”[10] 的新属性,其值为“T”。您提供的列表中有几个属性也属于此类别,例如“AllowBypassKey”和“AllowBreakIntoCode”。

这是我在打开的一个简单数据库上运行此代码时得到的列表:
    Name
    Connect
    Transactions
    Updatable
    Collat ​​ingOrder
    QueryTimeout
    Version
    RecordsAffected
    ReplicaID
    DesignMasterID
    Connection
    ANSI Query Mode Themed
    Form Controls
    AccessVersion
    NavPane Category
    UseMDIMode
    ShowDocumentTabs
    Build
    CheckTruncatedNumFields
    ProjVer
    StartUpShowDBWindow
    StartUpShowStatusBar
    AllowShortcutMenus
    AllowFullMenus
    AllowBuiltInToolbars
    AllowToolbarChanges
    AllowSpecialKeys
    UseAppIconForFrmRpt
    AllowDatasheetSchema
    Show Values Limit
    Show Values in Indexed
    Show Values in Non-Indexed
    Show Values in Remote
    Auto Compact
    DesignWithData
    图片属性 存储格式
    NavPane Closed
    NavPane Width
    NavPane View By
    NavPane 按
    轨道名称排序 自动更正信息
    执行名称 自动更正
    HasOfflineLists

您可以轻松地将 Type 属性添加到输出中。它是一个与 DataTypeEnum 枚举对应的整数值。Property 的 Value 属性可能有点棘手。通常它是一个可以轻松转换为字符串值的值,但是当您尝试将它们打印出来或将它们存储在 String 变量中时,有一些会导致运行时错误。一个小函数中的一点错误处理可以毫无问题地处理它。

我的示例在 Microsoft Access 2007 中的 ACCDB 上运行。

享受 。. . 道格

于 2012-09-12T18:25:59.857 回答