【问题标题】:Microsoft Access 2010 Relative Addressing ProblemsMicrosoft Access 2010 相关寻址问题
【发布时间】:2012-12-07 12:45:30
【问题描述】:

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

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

2 - 更重要的是,文件的大小每次打开时都会增加,对数据库的唯一修改是在模块中添加代码。我已经做到了,它会在打开文件时自动执行,关闭后我注意到它的大小增加了几个 100 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

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

    • 感谢您的建议,但是在您对 excel 链接的回复中,我仍然遇到问题。我能够将 tabledef 定向到正确的位置,但是每次我尝试刷新我的 Access 数据库损坏的链接时。也是 VBA 的新手(我通常使用 Java 工作)我不确定你在使用 Like 和 Split 的第一行和最后一行中做了什么。
    • 还有 TableDef 的属性,您可以使用它来验证链接是否仍在运行?到目前为止,我能想到的检查链接是否仍然有效的唯一方法是检查文件是否存在。
    • 我不知道有任何 TableDef 属性表明链接是否正常工作。如果您想避免检查文件是否存在,可以查询链接表或使用DCount() 表达式。关于LikeSplit(),请查看“Like Operator”和“Split Function”的Access在线帮助主题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    相关资源
    最近更新 更多