2

概括:

我有一个表,它有一个唯一的主键来标识每条记录。我还有另外三个可以识别记录的字段:

  • 类别
  • 类别编号
  • 重复号码

当我添加新记录并选择类别时,如何让 CategoryNumber 根据它是否重复正确递增。

请注意,这是一张大桌子。这仅仅是从 excel 到 access 的升级。

tldr:

昨天我问了如何处理Access中的多个键。可能是我没有问对问题,因为我的问题今天更加令人费解。

这是我正在尝试做的事情以及我陷入困境的地方。

我正在创建一个数据库来跟踪我用不同相机拍摄的各种不同胶片和格式的胶片照片(每张照片总共有 18 条不同的独立信息),这些照片可以追溯到近 15 年。几年前,我将数据保存在 MS Excel 中,并对输入表单进行了编程,以完成我将要解释的事情。

我想以两种方式跟踪照片。第一个是主照片编号,它可以让我知道我的文件中有多少张照片。这是一个序列号,我从未打算删除该序列中的某些内容。这将是一个唯一标识每张照片的数字。我将其视为整个数据库的主键。

但我也想根据一般的组或类别来归档幻灯片、底片和透明胶片,以便在需要提交照片或寻找特定内容时可以快速提取它们。所以我还添加了一个类别标识符(例如,风景也附加了一个“LS”名称或日落为“SS”等)。我还想为每个类别中的每张幻灯片保留一个连续的序列号。因此,例如,我的数据库中的第一张照片有 PhotoID = 3、Category = LS 和 CategoryID = 1。再往下我有 PhotoID = 14、Category = LS 和 CategoryID = 2。

现在除了这些,我还有另一个需要跟踪的数字,那就是如果我对同一场景进行了重复曝光。为此,我只是为每张照片添加了一个 DuplicateNumber。如果它没有重复,则 DuplicatNumber 为 0,如果它有一个重复,则 DuplicateNumber 为 1、2 个重复、DuplicateNumber 为 2,依此类推。

所以我有两种方法可以在我的文件中找到任何照片。通过在数据库中连续但不在我的物理文件中的 PhotoID,或者通过 Category、CategoryID 和 DuplicateNumber 的组合,这是我物理归档照片的方式。

现在在 Excel 中,当我打开表单时,我首先必须通过表单上的单选按钮选择将照片放入的类别。然后我会填写照片的所有相关数据。当我执行表单时,它会在主表中找到最后一个数字,将其递增并将所有数据添加到新记录中。然后它将激活我选择的类别的类别表,确定该表中的最后一个数字,增加它并在那里添加新数据。

一个重要的注意事项是,除非我将其设为 1、2 等,否则默认情况下 DuplicateNumber 始终为 0。它从未被计算过,但我输入了它。

当我创建幻灯片标签(“报告”)时,我会以这种格式(1LS1.0、14LS45.0、15LS45.1)包含主要的 PhotoID、CategoryName、CategoryID 和 DuplicateNumber,以及拍摄的位置和日期。

但现在我不想再使用 Excel 并尝试将数据库迁移到 MS Access。所以我有一个名为 PhotoDetails 的主表。

PhotoID 是此表中的主键。它有一个 PhotoCategory 字段,该字段是一个与另一个名为 Category 的表相关的数字。它的主键是 PhotoCategoryID,也是 PhotoDetails 中的外键。PhotoCategoryID 是一个标识每个类别的数字。在我所有类别的列表中,LS 排在第 11 位。但这就是我卡住的地方。

我在 PhotoDetal 表中有 CategoryNumber,它是标识每个类别中照片的编号,以及 DuplicateNumber,标识重复的数量。我想不通的是,当我添加新照片时,如何增加 CategoryNumber?我现在拥有的表格允许我输入所有数据,当我单击输入下一个时,它会自动调整 PhotoID 键,但是 CategoryNumber 呢?我不记得每个类别的最后一个数字是什么,以便我自己输入那个数字。除非我通过将所有数据存储两次来模仿我在 Excel 中所做的事情,一次是在 PhotoDetails(又名 Excel 中的 Master Sheet)中,另一次是在多个类别表中。我希望 Access 可以为我提供一种解决方法。

目前,我拥有的关系是与 PhotoDetails 以 1-M 关系链接的类别表。我还有几个其他表都以 1-M 关系链接(例如,表 Film 存储我使用过的不同电影,而 1-M 关系让我可以将什么电影链接到每张幻灯片,并且大多数其他数据都存储在其中方法)。

我有 31 个不同的类别。每张照片都有一个类别和一个类别 ID 编号,以及一个重复编号。我将选择数据输入中的类别和 DuplicateNumber,但我希望 CategoryID 编号和 PhotoID 自动递增。进行此操作的正确方法是什么,我只需要保留一个 PhotoDetail 表,该表不会像我在 Excel 中那样为每个类别重复。

4

2 回答 2

1

好的,所以基本上你要做的是“规范化”你的数据

通常你会有两张桌子

照片
PhotoID(数据类型:自动编号 - 用户通常看不到 - 主键)
PhotoRefID(DT:可能是数字或文本 - 引用物理编号)
CategoryID(DT:数字 - 长整数 - 类别表的键)
重复(DT:数字 - 也可能很长 - 如果这只是一个计数)
- 或 - DuplicateOf (DT:数字 - 长整数 - 引用它的副本)

类别
CategoryID(DT:自动编号 - 主键)
说明(DT:文本)

您将使用关系(工具->关系)将两个类别 ID 放在一起。

然后,您可以使用这些表来构建您正在寻找的表单和查询。

注意:如果您的照片可以属于多个类别,那么您将需要第三个中间表来连接它们。就像是:

PhotoCategories
PhotoCategoryID (DT: Autonumber, Primary Key)
PhotoID (DT: Number Long Integer)
CategoryID (DT: Number Long Integer)

于 2009-02-05T19:05:04.697 回答
0

我会考虑通过添加代码来廉价地做到这一点,这样当您尝试添加新记录时,它会在数据库中搜索具有类别/重复/等的最高数字,然后您可以在添加之前在代码中增加它新纪录。

没有简单的方法可以在 Access 中自动获取此功能,除非您将表拆分为更多表。

-亚当

于 2009-02-05T19:03:02.483 回答