【问题标题】:Automatically renumber records in an Access table after data changes have been made数据更改后自动重新编号 Access 表中的记录
【发布时间】:2014-03-12 02:47:02
【问题描述】:

这是我的数据示例:


ID - autonumber ~ 是他们的primary key
Week - 字面意思是仔猪出生的那一周
Sow Order - 母猪编号

规则:
1. 如果仔猪在同一周出生,不管他们的母猪。仔猪编号继续
2. 如果小猪下周出生,编号返回0001然后规则1。

添加仔猪的方式是week + sow + (number of piglets)。例如(10),它会在 week=01 & sow=01 产生十头仔猪 0001 到 0010。

问题是,如果用户输入的仔猪数量有误怎么办?根据图片01 01 has two piglets,如果不是2个呢?比如说,它是 3。所以用户需要删除它,然后将编号 必须 调整为..

01 | 01 | 0001  
01 | 01 | 0002  
01 | 01 | 0003  
01 | 02 | 0004  
01 | 02 | 0005 

做这种事情的正确方法是什么?

【问题讨论】:

  • 您正在生成 Piglet 编号。解释清楚如何生成仔猪编号
  • 为什么必须重新编号母猪 02 的现有仔猪?为什么母猪 01 中新发现的第 3 头仔猪不能编号为 0005?我问的原因是因为一旦您将 ID 号分配给“事物”并且您在其他地方(即在另一个表中)使用该 ID 号,那么通常应该尽可能避免更改现有“事物”的 ID 号。
  • 好吧,用户希望它被连续编号,因为添加仔猪取决于有多少仔猪(哪些数据是按批次来的)所以它必须遵循农场每头猪的协议.这种输入错误很不寻常,但从数据管理软件来看,这很重要。 @SATSON 它会根据用户输入的数量生成小猪。
  • 您希望使用纯 SQL 还是在后端的帮助下完成?
  • ID 通常是抽象的,正如 Gord 指出的那样,更改它们(永远)不是一个好主意。要求它们是连续的或可编辑 真的 意味着存在另一个用户字段(和/或它不是 PK 的候选者)。因此,ID 可能是自动编号并且可能永远不会向用户显示,而UserTag 列显示“000N”。然后用户可以编辑它们,或者您的代码可以根据需要重新排序它们,并且没有任何中断。任何可以改变的东西(比如电话号码)都不适合 PK。

标签: .net database vb.net ms-access


【解决方案1】:

如果 Access 数据库版本至少是 Access 2010,则可以使用事件驱动的数据宏来强制执行编号方案。对于名为 [Piglets] 的表

带有 [AfterInsert] 的数据宏:

[更新后]:

[删除后]:

和一个命名数据宏 [RenumberPiglets]:

即使表格是从外部应用程序(例如,VB.NET 或 C#)更新的,也会自动重新编号。

对于 Access 数据库版本 2007 及更早版本,必须将类似的逻辑写入用于更新表的数据输入表单中。

【讨论】:

  • 我已经下载了您的示例,但是如何打开您创建的宏?每当我单击创建>宏时,它都会创建一个新宏。我怎么能看到你在那里做的那个?我试图删除和它的自动调整,我只需要学习更多。谢谢
  • @AdorableVB 查看文档here
  • 谢谢你,我会将你的工作整合到我的应用程序中,因为我已经过了截止日期。大声笑虽然我还没有真正理解这一切,但我会在我完成后。非常感谢你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-17
相关资源
最近更新 更多