Access使用ADOX刷新链接表的函数

2002-08-06 21:06:00
朱亦文-Office交流网
原创
1393

下面这个函数 使用时发现有些问题,然后在下文中重新改进了这个函数。测试通过。

Public Sub RefreshLinkedExternalTable(strTargetDB As String, strProviderString As String, strSourceTbl As String, strLinkTblName As String) 
 
' strTargetDB: 被链接的数据库路径名 
' strProviderString: 连接字符串 
' strSourceTbl: 被链接的源表名称 
' strLinkTblName: 要重设链接的链接表的名称 
 
Dim catDB  As ADOX.Catalog 
Dim tblLink As ADOX.Table 
Dim i As Integer 

Set catDB = New ADOX.Catalog 
catDB.ActiveConnection = CurrentProject.Connection 
 
Set tblLink = catDB.Tables(strLinkTblName) 
 
With tblLink 
.Properties("Jet OLEDB:Create Link") = True 
.Properties("Jet OLEDB:Link Datasource") = strTargetDB 
.Properties("Jet OLEDB:Link Provider String") = strProviderString 
.Properties("Jet OLEDB:Remote Table Name") = strSourceTbl 
End With 
 
Set catDB = Nothing 

End Sub 


但是在 
.Properties("Jet OLEDB:Create Link") = True 
.Properties("Jet OLEDB:Remote Table Name") = strSourceTbl 
报错! 

 
zyz
已通過的代碼:

Public Sub NewLinkedExternalTableMdb()
    
    ' strTargetDB: 被链接的数据库路径名
    ' strProviderString: 连接字符串
    ' strSourceTbl: 被链接的源表名称
    ' strLinkTblName: 要重设链接的链接表的名称
    ' 作者:朱亦文

    Dim strTargetDB() As String
    Dim strProviderString() As String
    Dim strSourceTbl() As String
    Dim strLinkTblName() As String
    
    Dim catDB   As ADOX.Catalog
    Dim tblLink As ADOX.Table
    Dim tmpLink As ADOX.Table
    
    Dim i As Integer
    Dim j As Integer

    Set catDB = New ADOX.Catalog
    catDB.ActiveConnection = CurrentProject.Connection
    
    i = catDB.Tables.Count
    
    ReDim strTargetDB(i)
    ReDim strProviderString(i)
    ReDim strSourceTbl(i)
    ReDim strLinkTblName(i)
    
    i = 1
    
    For Each tmpLink In catDB.Tables
        
        If tmpLink.Properties("Jet OLEDB:Create Link") Then
            If Trim(tmpLink.Properties("Jet OLEDB:Remote Table Name")) <> "" Then
            
                Debug.Print tmpLink.Name & " |  " & tmpLink.Properties("Jet OLEDB:Remote Table Name")
                
                strLinkTblName(i) = tmpLink.Name
                strTargetDB(i) = tmpLink.Properties("Jet OLEDB:Link Datasource")
                strProviderString(i) = tmpLink.Properties("Jet OLEDB:Link Provider String")
                strSourceTbl(i) = tmpLink.Properties("Jet OLEDB:Remote Table Name")
                
                Do While InStr(1, strTargetDB(i), "\") <> 0
                    strTargetDB(i) = Mid(strTargetDB(i), InStr(1, strTargetDB(i), "\") + 1, Len(strTargetDB(i)))
                Loop
                
                strTargetDB(i) = CurrentProject.Path & "\" & strTargetDB(i)
                
                i = i + 1
            End If
        End If
    
    Next
    
    j = i - 1
    
    For i = 1 To j
        catDB.Tables.Delete strLinkTblName(i)
            
        Set tblLink = New ADOX.Table
            
        With tblLink
            .Name = strLinkTblName(i)
            Set .ParentCatalog = catDB
                
            .Properties("Jet OLEDB:Create Link") = True
            .Properties("Jet OLEDB:Link Datasource") = strTargetDB(i)
            .Properties("Jet OLEDB:Link Provider String") = strProviderString(i)
            .Properties("Jet OLEDB:Remote Table Name") = strSourceTbl(i)
        End With
                
        catDB.Tables.Append tblLink
        Set tblLink = Nothing
    Next
    Set catDB = Nothing

End Sub

 
 

(DAO_链接表_ODBC-相关文章技巧链接):
局域网:ODBC连接SQL SEVER详解
用代码通过ODBC刷新链接(mdb+SQL SEVER2000)
如何用代码链接带有密码的数据库中的表
分享