【问题标题】:Custom primary key for MS AccessMS Access 的自定义主键
【发布时间】:2015-03-16 02:21:23
【问题描述】:

我是 microsoft access 的新手。我只是想知道如何使用创建自定义主键?比如 abc-123 格式?

【问题讨论】:

  • 您实际上希望abc 部分如何出现在不同的元组中。我认为一些验证可能会有所帮助。

标签: ms-access


【解决方案1】:

这取决于您希望如何创建 abc-123 值。

如果您想在代码中自己创建它们,只需创建一个 Text 列并将其用作您的主键。

如果您希望 Access 来创建这些值……那是不可能的。 Access 唯一能够自动生成的是增加数值(数据类型AutoNumber)。

因此,您可以做的最好的事情是在内部使用 AutoNumber 作为实际的主键,并从中创建 abc-123 值,仅用于显示。

以下是一些如何做到这一点的示例,来自我过去回答的类似问题:


免责声明:我不知道类似的方法是否适用于您的情况。
如果没有,您需要提供更多信息,您希望如何准确地创建您的号码:

  • 你想增加数量吗?
  • 您希望字母改变/“增加”/始终保持不变吗?

【讨论】:

    【解决方案2】:

    实际上,如果使用 2010 或更高版本,您可以创建表触发器。表触发器可以获取一些字段(从中获取 abc),然后获取一些其他字段(seq num),然后将 + 1 添加到值。

    “空气”代码如下所示:

    表触发器的美妙之处在于它在表(数据引擎)级别运行,因此如果您使用 ODBC、VB.net、FoxPro、Access 等打开数据库,那么 PK 密钥将始终为您自动生成。

    【讨论】:

    • 谢谢,阿尔伯特。我曾尝试使用DMax() 进行类似的操作,当从 Access 本身插入记录时它可以工作,但它会导致其他应用程序的 INSERT 失败。 (“数据宏中不允许使用 DMax。”)我一直在 Access 2010 中尝试对上述内容进行变体,但如果我的 LookUpRecord 尝试在数据宏所属的同一张表上执行 SELECT,我会得到“The ' LookUpRecord' 宏操作的 'Look Up A Record In' 参数的值无效。” (来自不同表的 SELECT 似乎没问题。)您能否更新您的答案以提供一个工作示例?谢谢!
    • 以上示例是一个工作示例(如果数据库中不存在前缀,则会丢失代码)。如果您仔细查看左上角,则在更改窗口标题之前会显示“custpart”。因此,发布的代码是在与更新代码相同的表上运行的存储过程。重要的部分是当您引用字段名称时,您是作为触发器还是查询的结果引用当前表?因此请注意我是如何使用别名来区分这两个表的。
    • 您是否偶然在 Access 2013 中创建了您的示例?我刚刚在 Access 2010 中再次尝试了完全相同的操作,并在尝试保存更改前宏时遇到了我在之前的评论中引用的相同错误。 (请参阅屏幕截图here。)我注意到您的屏幕截图中的宏编辑器布局与我的略有不同,所以我想知道您的方法是否是 Access 2013 中引入的增强功能的结果。
    • 再次感谢阿尔伯特。我下载了您的示例数据库并且现有的数据宏工作正常,但是一旦我在 Access 2010 中“触摸”它,我就不再能够保存它(与上述相同的错误)。我打开了一个新问题here
    猜你喜欢
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多