DAO 連接上的 MS Access 崩潰
有人可以看一下這段程式碼並提供關於我做錯了什麼的提示。這段程式碼幾乎完全取自參考書,作為如何使用 VBA ADO 對象的範例。這是程式碼:
Sub TestMyADODB() Dim mySQL As String Dim myConnection As DAO.Connection Dim myRecordSet As DAO.Recordset Set myConnection = CurrentProject.Connection ' Crash here mySQL = mySQL & "UPDATE Amplifier " mySQL = mySQL & "SET Amplifier.lngCategory = 405, Amplifier.lngSubType = 3 " mySQL = mySQL & "WHERE (((Amplifier.lngPartIndex)=9))" myRecordSet.OpenRecordset mySQL Debug.Print "DONE" myRecordSet.Close Set myRecordSet = Nothing Set myConnection = Nothing
此外,我嘗試使用 ADODB 對象,結果,編譯器將不允許該程式碼。我發現我需要添加對 MS dll 的引用,我這樣做了,結果仍然相同。然後我開始從 VBA 收到一個錯誤,指出我不能使用現在“過時”的 DAO,我必須使用 ADO。剩下的就是 10 個小時浪費的寶貴時間,試圖從 tne 網路上的多篇文章中揭開 ADO DAO 問題的神秘面紗。最重要的是,如果我使用 DAO,我的 Access 2007 將會崩潰,並且編譯器將拒絕使用 ADO。我在這個問題上失去了我的頭髮,我需要幫助!欣賞
PS:mySQL 字元串已在 Access 查詢和功能中進行了測試。
你說程式碼是如何使用 ADO 的範例,但它引用了 DAO。DAO 和 ADO 是來自 Microsoft 的兩個完全不同的數據訪問庫。ADO 是較新的。請不要混淆它們。
嘗試以下操作:
在您的 Access Visual Basic IDE 中,點擊工具| 參考文獻。確保選中Microsoft ActiveX 數據對象 2.8。取消選擇提及 DAO、數據訪問對象、ADO 或 ActiveX 數據對象的任何其他引用。如果您沒有安裝 2.8 版,請嘗試您擁有的最新版本。
現在,修改你的 sub 看起來像這樣:
Sub TestMyADODB() Dim myConnection As ADODB.Connection Set myConnection = CurrentProject.Connection Dim mySQL As String mySQL = mySQL & "UPDATE Amplifier " mySQL = mySQL & "SET Amplifier.lngCategory = 405, Amplifier.lngSubType = 3 " mySQL = mySQL & "WHERE Amplifier.lngPartIndex=9" myConnection.Execute mySQL Debug.Print "DONE" End Sub
我將連接類型更改為 ADODB.Connection 以匹配所選庫。我還刪除了記錄集對象,因為它僅用於 SELECT 查詢。不返回行的查詢可以直接在連接上執行。
這至少適用於我的機器。