HelloData 的註解
HelloData 應用程式會逐步執行一般 ADO 應用程式的基本作業:取得、檢查、編輯和更新資料。 當您啟動應用程式時,請按一下第一個按鈕 [取得資料]。 這會執行 GetData 副程式。
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 字串是命令的文字定義,方法是將最後一個引數中的 adCmdText 傳遞給 Recordset Open 方法。 這一行也會設定與 Recordset 相關聯的 LockType 和 CursorType。
下一行程式碼會將 MarshalOptions 屬性設定為等於 adMarshalModifiedOnly。 MarshalOptions 會指出應該將哪些記錄封送處理至中介層 (或網頁伺服器)。 如需封送處理的詳細資訊,請參閱 COM 文件。 當您搭配使用 adMarshalModifiedOnly 與用戶端資料指標 (CursorLocation = adUseClient) 時,系統只會將用戶端上修改過的記錄寫回中介層。 將 MarshalOptions 設定為 adMarshalModifiedOnly 可以改善效能,因為封送處理的資料列會變少。
接下來,將 Recordset 中斷連線,方法是將其 ActiveConnection 屬性設定為等於 Nothing。 如需詳細資訊,請參閱更新和保存資料中的<中斷並重新連線資料錄集>。
關閉資料來源的連線,並終結現有的 Connection 物件。 這會釋放其取用的資源。
最後一個步驟是將 Recordset 設定為表單上 Microsoft DataGrid 控制項的 DataSource,以便您可以輕鬆地在表單上顯示 Recordset 的資料。
按一下第二個按鈕 [檢查資料]。 這會執行 ExamineData 副程式。
ExamineData
ExamineData 會使用 Recordset 物件的各種方法和屬性來顯示 Recordset 中資料的相關資訊。 其會使用 RecordCount 屬性來報告記錄數目。 其會對 Recordset 進行迴圈處理,並在表單上的顯示文字方塊中列印 AbsolutePosition 屬性的值。 此外,在處於迴圈時,系統會將第三筆記錄的 Bookmark 屬性值放入變體變數 vBookmark 中,以供稍後使用。
常式會使用其稍早儲存的 bookmark 變數,直接瀏覽回到第三筆記錄。 常式會呼叫 WalkFields 副程式,這個副程式會對 Recordset 的 Fields 集合進行迴圈處理,並顯示集合中每個 Field 的詳細資料。
最後,ExamineData 會使用 Recordset 的 Filter 屬性來僅篩選出 CategoryId 等於 2 的記錄。 套用此篩選的結果會立即顯示在表單上的顯示格線中。
如需 ExamineData 副程式中所示功能的詳細資訊,請參閱檢查資料。
接下來,按一下第三個按鈕 [編輯資料]。 這會執行 EditData 副程式。
EditData
當程式碼進入 EditData 副程式時,Recordset 仍在對 CategoryId 等於 2 進行篩選,因此只會顯示符合篩選準則的項目。 其會先對 Recordset 進行迴圈處理,並將 Recordset 中每個可見項目的價格加 10%。 [價格] 欄位的值可藉由將該欄位的 Value 屬性設定為等於新的有效金額而加以變更。
請記住,Recordset 會與資料來源中斷連線。 在 EditData 中所做的變更只會對本機快取的資料複本來發生。 如需詳細資訊,請參閱編輯資料。
等到您按一下第四個按鈕 [更新資料] 後,系統才會對資料來源進行變更。 這會執行 UpdateData 副程式。
UpdateData
UpdateData 會先移除已套用到 Recordset 的篩選。 程式碼會先移除 m_oRecordset1
再將其重設為表單上 Microsoft Bound DataGrid 的 DataSource,讓未篩選的 Recordset 出現在格線中。
然後,程式碼會檢查您是否可以搭配使用 Supports 方法與 adMovePrevious 引數,在 Recordset 中往後移動。
常式會使用 MoveFirst 方法移至第一筆記錄,並使用 Field 物件的 OriginalValue 和 Value 屬性顯示欄位的原始值和目前值。 這些屬性與 (此處未使用的) UnderlyingValue 屬性會在更新和保存資料中進行討論。
接下來,系統會建立新的 Connection 物件,並用來此物件重新連線到資料來源。 您可以將新的 Connection 設定為 Recordset 的 ActiveConnection,以將 Recordset 重新連線到資料來源。 為了將更新傳送到伺服器,程式碼會在 Recordset 上呼叫 UpdateBatch。
如果批次更新成功,模組層級旗標變數 m_flgPriceUpdated
會設定為 True。 這會在稍後提醒您清除對資料庫所做的所有變更。
最後,程式碼會回到 Recordset 中的第一筆記錄,並顯示原始值和目前值。 在呼叫 UpdateBatch 後,這兩個值會變得相同。
如需如何更新資料的詳細資訊 (包括當 Recordset 中斷連線而讓伺服器上的資料有所變更時的處理方式),請參閱更新和保存資料。
Form_Unload
有幾個原因讓 Form_Unload 副程式變得很重要。 首先,因為這是範例應用程式,Form_Unload 會在應用程式結束前,清除對資料庫所做的變更。 其次,程式碼會顯示如何使用 Execute 方法,直接從開啟的 Connection 物件執行命令。 最後,其會顯示範例來說明如何針對資料來源執行 non-row-returning 查詢 (UPDATE 查詢)。