【发布时间】:2009-08-03 13:50:10
【问题描述】:
我有一个包含数百个查询的 access 2003 数据库文件。我想根据条件重命名查询中引用的所有表
If tableNameInQuery = "tableName" Then
tableNameInQuery = "newTableName"
End If
PS 中的 C# 或 VB.NET 示例将不胜感激
【问题讨论】:
我有一个包含数百个查询的 access 2003 数据库文件。我想根据条件重命名查询中引用的所有表
If tableNameInQuery = "tableName" Then
tableNameInQuery = "newTableName"
End If
PS 中的 C# 或 VB.NET 示例将不胜感激
【问题讨论】:
我有一个快速而肮脏的 VBA 子程序,它可以满足您的需求。 (你能把它翻译成你喜欢的语言吗?)你可以用你的数据库副本试试。 (不要尝试使用您想要保留的唯一数据库副本!)
要在查询中用 "tblBar" 替换 "tblFoo",您可以从 VBE 即时窗口运行它(从 Access,Ctrl+g 会带你到那里)像这样:
call swapTblNamesInQueryDefs("tblFoo", "tblBar")
要实际保存更改的查询定义,可以这样调用:
call swapTblNamesInQueryDefs("tblFoo", "tblBar", "savechanges")
代码:
Public Sub swapTblNamesInQueryDefs(ByVal pstrFind As String, _
ByVal pstrReplace As String, _
Optional ByVal pstrMode As String = "DisplayOnly")
Dim qd As QueryDef
Dim re As Object
Dim strSql As String
Set re = CreateObject("vbscript.regexp")
re.Global = True
re.IgnoreCase = True
re.Pattern = "\b" & pstrFind & "\b"
For Each qd In CurrentDb.QueryDefs
If Left$(qd.Name, 1) <> "~" Then
Debug.Print qd.Name
Debug.Print "Before: " & qd.SQL
strSql = re.Replace(qd.SQL, pstrReplace)
Debug.Print "After: " & strSql
'only save the modified SQL statement if called
'with SaveChanges parameter
'If pstrMode = "SaveChanges" Then
If StrComp(pstrMode, "SaveChanges", vbTextCompare) = 0 Then
qd.SQL = strSql
End If
Debug.Print String(20, "-")
End If
Next qd
Set re = Nothing
Set qd = Nothing
End Sub
编辑:更改了 pstrMode 的评估以保证不区分大小写的比较(如果模块包含“选项比较二进制”)。
【讨论】:
您可以查看Black Moshannon's Speed Ferret。这个工具不是免费的,但我认为它相对便宜,并且会给你非常可靠的表重命名。如果您的时间值得,请检查一下。
如果您使用 Speed Ferret 或其他类似工具,请记住一件事……那就是您重命名表格的顺序非常重要。一定要考虑一下。
赛斯·斯皮尔曼
【讨论】: