Q: | 利用 Data 控制元件所撰寫的資料庫程式中, 在「設計階段」已經設定
"stock01.mdb" 檔案給 Database 屬性, 並且在 Form_Load 事件程序中撰寫以下程式:(以下的
"股票行情表" 是 stock01.mdb 資料庫的一個資料表)
Private Sub Form_Load() Dim rs As Recordset Set rs = Data1.Database.OpenRecordset("股票行情表") End Sub 結果程式執行之後, 卻出現 「沒有設定物件變數或 With 區域變數」的錯誤訊息, 為什麼呢? 又如何更正程式? |
A: | 由於我們在設計階段設定 DatabaseName 屬性給
Data 控制元件, 所以進入執行階段且當 Form
被載入時, Data 控制元件即會自動開啟 DatabaseName 屬性的資料庫檔案, 並且將開啟之
Database 物件設定給 Data1.Database 屬性, 因此以上程式利用 Data1.Database.OpenRecordset
開啟 Recordset 應該是正確的, 為什麼會錯誤?
雖然說 Data 控制元件會在 Form 載入時自動開啟 Database 屬性的資料庫, 但實際上, 發生 Form_Load 事件時* Data 控制元件卻還沒有開啟 Database 屬性的資料庫, 正確的開啟時間應該是 Form_Load 事件之後。這使得 Form_Load 事件發生時, Data1.Database還不是有效的物件, 以致 Data1.Database.OpenRecordset 無法正確執行。 解決方法是在 Set rs = Data1.Database.OpenRecordset("股票行情表") 之前加上: Data1.Refresh 以上敘述的作用是強制 Data1 立刻開啟資料庫(表), 若資料庫(表)已開啟, 則重新開啟, 目的是讓 Data1.Database 變成合法的物件, 而使得 Data1.Database.OpenRecordset 能後正確地執行。 註:課本的 p.171 及 p.244 都曾經應用 Data1.Refresh 來解決類似的問題。 |