2011-11-07 21 views
1

摘要:为什么Docmd.Rename可能会导致不会通过另一个数据库链接更改名称的表?使用Access上的DoCmd.Rename问题:未重命名的链接名称

我想修复一个需要TLC的旧数据库。其中一部分是删除大量未使用的cruft,其中包括一些表格。第一部分是如果在这些表上调用DoCmd.Rename的VBA过程,则使用DELETE_进行重命名。

“删除”似乎工作正常 - 但是当我尝试使用链接表管理器从另一个数据库引用表时,根本没有发生重命名。如果我返回并加载该数据库,则表名称会更改。

是否最好使用TableDefs().Name进行重命名?这是一个更好的方法吗?我认为像Rename这样的“官方”方式会更好。

我在Win7/64上使用Access 2007。这些文件采用MDB格式。

回答

0

是否希望重命名链接数据库中的表?如果是这样,您可以使用OpenDatabase来引用链接的Access数据库。你可以尝试以下几行:

Dim dbLink As DAO.Database 
Dim dbCurr As DAO.Database 
Dim ws As DAO.Workspace 
Dim rst As DAO.Recordset 
Dim tdf As TableDef 

Set ws = DBEngine.Workspaces(0) 
Set dbCurr = CurrentDb 

For Each tdf In dbCurr.TableDefs 
    sConn = tdf.Connect 
    sSource = tdf.SourceTableName 
    sName = tdf.Name 

    If InStr(sConn, ";DATABASE=") > 0 Then 
     strdb = Mid(sConn, InStr(sConn, ";DATABASE=") + 10) 

     If InStr(sConn, "PWD") > 0 Then 
      sPWD = Left(sConn, InStr(sConn, ";DATABASE=")) 
     Else 
      sPWD = vbNullString 
     End If 

     If Dir(strdb) <> vbNullString Then 
      Set dbLink = ws.OpenDatabase(strdb, False, False, sPWD) 
      dbLink.TableDefs(sSource).Name = "DELETE_" & sSource 
     End If 
    End If 

Next