ms-access - 如何重命名Access DB中的主键值

标签 ms-access key rename

我有一个 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/

相关文章:

PHP:当数组不从零开始时进行数组搜索

excel - 尝试重命名工作表时星号不起作用

Java:DOM 如何从名称列表中重命名节点名称

json - 使用 Lodash 重命名数组/对象中的几个键

java - 如何阻止数据库 Access .accdb 文件

java - Ms Access 使数据库只读并且无法使用 Java 更新

java - 如何遍历 LinkedHashMap 并分别在键和值之间进行选择?

php - 如何使用 foreach 循环访问二维数组的第一级键?

ms-access - AutoExec 模块未启动

Java 不使用 Eclipse 连接到 MS Access 数据库