HelloData 應用程式會逐步執行一般 ADO 應用程式的基本作業:取得、檢查、編輯和更新數據。 當您啟動應用程式後,請按下第一個按鈕,取得資料。 這會執行 GetData 子程式。
取得資料
GetData 會將有效的連接字串放入模組層級變數中,m_sConnStr。 如需連接字串的詳細資訊,請參閱 建立連接字串。
使用 Visual Basic OnError 語句指派錯誤處理程式。 如需 ADO 中錯誤處理的詳細資訊,請參閱 錯誤處理。 會建立新的 Connection 物件,並將 CursorLocation 屬性設定為 adUseClient,因為 HelloData 範例會建立 離線的 Recordset。 這表示,一旦從資料來源擷取到資料,與資料來源的實體連線就會被中斷,但您仍然可以使用存在本機快取中的資料,Recordset 物件。
開啟連線之後,請將 SQL 字串指派給變數 (sSQL)。 然後,建立新 Recordset 對象的實例,m_oRecordset1。 在下一行程式代碼中,透過現有的 Connection開啟 Recordset ,傳入 sSQL 做為 Recordset的來源。 您可以協助 ADO 判斷您傳遞作為 Recordset 來源的 SQL 字串是否為命令的文字定義,方法是在 Recordset Open 方法的最後一個引數中傳遞 adCmdText。 這一行也會設定與 Recordset相關聯的 LockType 和 CursorType。
下一行程式代碼會將 MarshalOptions 屬性設定為等於 adMarshalModifiedOnly。 MarshalOptions 指出哪些記錄應該編組至中間層(或網頁伺服器)。 如需封送處理的詳細資訊,請參閱 COM 文件。 當您使用 adMarshalModifiedOnly 搭配客戶端游標(CursorLocation = adUseClient)時,只有在客戶端上已修改的記錄會被寫回到中間層。 將 MarshalOptions 設定為 adMarshalModifiedOnly 可以改善效能,因為封送處理的資料列較少。
接下來,將其 ActiveConnection 屬性設為 Nothing,以中斷 Recordset 的連線。 如需更多資訊,請參閱 中的「中斷和重新連接記錄集」一節,資料更新和保存。
關閉與數據源的連接,並終結現有的 Connection 物件。 這會釋放其取用的資源。
最後一個步驟是將 Recordset 設定為窗體上 Microsoft DataGrid 控件的 DataSource,以便您可以輕鬆地在窗體上顯示 Recordset 中的數據。
點選第二個按鈕,[檢查資料]。 這會執行 ExamineData 子程式。
檢查數據
ExamineData 會使用 Recordset 對象的各種方法和屬性來顯示 recordset 中數據的相關信息。 它會使用 RecordCount 屬性來報告記錄數目。 它會迴圈遍歷 Recordset,並在表單上的顯示文字框中顯示 AbsolutePosition 屬性的值。 此外,在迴圈中,第三筆記錄的 Bookmark 屬性值會放入變數變數中,vBookmark,以供日後使用。
例程會使用先前儲存的書籤變數,直接巡覽回第三筆記錄。 例程會呼叫 WalkFields 子程式,其會遍歷 Recordset 的 Fields 集合,並顯示集合中每個 Field 的詳細資訊。
最後,CheckData 會使用 Recordset 的 Filter 属性,只篩選 CategoryId 等於 2 的記錄。 套用此篩選的結果會在表單上的顯示方格中立即顯示。
如需 ExamineData 子程式中顯示的功能詳細資訊,請參閱 檢查資料。
接下來,按下第三個按鈕,編輯資料。 這會執行 EditData 子程式。
EditData
當程式進入 EditData 子程式時,Recordset 仍會篩選 CategoryId 等於 2,因此只會顯示符合篩選條件的項目。 它首先會遍歷 Recordset,並在 Recordset 中將每個可見項目的價格提高 10%。 Price 欄位的值會變更,方法是設定該欄位的 Value 屬性等於新的有效金額。
請記住,Recordset 與數據源中斷連線。 EditData 中所做的變更只會對本機快取的數據複本進行。 如需詳細資訊,請參閱 編輯資料。
除非您按下第四個按鈕,[更新數據],否則不會對數據源進行變更。 這會執行 UpdateData 子程式。
更新數據
UpdateData 會先移除已套用至 Recordset的篩選條件。 程式碼會移除並重設 m_oRecordset1 作為窗體上 Microsoft 系結 DataGrid 的 DataSource,讓未經篩選的 Recordset 出現在資料格中。
然後,程式代碼會檢查您是否可以使用 Supports 方法和 adMovePrevious 參數,在 Recordset 中向前移動。
例程會使用 MoveFirst 方法移至第一筆記錄,並使用 OriginalValue 和 ValueField 物件的屬性來顯示字段的原始和目前值。 這些屬性以及(未在此使用的)UnderlyingValue 屬性在 更新和持久化資料中進行討論。
接下來,會建立新的 Connection 物件,並用來重新建立與數據源的連接。 您將 Recordset 重新連線至資料來源,方法是將新的 Connection 設定為 Recordset的 ActiveConnection。 若要將更新傳送至伺服器,程式代碼會在 Recordset上呼叫 UpdateBatch。
如果批次更新成功,模組層級旗標變數 m_flgPriceUpdated會設定為 True。 這稍後會提醒您清除對資料庫所做的所有變更。
最後,程式代碼會回到 Recordset 中的第一筆記錄,並顯示原始和目前的值。 呼叫 updateBatch之後,這些值會相同。
如需如何更新資料的詳細資訊,包括當您的 Recordset 中斷連線時,伺服器上的數據變更時該怎麼做,請參閱 更新和保存資料。
表單_卸載
Form_Unload 子程式很重要,原因有數個。 首先,因為這是範例應用程式,Form_Unload清除應用程式結束時對資料庫所做的變更。 其次,程式代碼會示範如何使用 Execute 方法,直接從開啟 Connection 物件執行命令。 最後,它會顯示針對數據源執行非數據列傳回查詢(UPDATE 查詢)的範例。