我正在努力使一個資料庫晚期系結,這樣當前端被打開時,使用不同版本的MS Office的用戶就不會出現問題。在這段代碼中,在For Each tdf In dbs.TableDefs一行,我不斷地得到一個運行時錯誤438(Object doesn't support this properts or method),
我不知道這里出了什么問題。所有的東西都被宣告了,它應該找到它。誰能指出可能發生了什么?
Function RelinkTables()
On Error GoTo EndFast
'自動重新鏈接表的常規程式。將常數LnkDataBase改為所需的常數并運行子。
'DB前端可以在2個或更多的地方使用不同的后端。'。
Dim dbs As Object
#If VBA7 Then<
Set dbs = CreateObject("DAO.DBEngine.120"/span>)
#Else
Set dbs = CreateObject("DAO.DBEngine.36"/span>)
#End If
' Dim dbs As DAO.Database[/span].
' Set dbs = CurrentDb
Dim tdf As Object
'Dim tdf As DAO.TableDef
Dim strTable As String
Dim strLocation As String
'如果檔案是開發版本,就放棄重新鏈接。
If VBA.InStr(1, VBA. UCase(GetNamePath), "_DEV") > 0 Then Exit Function
'Get the Path of the Document and form backend name[/span]。
strLocation = GetFolderFromPath(GetNamePath)
strLocation = FormBackendName(strLocation)
'去重新鏈接。
For Each tdf In dbs.TableDefs
If VBA.Len(tdf.Connect) > 1 Then '只有重新鏈接的表。
'If tdf.Connect <> ";DATABASE=" & LnkDataBaseDubai Then 'only relink tables if the are not linked right '' With PW, Access wont relink, even when the PW is Correct. 必須重新鏈接!
If VBA.Left(tdf.Connect, If) Connect, 4) <> "ODBC" Then '不希望重新鏈接任何ODBC表。
strTable = tdf.Name
'dbs.TableDefs(strTable).Connect = ";DATABASE=" & strLocation & ";PWD=" & DatenbankPW '與密碼
dbs.TableDefs(strTable).Connect = ";DATABASE=" & strLocation & "; '無密碼。
dbs.TableDefs(strTable).RefreshLink
End If
'End If
End If
Next tdf
dbs.關閉
退出 功能
EndFast:/span>
On Error GoTo 0
MsgBox "沒有找到后端資料庫。沒有后臺,這個資料庫就不能作業。" & vbCrLf _
& "" & vbCrLf _
& "確保Access后端資料庫位于一個名為的子檔案夾中。""_Sources""并且該檔案夾的讀寫權限已被授予。" & vbCrLf _
& "" & vbCrLf _
& "如果需要進一步支持,請聯系開發者。 ", vbOKOnly Or vbExclamation Or vbSystemModal Or vbMsgBoxSetForeground, "未找到資料庫后端"。
結束 功能
uj5u.com熱心網友回復:
如果你想使用表,你需要實際打開一個資料庫。
你已經將dbs設定為一個資料庫引擎,而不是一個資料庫。
如果你想讓它成為當前的資料庫,只需將它設定成這樣,不需要提前系結:
如果你想讓它成為當前的資料庫,只需將它設定成這樣,不需要提前系結。
Dim dbs As Object
Set dbs = CurrentDb
另外,打開一個資料庫:
Dim dbs As Object
Dim dbe As Object
#If VBA7 Then<
Set dbe = CreateObject("DAO.DBEngine.120"/span>)
#Else
Set dbe = CreateObject("DAO.DBEngine.36"/span>)
#End If
Set dbs = dbe.OpenDatabase("C:Some database.mdb" )
' 必須是mdb,因為DAO.DBEngine.36不支持accdb。
uj5u.com熱心網友回復:
Access不再需要對DAO庫的參考(自Access 2007以來,DAO庫是內置的)。所以洗掉DAO參考。你不需要它,而且晚期系結不會幫助也不會改變破碎的參考問題。
所以,你會注意到現在的參考是這樣的:
你不能洗掉對ACE資料引擎的參考,但你真的要確保你不參考DAO物件庫。
如果你使用的是2007年以前的資料庫,你只能參考DAO,而且你也不能使用ACE,并使用一個mdb檔案。
對于 accDB 和 2007 年以后的 Access?
Access 團隊現在擁有 Access 的 DAO,他們現在不再更新或維護外部 DAO 庫。請不要參考DAO庫。
因此,DAO 現在已經內置于 Access 中。(但是,你現在必須參考 ACE 資料引擎)
但是,即使是在 Access 中,也有很多人不了解 DAO。
然而,即使有了上述參考,你也可以,而且應該養成在代碼中參考DAO的習慣,因為這不僅是一個好習慣,而且還能給你帶來智力上的好處。
在你的代碼模塊中設定一個明確的選項是個好主意。
因此,不需要后期系結DAO,因為你不再需要對DAO的參考了!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/324084.html
標籤:
