防止在不更改表的情况下将不完整的记录添加到表中

  • 本文关键字:记录 添加 情况下 vba ms-access
  • 更新时间 :
  • 英文 :


所以我在处理Access表单时注意到,当我没有填写所有字段并关闭表单时,我填写的字段会填充到我的表中,就像一种"不完整";记录,这打乱了我正在进行的编号递增系统。是否有任何方法可以丢弃表单关闭时输入的所有数据,而不在表属性中要求某些字段?我不想这样做,因为它在试图关闭时会发出信息,如果可能的话,我想避免

自动编号递增的问题和不想保存缺少字段或值的记录的问题是两个巨大的不同问题。

尝试转到一个新的记录,键入一些内容,点击esc 2次(或者转到功能区,使用un-do,现在退出表单。

记录现在将为空,如果退出,则不会创建任何记录(但是,自动编号将增加)。因此,自动编号增加和保存记录是两件非常不同且独立的事情。

当您开始在表单上的空白新记录中键入时,该记录将变为";"脏";,并且自动编号被递增并分配给该记录。

如果您不希望保存缺少内容的记录,那么在更新前表单事件中,您可以检查缺少的字段,甚至错误或错误的值,如果您将cancel设置为true,则不会保存或创建记录。

因此,您不需要在表设计中设置必需的。通常有各种各样的东西你可能想要检查。假设您可能需要名字或姓氏(其中一个或另一个),这些事情不能在表级别完成。因此,您可以根据需要进行复杂的记录验证。如前所述,在大多数情况下,您可以也会在更新事件之前使用表单。

但是,是否要防止空白记录或保存的记录中缺少信息?当然,没有问题——这是一个常见的要求。

上面有零,但绝对零与自动编号问题有关。

Access将在第一个键键入表单后立即发出并设置自动编号。如前所述,您可以使用undo,退出后,将不会创建或保存任何重新锁定。

但是,创建的自动编号将被丢弃并跳过。原因是多用户操作。如果两个用户移动到一个新的空白记录,那么当其中一个用户开始键入时,就会分配自动编号。(即使不保存记录)。当第二个用户开始键入时,他们还会得到一个自动编号。现在,如果两个用户都点击undo(或esc键),那么两个用户就可以退出,并且您注意到2个自动编号将被跳过。如前所述,访问是通过这种方式进行的,因此在添加记录时不能为两个用户分配相同的PK值。

因此,自动编号永远不能被视为不跳过。当然,删除记录呢?再说一遍,你有空白。

自动编号不能用于发票编号或某种外部值。自动编号永远不能被赋予比一些"数字"更大的意义;"随机";如PK值。如果这些数字只是连续的,没有间隔,那么你就不能将这些数字用于外部业务。

如果你需要一个业务递增编号,比如发票,或工作编号或其他什么?您需要创建自己的列,并在代码中管理增量。(例如在更新前事件中指定该编号,但正如我所指出的,您也可以出于任何旧原因取消更新前事件,包括缺少字段,或者即使这是一周中的奇数天(任何让你的船漂浮的标准都可以在这里使用,因此当他们离开时,你可以提示他们,并告诉他们记录不完整。或者在这些特殊情况下,你甚至可以让他们在没有保存的情况下离开,但某种消息可能会更好。

所以,如果你不想保存一些不完整的记录?然后在更新事件之前将您想要的内容放入表单中,并将cancel设置为true(该事件具有完全为此目的构建的cancel选项)。然而,保存或阻止记录保存的目标与自动编号中没有间隙的问题关系不大——这是你无法控制的,也是你无法阻止的。(防止间隙)。

如果您需要一些外部业务编号系统,则不能使用自动编号。事实上,用户甚至不应该看到自动编号,它们是开发人员在表之间建立关系的工具。

因此,这些内部内务自动编号不能用于需要某种没有缺口的序列号的外部业务流程,因为这不是它们的目的,更糟糕的是,无论如何,你都无法控制或避免这些数字的缺口。

您可以撤消,但自动编号增量意味着将跳过和正在跳过的编号,这是数据库系统的正常操作。

由于该数字是自动的,由数据库系统控制,而不是由开发人员控制,因此您只能接受它的工作方式并使用它,但您无法更改该自动数字的行为。这适用于所有和任何数据库系统。事实上,当您重新启动时,sql server的更高版本将向前跳过10000。

如果你不想保存一条记录,那么就输入你的代码来防止这种情况发生。

如果您需要一些递增数字的单独发行以供业务使用?然后在数据库中添加一列,并设计增量系统,使其以您想要的任何方式工作——但您无法控制内置系统,而且它的设计也没有考虑到您的目标。