ms-access:自动编号格式在查询中丢失

Posted

技术标签:

【中文标题】ms-access:自动编号格式在查询中丢失【英文标题】:ms-access: autonumber format lost in query 【发布时间】:2015-01-26 16:51:40 【问题描述】:

我必须为我的工作开发这个数据库,其中一个原因是我有 4 种不同类型的成员需要用于系统:学生、家长、导师和教练。每个都有不同的关联信息,因此它们都有自己的表。另一个表是“笔记”表,我希望能够为每个成员附加无限数量的笔记。

因此,对于每个表格,都有一个格式化的自动编号。对于学生来说,这个数字应该是 S#### 的递增顺序。人数无关紧要,学生人数将远远少于 9,999 人,所以我相信这就是我所需要的。然后还有针对父母的 P####,依此类推。

之所以需要这样,是因为数据库还包含调查问题和回复。我的想法是,调查回复可以通过 member_ID、年份和任期来唯一标识(因为它们只在特定时间开放)。问题是如果没有在查询中找到格式化的自动编号,那么 ID 将重复且不唯一。

所以我的问题是,格式自动编号不起作用吗?我是否必须使用一些 VBA 来构建我自己的自动编号字符串,以便在查询和其他表查找中继续使用?


编辑:所以 HansUp(下)建议使用成员表提供的主列表。我已经设置了这个,因为我没有想到替代方案。基本上流程是这样的:

    数据库用户点击“新生” “新学生”表单和“新成员”一起打开。 “新成员”表单创建一个新 ID # 并分配 S 组,设置生存能力 然后将连接的 ID 传递给“新生”表单 如果正常,则提交所有更改 如果取消,则DoCMD.Undo 用于新学生和新成员。

这样可以吗?我不确定如何将该撤消语句传递给“新成员”表单...

【问题讨论】:

@hansup 我已经考虑过了,但它增加了我试图避免的复杂性,因为这意味着 ID 在数据库中不是唯一的,这让我很紧张。我的目标是让每个成员都有一个唯一的 ID,如果我有办法链接自动编号并使它们在表之间连续... @HansUp 所以你是说有另一个表具有自动编号和其他表用作查找的成员类型?我想这会起作用,除非我不确定如何将它作为一种形式来实现。这是否意味着我需要让数据库用户添加一个新成员和类型,然后分配该成员并键入必要的信息? @HansUp 没关系!这绝对不是不合适的,这就是我现在前进的方式,直到我得到一个更好的主意。它在 VBA 中创建了一个复杂性,如果取消新用户需要删除该新 ID,但除此之外它很简单,只需在表单之间传递值。我想我可以通过做一些并非完全不可能的额外步骤来做到这一点。如果我没有更好的解决方案,那么您的想法就是一个! 一个成员可以有多个角色,例如家长和教练?如果是这样,并且您仍然打算将角色字母和自动编号存储在一个字段中,那么父母/教练是否会在相应的表中具有 P00123 和 C00124 之类的内容,或者您​​是否希望它们作为 P00123 和 C00123 代替?跨度> 不,一个成员不可能属于多个组(如果这样做,他们将作为具有唯一 ID 的单独个人输入以保持完整性)。 【参考方案1】:

保持自动编号字段不变。即使它对您当前的业务需求有帮助,它也无济于事,一旦您的应用程序进一步发展,它就会产生问题。

使用 GUID/UUID 来克服数据库级别(甚至全局级别)的唯一 ID 问题。这样,您将在整个数据库中维护一个唯一 ID,这将有助于您的所有实体只有一个“注释”表。

简而言之:

在表格中添加 GUID 字段 使用触发器或公共函数/宏来生成 GUID 尝试按“类型”将学生、家长、导师和教练合并到一张表中 记住自动编号字段不是连续的(以防某些记录被删除,gab 会在那里) 您始终可以执行字符串连接/格式以在查询中生成 S12355 编号,以将其呈现给您的最终用户。

我猜你的主要目标是为所有用户只使用一个笔记表。 GUID 将是要走的路。 这里是一些起点:How can I generate GUIDs in Excel?

【讨论】:

以上是关于ms-access:自动编号格式在查询中丢失的主要内容,如果未能解决你的问题,请参考以下文章

MS-Access 慢查询

MS-Access 计算报告中已完成任务的百分比

如何检索 MS-Access 中的最后一个自动增量值,例如 Sql Server 中的 @@Identity

如何使用 C# 在 MS-Access 中的查询中使用带有通配符的 LIKE 运算符

MS-Access 平面文件导出错误

如何在 VBA 代码中的 ms-access 中执行查询?