access中鏈接表的問題
更新時間:2006年10月13日 00:00:00 作者:
一個使用asp和mdb的站點,某個mdb中使用了鏈接表,鏈接到當(dāng)前目錄的另一個mdb中的表,這樣可以達到數(shù)據(jù)共享。
faq-it.org/delphi_win_sdk/問題來了,當(dāng)將網(wǎng)站發(fā)布到網(wǎng)站的時候,因為網(wǎng)上空間路徑和我本機不同,所以鏈接表失敗,網(wǎng)頁當(dāng)然也不能打開。
我覺得解決辦法有:
一種,在本機上創(chuàng)建與網(wǎng)上空間完全相同的目錄結(jié)構(gòu)。但這很麻煩,特別是經(jīng)常要換網(wǎng)站的話。
一種,如何讓鏈接表使用相對路徑,就是鏈接到當(dāng)前目錄下的那個mdb文件?(對了,access很弱智,鏈接表記錄的是絕對路徑)。
還一種,如何通過編程(asp 或者本地vba)來實現(xiàn)對鏈接表的鏈接的修改?(又對了,access還是弱智,更新鏈接表我只能使用手工更新,一定要找到那個路徑下的mdb才行!可本地路徑和網(wǎng)上不一樣呀)
誰能告訴我如何實現(xiàn)上面的后兩種方法?
---------------------------------------------------------------
以下是我自己在用的adox代碼,只為了證明我說的access有此功能(說句不好聽的:這關(guān)access p事?。窟@是ado模型該解決的問題。而且你也提錯地方了,提到asp那一塊更合適),做access編程的都應(yīng)該看得懂,如果你看不懂我也只能說遺憾了。
Public Function NewLinkedExternalTableMdb()
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
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 Function
faq-it.org/delphi_win_sdk/問題來了,當(dāng)將網(wǎng)站發(fā)布到網(wǎng)站的時候,因為網(wǎng)上空間路徑和我本機不同,所以鏈接表失敗,網(wǎng)頁當(dāng)然也不能打開。
我覺得解決辦法有:
一種,在本機上創(chuàng)建與網(wǎng)上空間完全相同的目錄結(jié)構(gòu)。但這很麻煩,特別是經(jīng)常要換網(wǎng)站的話。
一種,如何讓鏈接表使用相對路徑,就是鏈接到當(dāng)前目錄下的那個mdb文件?(對了,access很弱智,鏈接表記錄的是絕對路徑)。
還一種,如何通過編程(asp 或者本地vba)來實現(xiàn)對鏈接表的鏈接的修改?(又對了,access還是弱智,更新鏈接表我只能使用手工更新,一定要找到那個路徑下的mdb才行!可本地路徑和網(wǎng)上不一樣呀)
誰能告訴我如何實現(xiàn)上面的后兩種方法?
---------------------------------------------------------------
以下是我自己在用的adox代碼,只為了證明我說的access有此功能(說句不好聽的:這關(guān)access p事?。窟@是ado模型該解決的問題。而且你也提錯地方了,提到asp那一塊更合適),做access編程的都應(yīng)該看得懂,如果你看不懂我也只能說遺憾了。
Public Function NewLinkedExternalTableMdb()
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
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 Function
相關(guān)文章
asp中response.write(''中文'')或者js中文亂碼問題
這篇文章主要介紹了asp中response.write('中文')或者js中文亂碼問題,有時候我們需要輸出js也會出現(xiàn)亂碼,這里給出了幾個解決方法,需要的朋友可以參考下2020-03-03