2

我正在寻找以下场景的最佳实践/解决方案。

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

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

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

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

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

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

我正在考虑将其移至使用 Key、Parameter 样式方法的更窄的表中。这让我很担心,因为在 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.

谢谢

4

1 回答 1

4

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

如果要存储的值超过 255 个,则可能始终使用多个“全局设置”表,可能基于设置类型(例如显示设置、文件夹位置等)。您可以通过创建一个公共函数来集中查找逻辑以在适当的表中查找指定的值,甚至可能将它们缓存在静态字典对象中以避免重复访问表。

至于DLookup()它本身并不是低效的,并且可以正常工作,尤其是在相对较小的桌子上。(它的大部分“坏名声”来自于没有经验的开发人员使用不当。)

于 2015-01-15T10:42:56.320 回答