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

Posted

技术标签:

【中文标题】以编程方式重命名 Access 查询中的表【英文标题】:Programmatically rename tables in Access queries 【发布时间】:2009-08-03 13:50:10 【问题描述】:

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

If tableNameInQuery = "tableName" Then

    tableNameInQuery = "newTableName"

End If

PS 中的 C# 或 VB.NET 示例将不胜感激

【问题讨论】:

【参考方案1】:

我有一个快速而肮脏的 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 的评估以保证不区分大小写的比较(如果模块包含“选项比较二进制”)。

【讨论】:

不错的代码!我不能说我需要它(因为我有 3 个搜索和替换加载项可供选择),但我可以看到它在某些时候对我有用,并且对 OP 肯定有帮助。 谢谢汉斯,我也可以选择 VBA。我将在第二天左右尝试代码并报告。 David 您使用什么搜索和替换插件?【参考方案2】:

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

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

赛斯·斯皮尔曼

【讨论】:

我想我没有说清楚,我想重命名查询中对表的引用。不是桌子本身?现在将检查链接。谢谢本 换句话说,您要更改在查询中引用了哪个表。不是表名。您仍然可以使用 Speed Ferret 做到这一点。 是的,这是正确的。 Speed Ferret最新版本只支持到2002年访问。 太糟糕了 Speed Ferret 自 A2002 以来一直没有更新,因为它是一个非常棒的工具。 Rick Fisher 的 Find & Replace 功能不错,但不如 Speed Ferret 精致和用户友好。

以上是关于以编程方式重命名 Access 查询中的表的主要内容,如果未能解决你的问题,请参考以下文章

使用复制表重命名数据库

使用 C# 动态重命名 MS Access 中的列

Oracle查询语句中重命名的列在WHERE中无效?

oracle 查询数据重命名为汉字对效率有影响吗?

如何在 Access 2016 中重命名本地表(而不是本地表的快捷方式)?

如何以编程方式重命名 AWS Glue 目录中的列名