【问题标题】:Access Custom Primary Keys访问自定义主键
【发布时间】:2013-05-04 14:04:34
【问题描述】:

我想在我的 Access 数据库中创建自定义主键。

数据库将是多用户的,所以我需要一种方法来确保每个键都是唯一的,即使多个用户尝试向同一个表中添加新记录。

我需要创建自定义主键的原因是因为我的数据库启动了一个审计跟踪,该审计跟踪进入另一个我无法控制的外部系统。

但是,这个其他系统确实允许使用单个 12 个字符长度的用户定义字段,以便我们传递我们选择的数据。

我想使用该用户定义的字段来记录一个 12 个字符的代码,该代码具有我可以稍后推断的各种缩写(例如,前 2 个字符与我们组织中的一个部门相关,接下来的 3 个字符与产品相关,并且等等……)

从我目前阅读的内容来看,Access 中的自定义键似乎是一个雷区。

不过,就我的目的而言,我至少可以看到在组合 Access 的自动编号字段以帮助构建我想要的主键方面至少有所妥协。

这就是我的想法:

我稍后想要推断的代码部分可以由我们的用户构建,例如,如果部门是人力资源部,前 2 个字符总是可以是“HR”。

然后假设我让访问中的自动编号针对填充了我的“HR”条目的同一个表中的一个字段运行...我可以获得第三个字段来自动连接同一个表中的 2(不是查询)...?即像这样:

| Department | AutoNumber | CustomPrimaryKey |
|    HR      |     1      |        HR1       |

如果这可以在 VBA 中的某个事件上完成,那就太好了(给我看代码!:))

第二部分是我是否可以让自动编号与前导零连接,以确保自定义主键的“唯一编号”部分介于 99999 和 00001 之间,即占用相同的 5 个字符空间,如下所示:

| Department | AutoNumber | CustomPrimaryKey |
|    HR      |     1      |     HR00001      |
|    HR      |     2      |     HR00002      |

我需要超过 100,000 个条目的可能性很小。

我希望这是可能且安全的!

【问题讨论】:

  • 对不起 - 我对 VBA 有点陌生,但想象一下我想要做的是将 Department 和 AutoNumber 的串联存储在 VBA 变量中,然后将其推送到表单的文本框中形式的事件......虽然不确定什么事件是合适的。我也可以想办法用LEN 获得前导零。

标签: ms-access ms-access-2007 vba ms-access-2010 ms-access-2013


【解决方案1】:

我宁愿将此作为评论而不是答案,因为我认为您并不完全清楚自己需要什么,但我会尽力回答。另外,我不会“给你看代码!”正如你所建议的那样,它什么也没教。

在自动连接第三个字段的第一个问题中,实际上是如何填充字段的问题。

如果是通过表单输入,那么您可以在控件的更新事件期间将所有组件字段连接到关键字段中,这些组件字段正在被填充。在 VBA 中,您可以通过访问表单的记录集轻松引用记录的成员。

如果您通过文件导入来填充字段,并且您已经有了导入规范,那么您将执行不包括关键字段的导入,然后打开您导入的表的记录集并遍历记录集。您可以了解 ADO 记录集 here. 再说一次,我不只是要编写代码,因为我真的不知道您需要它做什么。

如果您通过自己的解析器填充该字段,那么我可能不必解释如何执行此操作。

对于第二个问题,您可以使用 format() 函数轻松右对齐字符串中的数字。例如,format(2,"00000") 将产生“00002”,format(210,"0000") 将产生“0210”。您还可以使用 string() 函数来确定要在其中对齐变量的 0 的数量。例如format(2054,string(12-len("HR"),"0")) 会给你“0000002054”

另外一点我要提醒您的是,说“我不太可能……”之类的话并且不为此做好准备绝不是一个好主意。墨菲定律是 B 中的一个痛点。您应该考虑处理超出密钥可以处理的限制的条件。

【讨论】:

  • 谢谢比尔。很抱歉我的“给我看代码”评论——这有点开玩笑。我从编码开始,但不希望任何人为我做我的工作......只需要在正确的方向上稍微推动一下(就像你在这里给我的使用 format 和 @ 987654326@ 帮助构建我的自定义密钥,这将非常有用)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-26
  • 1970-01-01
  • 2017-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多