MS Access 全局和设置最佳实践

MS Access Globals & Settings Best Practice

我正在寻找以下场景的最佳practice/solution。

我们有一个允许 "global_settings" 配置的多用户 MS 访问数据库。这些设置适用于所有用户。此数据当前存储在 table 'tbl_global_settings' 中。 (我们有一个 table user_settings 来处理个别的东西)

目前,table 的结构是单个记录,其字段名称代表特定设置(我知道这很糟糕)。例子

tbl_global_settings.reminders_red = "7"
tbl_global_settings.reminders_yellow = "15"

这些值用于系统提醒的条件格式到期日期 - 当提醒在 15 天内到期时,它将显示为黄色,在 7 天内到期将显示为红色。

加载数据库时,会加载名为 frm_global_settings 的隐藏表单,其中包含 table tbl_global_settings 中的所有字段。然后可以根据需要通过引用表单字段轻松访问这些内容。

这非常完美。然而,随着该系统在过去几年中的发展,字段数量增加了 (60+),这似乎不是最佳解决方案。

我正在考虑使用 Key、Parameter 样式方法将其移动到更瘦的 table。这让我很担心,因为在 MS Access 中使用 DLookup() 似乎经常因效率低下而爆破。示例:

Key                   | Paramater
---------------------------------
reminders_red         |         7
reminders_yellow      |        14

这些值很少改变但经常被调用,我想知道是否有人可以评论是否可以在启动时将这些数据加载到全局变量或全局数组中?示例:

Public remindersRed As Integer
Public remindersYellow As Integer

remindersRed = nz(Dlookup("parameter","global_settings", "[key] = '" & "reminders_red" & "'")) 
etc.

谢谢

您当前的方法(一行,多列)不是 "awful"。随着列数的增加,它确实变得有点笨拙,但它会正常工作,直到您要存储的值超过 255 个(Access 中列数的限制 table)。它还具有每列都有特定类型并且可以具有与之关联的验证规则的优点。

如果您要存储的值超过 255 个,您总是可以使用多个 "global settings" table,这可能取决于设置类型(例如显示设置、文件夹位置等)。您可以通过创建 Public 函数来集中查找逻辑,以在适当的 table 中查找指定的值,甚至可能将它们缓存在静态字典对象中以避免重复点击 table .

至于 DLookup(),它并非天生效率低下,而且可以正常工作,尤其是在相对较小的 table 上。 (它的大部分 "bad reputation" 是因为缺乏经验的开发人员使用不当。)