应用程序配置与扩展:选项管理全解析
立即解锁
发布时间: 2025-08-23 01:45:29 阅读量: 1 订阅数: 4 

### 应用程序配置与扩展:选项管理全解析
#### 1. 字符串读取与错误消息显示
在处理字符串读取时,我们使用 `LoadString` API 函数。以下是用于分配空间以接收 Windows 数据并调用该函数的代码:
```vb
Private Function GetResourceString(lStringId As Long) As String
Dim buffer As String
' allocate some space
buffer = Space(1024)
If (hModule) Then
If (LoadString(hModule, lStringId, buffer, Len(buffer) + 1)) Then
GetResourceString = Left(buffer, InStr(buffer, vbNullChar) - 1)
End If
End If
End Function
```
为了向用户显示错误消息,我们在表单的 `BeforeUpdate` 事件中添加以下代码:
```vb
Private Sub Form_BeforeUpdate(Cancel As Integer)
' make sure that the first name and last name have been entered
' loads error strings from a resource DLL
If (IsNull(Me.[First Name])) Then
MsgBox GetResourceString(IDA_NOFIRSTNAME), vbExclamation
Cancel = True
ElseIf (IsNull(Me.[Last Name])) Then
MsgBox GetResourceString(IDA_NOLASTNAME), vbExclamation
Cancel = True
End If
End Sub
```
若要以其他语言测试此例程,需要为 Office 安装语言包。将资源 DLL 复制到数据库所在文件夹的子目录(该子目录为当前 UI 语言的 LCID),即可使用母语进行测试。当保存记录而未设置名字时,应会看到错误提示。
#### 2. 应用程序选项的作用
为应用程序添加选项可使用户根据自身需求进行定制。应用程序选项的用途广泛,例如:
- 包含个性化消息或用户签名行,用于向客户发送电子邮件。
- 让用户选择在打印预览时最大化报表。
- 在应用程序启动时打开上次打开的表单。
- 在仪表板表单中包含可能需要较长时间加载的图表。
- 提供关闭报表管理器中跟踪功能的能力。
#### 3. 选项的存储方式
##### 3.1 存储在表中
使用数据库中的表是创建选项最简单的方法。应用程序选项通常是键/值对,我们还为选项表添加了类别,用于对选项进行分组。创建一个名为 `USysTblOptions` 的新表,结构如下:
| 字段名 | 字段大小 | 备注 |
| ---- | ---- | ---- |
| ID | AutoNumber | 主键 |
| OptionName | Text (50) | |
| OptionCategory | Text (255) | |
| OptionValue | Text (255) | |
##### 3.2 存储在注册表中
若要创建的选项数量超出了表的存储能力,可以考虑将应用程序选项存储在注册表中。从应用程序写入注册表有三种方式:
- 使用 VBA 中的 `SaveSetting` 语句,该语句使用简单,但仅限于注册表的一个部分:`HKEY_CURRENT_USER\Software\VB and VBA Program Settings`,且只能写入字符串,不能写入数字。
- 使用 Windows 脚本宿主中定义的 `WshShell` 对象,该对象定义了一个名为 `RegWrite` 的方法,用于写入注册表。
- 使用 Windows API,Windows 提供了许多允许写入注册表的函数。
#### 4. 创建处理选项的类
使用类模块可以简化编程任务,对于应用程序选项或设置也不例外。我们将使用类模块来隐藏应用程序中检索和设置选项的细节,这样可以在不更改调用代码的情况下更改存储设置的机制。
##### 4.1 创建选项常量
在创建类之前,我们先创建选项名称的常量。这些常量存储在名为 `basConstants` 的标准模块中:
```vb
' option name constants
Public Const AEP_OPT_LASTSUBFORMOBJ As String = "LastFormObject"
Public Const AEP_OPT_SHOWLASTSFRM As String = "ShowLastFormOnStartup"
Public Const AEP_OPT_MAXIMIZERPTS As String = "MaximizeReports"
Public Const AEP_OPT_APPTHEME As String = "ApplicationTheme"
```
`AEP` 前缀代表 `Access Expert Programming`。
##### 4.2 从表中管理选项
创建 `USysTblOptions` 表后,创建一个名为 `Settings` 的新类模块。该类包含三个方法:
```vb
Private Const CON_SETTINGS_TABLE As String = "USysTblOptions"
Public Function OptionExists(stOptName As String) As Boolean
' Determines if an option exists in USysTblOptions
OptionExists = Not IsNull(DLookup("OptionName", CON_SETTINGS_TABLE, _
"OptionName='" & stOptName & "'"))
End Function
Public Sub SetOptionValue(stOptName As String, stOptValue As String)
' Sets a property in USysTblOptions
Dim stSQL As String
' If the option exists, update it, otherwise add it
If (OptionExists(stOptName)) Then
stSQL = "UPDATE " & CON_SETTINGS_TABLE
stSQL = stSQL & " SET OptionValue = '" & stOptValue
stSQL = stSQL & "' WHERE OptionName='" & stOptName & "'"
Else
stSQL = "INSERT INTO " & CON_SETTINGS_TABLE
stSQL = stSQL & " (OptionName, OptionValue)"
stSQL = stSQL & " VALUES ('" & stOptName & "',"
stSQL = stSQL & "'" & stOptValue & "')"
End If
CurrentProject.Connection.Execute stSQL
End Sub
Public Function GetOptionValue(stOptName As String) As Variant
' Gets a property from USysTblOptions
GetOptionValue = DLookup("OptionValue", CON_SETTINGS_TABLE, _
```
0
0
复制全文
相关推荐










