Microsoft Access 2010相对寻址问题

时间:2012-12-07 03:46:02

标签: vba ms-access relative-path ms-access-2010

在得知MS Access仅允许绝对寻址其表的链接之后,该问题的唯一解决方法是通过使用VBA代码,我开始编写一种方法来实现它。我发现了一个相对简单的代码,并根据我的目的进行了修改,你可以在下面看到。然而,这种方法似乎有两个主要问题。

1 - 我似乎无法链接Excel Spreedsheets,因为第一次尝试导致我的整个模块损坏自己。有没有办法将它们联系起来?

2 - 更重要的是,每次打开文件的大小都会增加,而对数据库的唯一修改就是在模块中添加了代码。我已经做到了,所以它会在打开文件时自动执行,关闭后我注意到它的大小增加了几百kbs。这令人不安。

此外,如果有更好的方法,我会非常有兴趣了解它是如何完成的。

Public Sub RelinkTables(newPathName As String, backEnd As String, excel1 As String, excel2 As String)
Dim Dbs As Database
Dim Tdf As TableDef
Dim Tdfs As TableDefs
Set Dbs = CurrentDb
Set Tdfs = Dbs.TableDefs
'Loop through the tables collection
   For Each Tdf In Tdfs
    If Tdf.SourceTableName <> "" Then 'If the table source is other than a base table
        If Tdf.SourceTableName = "CClas$" Or Tdf.SourceTableName = "Sheet1$" Then

        Else
            Tdf.Connect = ";DATABASE=" & newPathName & backEnd 'Set the new source
            Tdf.RefreshLink 'Refresh the link
        End If
    End If
Next 'Goto next table

End Sub

Function ReLinker()
Dim currPath As String
Dim backEnd As String
Dim excel1 As String
Dim excel2 As String
currPath = CurrentProject.Path
Debug.Print currPath
backEnd = "\backEnd.accdb"
excel1 = "\excel1.xls"
excel2 = "\excel2.xls"

RelinkTables currPath, backEnd, excel1, excel2
End Function

1 个答案:

答案 0 :(得分:1)

每次打开时文件的大小都会增加

这是有道理的。重新链接通常会增加db文件的大小。而且,由于每次打开数据库时都会重新进行重新连接,因此应该会增加大小。执行压缩以再次缩小db文件。

但是,我会检查现有链接,只有在需要更改时才执行重新链接。

另外,在继续重新链接之前,请考虑验证链接文件目标是否存在。

If Len(Dir(currPath & backEnd)) = 0 _
        Or Len(Dir(currPath & excel1)) = 0 _
        Or Len(Dir(currPath & excel2)) = 0 Then
    MsgBox "Oops!"
End If

对于Excel链接,请查看是否可以构建以下任何内容...

? CurrentDb.TableDefs("tblExcelData").Connect Like "Excel*"
True
? CurrentDb.TableDefs("tblExcelData").Connect
Excel 8.0;HDR=YES;IMEX=2;DATABASE=C:\share\Access\temp.xls
? Split(CurrentDb.TableDefs("tblExcelData").Connect, "DATABASE=")(1)
C:\share\Access\temp.xls