我正在寻找以下方案的最佳实践/解决方案。
我们有一个多用户ms访问数据库,允许配置“global_settings”。这些设置适用于所有用户。该数据当前存储在表'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.
三江源
答案 0 :(得分:4)
您当前的方法(一行,多列)并不“糟糕”。随着列数的增加,它确实变得有点笨拙,但它会正常工作,直到你有超过255个值存储(Access表中的列数限制)。它还具有以下优点:每列都具有特定类型,并且可以具有与之关联的验证规则。
如果要存储的值超过255个,则可以始终使用多个“全局设置”表,可能基于设置类型(例如,显示设置,文件夹位置等)。您可以通过创建公共函数来集中查找逻辑,以在相应的表中查找指定的值,甚至可以将它们缓存在静态字典对象中,以避免重复敲击表。
至于DLookup()
它本身并不是低效的,并且可以正常工作,尤其是在相对较小的桌子上。 (它的“坏名声”大部分来自于缺乏经验的开发人员很少使用它。)