VBA代码按顺序添加数字和数据行
Posted
技术标签:
【中文标题】VBA代码按顺序添加数字和数据行【英文标题】:VBA code to add number in sequence and rows of data 【发布时间】:2018-07-03 17:08:32 【问题描述】:我正在将旧的 2010 Access 数据库转换为 Access 2016,该数据库最初是在 Access 2000 中构建的。我的客户表使用 autonumber 字段来生成 CustomerId
号码。
我使用此字段连接到我目前有 13,000 条记录的维修表。我无法在新数据库中维护该字段,因此我想是否可以将表导出到 Excel 文件,而不是按缺少的 ID 号顺序添加数字以及填充名称和地址字段以进行临时导入到新数据库,导入后我可以删除这些字段。
不知道有没有其他方法可以维护这个id。我使用旧 ID 字段名称导入了客户表,但访问权限不允许我使用此字段创建与新维修表的关系。
ID 编号从 1 变为 8,437,但电子表格中只有 7,884 条记录。
【问题讨论】:
这似乎是您想要在 Access 中而不是 Excel 中执行的操作类型。您是否尝试过制作相关表格的副本,按照您想要的方式编辑副本,重命名旧表格,然后将编辑后的副本重命名为原始名称? 您无法确定自动编号字段的值。不是将旧数据导入现有的新表,而是将旧表作为新表导入,包括结构和数据。这不是 VBA 的问题。 差距是被删除的记录。如果这是具有int
主键和 identity
规范的 SQL Server,您将遇到完全相同的问题,这几乎是标准和最佳实践。在 SQL Server 中你可以set identity insert on
;不确定 Access 是否有类似的东西,或者它是否允许您在 autonumber 列中插入值。
所以我四处询问,看来您可以在 Access 中使用普通 SQL 插入自动编号列(UI 不允许您这样做)。
只是为了添加一些东西 - 如果您开始插入然后取消,自动编号可能会有间隙。所有自动编号保证是您获得的密钥是唯一的,而不是连续的。如果你想要连续的序列,你需要别的东西。我会考虑使用计数表作为此类问题的一般解决方案。 OTOH,如果数字有意义(通常它们不应该!),它们可能不应该是一个自动编号。
【参考方案1】:
重新排序 ID 的最佳方法是利用“级联更新相关字段”。 你要做的就是
删除与您的表的所有关系 将 ID 字段更改为 Number - Long Integer 重新添加关系,强制级联更新 将所有索引移到一个大于当前最大 ID 的数字 从 1 开始重新编号 删除所有关系 删除 ID 字段 保存表格 将 ID 字段重新添加为自动增量 - 主键 重新添加关系ReImcrementCustomerIDs:Sub
Option Compare Database
Option Explicit
Public Sub ReImcrementCustomerIDs(ByVal FirstIndex As Long)
Dim rs As DAO.Recordset
Dim db As Database
Dim SQL As String
Dim ID As Long
Set db = CurrentDb
SQL = "SELECT CustomerID FROM Customers ORDER BY CustomerID;"
Set rs = db.OpenRecordset(SQL, dbOpenDynaset)
Do While Not rs.EOF
rs.Edit
rs("CustomerID") = FirstIndex
FirstIndex = FirstIndex + 1
rs.Update
rs.MoveNext
Loop
End Sub
用法
ReImcrementCustomerIDs 50000
ReImcrementCustomerIDs 1
【讨论】:
以上是关于VBA代码按顺序添加数字和数据行的主要内容,如果未能解决你的问题,请参考以下文章