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 个表之间的差异