以编程方式重命名Access查询中的表

时间:2009-08-03 13:50:10

标签: c# vb.net ms-access

我有一个包含数百个查询的Access 2003数据库文件。我想根据条件重命名我的查询中引用的所有表

If tableNameInQuery = "tableName" Then

    tableNameInQuery = "newTableName"

End If

任何建议或文章都会很棒。

由于

PS在C#或VB.NET中的一个例子将不胜感激

2 个答案:

答案 0 :(得分:6)

我有一个快速&脏VBA sub做我想你想要的。 (你能把它翻译成你喜欢的一种语言吗?)你可以用你的数据库副本来试试它。 (不要尝试使用您想保留的数据库的唯一副本!)

要在查询中替换“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的评估以保证不区分大小写的比较(如果模块包含“选项比较二进制”)。

答案 1 :(得分:0)

您可以查看Black Moshannon's Speed Ferret。这个工具不是免费的,但我认为它相对便宜,并且会给你非常可靠的表重命名。如果您的时间值得一试,请查看。

如果您使用Speed Ferret或其他类似的工具,请记住一件事......那就是重命名表格的ORDER非常重要。一定要考虑一下。

塞特斯皮尔曼