我正在嘗試撰寫一個宏,我想在其中使用 SQL 查詢的結果填充用戶表單上的組合框。該查詢回傳兩列:設備 ID(整數)串列和名為 description 的列中的設備名稱。我有幾個問題:
- 我有一個包含連接到資料庫的代碼的模塊,它運行了一段時間。我正在嘗試使用 VBA 除錯部分的“Step Into”工具來測驗代碼。以前,當我的宏到達該
Application.Run ...行時,它會毫無問題地跳轉到模塊的視窗。現在它給了我各種運行時錯誤(最近的一個是“-2147352571 (80020005)”:型別不匹配)。如果我在Application.Run ...它執行連接后中斷代碼 沒有問題。如果我在連接模塊的代碼上使用 step into 也是一樣。 - 我在 Watches 視窗中放入了一些運算式,試圖找出如何調整我的代碼。我試圖用 for 回圈填充組合框。這
rst.Getrows回傳一個下拉運算式,展開時顯示 GetRows(0) 和 GetRows(1)。每個都分別填充了設備 ID 號和描述,每個元素都有一個附加引數,例如。GetRows(0,2)。有時,GetRows 運算式回傳值中的錯誤:<BOF 或 EOF 為真,或者當前記錄已被洗掉。請求的操作需要當前記錄>,并且它的每個附加指定版本都需要一個物件,或者在此背景關系中也不允許操作錯誤。當我運行帶有中斷的代碼(最初顯示具有正確值的運算式)并在監視視窗中拖動一個新運算式而不對代碼本身進行任何操作時,就會發生這種情況。
第一個問題主要是使我的故障排除復雜化。當 step into 方法仍然有效時,我可以看到 GetRows 運算式在該rst.Open strMysql, conn行之后填充了正確的值,然后在代碼繼續進入 For 回圈時更改為 BOF/EOF 錯誤行,即使我沒有進一步對打開的記錄集進行操作。
即使在運算式正確顯示的狀態下,我也無法弄清楚如何制定引數來檢索一個描述值。我一直在嘗試rst.Getrows(1,i,1).Value在第二個欄位的第 i 行回傳 1 個結果。我的目標是在Me.combobox.Additem命令后的 for 回圈中使用它。
任何人都可以幫助解決奇怪的代碼中斷問題,或者填寫組合框的代碼?
uj5u.com熱心網友回復:
以下是如何從 RecordSet 填充 ComboBox 的模板:
Private Sub Test()
Set Results = "some SQL query"
Combo.Clear
Do While Not (Results.BOF Or Results.EOF)
Combo.AddItem Results.Fields(1).Value
Results.MoveNext
Loop
Combo.ListIndex = 0
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/355530.html
下一篇:如何使此查詢運行得更快?
