我有一个 MS Access 数据库,其主键位于父表和 82 个其他表上。 新数据将以新的主键名称出现
Before New
RS182 X182RS
RS188 X188RS
RD301 X301RD
有没有办法批量重命名数据库中所有表的主键值,因为我想将所有以前的历史数据关联到新的名称值。
最佳答案
根据该示例,新旧主键值之间似乎存在一致的模式。
? "X" & Right("RS182", 3) & Left("RS182", 2)
X182RS
如果是这样,则使用一系列 UPDATE 语句将旧值替换为新值。但首先要备份数据库以妥善保管。
例如,如果 YourTable 的主键字段名为 ID:
UPDATE YourTable
Set ID = "X" & Right(ID, 3) & Left(ID, 2);
如果 YourTable 包含在任何定义的关系中,您首先需要删除这些关系(或至少取消选中它们的“强制引用完整性”选项),然后在更新主键值后恢复这些关系。
此外,从 ID 中删除主键属性应该可以使更新更快地完成。之后重新分配主键。
由于您有 82 个表需要进行此转换,因此您可以创建一个 VBA 过程来执行此转换。
Public Sub ConvertPKeyValues(ByVal pTable As String, _
ByVal pField As String)
Dim db As DAO.Database
Dim strSql As String
strSql = "UPDATE [" & pTable & "]" & vbCrLf & _
"Set [" & pField & "] = 'X' & " & _
"Right([" & pField & "], 3) & " & _
"Left([" & pField & "], 2);"
Set db = CurrentDb
db.Execute strSql, dbFailOnError
Set db = Nothing
End Sub
使用每个表名称以及该表中相关字段的名称调用该过程。您还应该为 dbFailOnError 暴露的任何问题添加错误处理程序。
关于ms-access - 如何重命名Access DB中的主键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9397620/