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