Access使用ADOX刷新鏈接錶的函數

2002-08-06 21:06:00
硃亦文-Office交流網
原創
2467

下麵這箇函數 使用時髮現有些問題,然後在下文中重新改進瞭這箇函數。測試通過。

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)
如何用代碼鏈接帶有密碼的數據庫中的錶
分享