MS Access 在多个表的列字段中查找和替换文本

Posted

技术标签:

【中文标题】MS Access 在多个表的列字段中查找和替换文本【英文标题】:MS Access find and replace text in column fields multiple tables 【发布时间】:2021-03-21 17:36:00 【问题描述】:

我有一个 MS Access 数据库,其中包含有条件需要重命名列的 100 多个表。

每张表都需要打开,任何包含以下字符串的字段名,“AAA_”需要替换为“BBB_”。

有没有办法自动化这个过程?我试图避免手动进行此练习。我真的不知道 vba,我尝试了一些更新查询但无济于事。使用本机查询设计功能时,它似乎只查看字段名称的相应记录,而不是字段名称本身。

感谢您的任何见解。

【问题讨论】:

【参考方案1】:

下面的函数可以用来做你想做的事。由于您所指的条件不清楚,您需要根据需要进行调整

    Function renameField(tableName As String, fieldName As String, newFieldName As String) As Boolean

        On Error GoTo EH

        Dim db As DAO.Database
        Dim td As DAO.TableDef
        Dim fd As DAO.Field

        Set db = CurrentDb
        Set td = db.TableDefs(tableName)

        For Each fd In td.Fields
            If fd.Name = fieldName Then
                fd.Name = newFieldName
                renameField = True
                Exit For
            End If
        Next
        
        Exit Function
        
    EH:
        renameField = False
        
    End Function

调整可能看起来像这样

 Sub renameFldsInAllTables()

    Dim db As DAO.Database
    Dim td As DAO.TableDef
    Dim fd As DAO.Field
    Set db = CurrentDb
    
    For Each td In db.TableDefs
        For Each fd In td.Fields
            ' If Left(fd.Name, 4) = "AAA_" Then
            If InStr(1, fd.Name, "AAA_", vbTextCompare) Then
                fd.Name = Replace(fd.Name, "AAA_", "BBB_", 1, 1)
            End If
        Next
    Next

End Sub

【讨论】:

谢谢你!有没有办法调整函数,使它看起来在字符串的任何地方?要替换的子字符串可以存在于中间。例如,在旧名称“G_LOI_AAA_DT”中,我希望将“AAA”替换为“BBB”。 我调整了代码,使其可以在“AAA_”字段名称中的任何位置查找。 这将节省我的工作时间!我真的很感激,感谢您的帮助和洞察力!【参考方案2】:

这听起来像是一个非常奇怪的请求。为什么要更改数据库中的各种字段名称?看来您的数据设计很差或很弱!

将此代码放在表单上的按钮后面。

Private Sub Command1_Click()

Dim counter1 As Long
Dim counter2 As Long
Dim tbl As TableDef
Dim fld As Field
    For Each tbl In CurrentDb.TableDefs
    Debug.Print tbl.Name
        'If tbl.Name = Table Then
            For Each fld In tbl.Fields
            Debug.Print fld.Name
            If fld.Name = "Pictures" Then
                fld.Name = "Picture"
                Exit For
            End If
            Next
        Exit For
        'End If
    Next
End Sub

【讨论】:

以上是关于MS Access 在多个表的列字段中查找和替换文本的主要内容,如果未能解决你的问题,请参考以下文章

在 MS Access 或 SQL Server 中查找 2 个表之间的差异

conn.GetSchema 查找表的主键 - MsAccess

一次查询中 2 个表的 MS Access 总和

数据表中的 MS-Access 未绑定组合框?

在 MS ACCESS 中查找完成的字段百分比

使用条件连接 MS Access/SQLQuery 中的多个表