Data 控制項

您可使用三種 Recordset 物件中的任何一種,來存取儲存在資料庫中的資料。Data 控制項可讓您從一筆資料錄移到另一筆資料錄,及顯示和操作來自連結控制項中資料錄的資料。若沒有 Data 控制項或對等的資料來源控制項,比如 RemoteData 控制項,則表單上可連繫資料的 (連結) 控制項將無法自動存取資料。

語法

Data

請注意

您可以使用 Data 控制項來執行大部份的資料存取動作,而不用撰寫任何的程式碼。和 Data 控制項連結的可連繫資料控制項會自動顯示目前資料錄,或者在某些情況下,顯示目前資料錄周圍的一組資料錄中一個以上資料欄的資料。Data 控制項可以對目前資料錄執行各種動作。

如果 Data 控制項被指示移到另一筆資料錄,則所有的資料連結控制項,會自動把任何的改變傳給將儲存在資料庫中的 Data 控制項。然後 Data 控制項會移到指定的資料錄,同時把目前資料錄中的資料傳回給顯示資料所在的資料連結控制項。

Data 控制項可以自動處理一些事件,包括空資料錄集、新增資料錄、編輯與更新現有的資料錄,以及處理某些型態的錯誤。然而,在較複雜的應用程式中,您得捕捉一些 Data 控制項無法處理的錯誤狀況。例如,如果 Microsoft Jet 資料庫引擎在存取資料庫檔案時發生問題,沒有許可權,或無法按照程式碼執行查詢,就會產生一個可處理的錯誤。如果錯誤發生在應用程式的程序開始之前,或因為某些內部錯誤,則會引發 Error 事件。

資料連結控制項

當與 Data 控制項相連結時,DataListDataComboDataGrid MSHFlexGrid 控制項都具有管理資料錄集的能力。這些控制項都可一次顯示或操作數個資料錄。

內建的 Picture、Label、TextBox、CheckBox、Image、OLE、ListBox ComboBox 等也都是可連繫資料的控制項,並能連結到由 Data 控制項管理之 Recordset 的一個資料欄中。其它可連繫資料的控制項,如 MaskedEdit RichTextBox 控制項,在專業版和企業版中均有提供,您也可以由協力廠商取得。

動作

當應用程式開始執行,Visual Basic 就用 Data 控制項屬性來開啟選取的資料庫,建立 Database 物件和 Recordset 物件。Data 控制項的 Database Recordset 屬性會引用新建立的 Database Recordset 物件,接著您就可以用 Data 控制項 (不論有沒有資料連結控制項) 來處理這些資料了。Data 控制項會在其置於表單的原始 Form_Load 事件之前就被初始化。若在初始化階段中發生任何的錯誤,都會產生一個不可處理的錯誤。

當 Visual Basic 使用 Jet 資料庫引擎建立一個 Recordset 時,其它的 Visual Basic 動作或事件都要等到該動作完成後才能發生。然而,在建立 Recordset 期間,其它 Windows 的應用程式則可繼續執行。當 Jet 引擎在建立 Recordset 的時候,若使用者按下 CTRL+BREAK 鍵,該動作將會終止,並產生一個可處理的錯誤,而 Data 控制項的 Recordset 屬性會設定成 Nothing。在設計階段,第二次按下 CTRL+BREAK 鍵,就會使 Visual Basic 顯示「偵錯」視窗。

當您使用 Data 控制項或程式碼建立了 Recordset 物件,並指定給 Data 控制項時,Microsoft Jet 資料庫引擎會自動組成 Recordset 物件。因此,書籤 (若是快照集(Snapshot)類型的 Recordset 物件,還有資料錄集的資料) 會儲存在區域記憶體中;使用者不必操作 Data 控制項,您也不必在程式碼中呼叫 MoveLast 方法。用於建立 Recordset 的鎖定頁會更快速地釋放,以使其它的 Recordset 物件能存取相同的資料。而在程式碼中建立,但還沒有指定給 Data 控制項的 Recordset 物件,就無法由 Jet 引擎自動組成,您必須以程式碼組成這些物件。由於 Data 控制項是以背景模式組成 Recordset,所以也可以建立額外的 Recordset 的副本。

您可以用滑鼠來操作 Data 控制項,由一筆資料錄移到另一筆資料錄,或者移到 Recordset 的開頭或結尾。EOFAction BOFAction 屬性可用來決定使用者用滑鼠移到 Recordset 的開頭或結尾時產生的結果。您無法將駐點設到 Data 控制項上。

確認

您可使用 Validate 事件和 DataChanged 屬性,對即將寫入資料庫的資料錄執行最後的詳細檢查。

資料存取物件

您可以在程序中,使用由 Data 控制項建立的 Database Recordset 資料存取物件。每個 Database Recordset 物件都有自己的屬性和方法,您可以使用這些屬性和方法撰寫程序來處理資料。

例如,Recordset 物件的 MoveNext 方法會把目前資料錄移到 Recordset 中的下一筆資料錄。要呼叫這個方法,您可以使用下列的程式碼:

Data1.Recordset.MoveNext

Data 控制項能存取 Jet 引擎 3.0 版中三種 Recordset 物件的任何一種。如果您沒有選擇資料錄集類型,則會建立動態集類型的 Recordset

在許多情況下,建立的 Recordset 物件的預設類型和組態相當沒效率。也就是說,您可能不需要一個具有可更新、全螢幕捲動、keyset 類型的資料指標來存取資料。例如,您可以建立一個唯讀的、順向、快照集類型的 Recordset,就能比預設的資料指標快得多。最好根據實際的情況,選擇最有效的 TypeExclusive、Options ReadOnly 屬性設定。

附註 使用 Data 控制項時,用來要求特定 Recordset 類型的常數,與用來決定已建立之 Recordset 類型的常數,或與用來以 OpenRecordset 方法建立 Recordset 物件的常數不同。

若要選取特定的 Recordset 類型,請將 Data 控制項的RecordsetType 屬性設成:

Recordset 類型 常數
資料表 (Table) 0 VbRSTypeTable
動態集 (Dynaset) 1 (預設值) vbRSTypeDynaset
快照集 (Snapshot) 2 VbRSTypeSnapshot

重要事項 Data 控制項無法用來存取透過 dbForwardOnly 選項位元設定所建立的 Recordset 物件。

專業版和企業版

就資料存取而言,Visual Basic 的普及版、專業版和企業版間的主要差別,在於建立新資料存取物件的能力。在普及版中,您無法在程式碼中宣告 (帶有 Dim 關鍵字的) 變數為資料存取物件。這意謂 Data 控制項只能建立 Database Recordset 物件。

在專業版和企業版中,您可以建立新的 Recordset 物件並指定給 Data 控制項的 Recordset 屬性。各種和 Data 控制項連接的資料連結控制項,都可讓您在已建立的 Recordset 中處理資料錄。不過您得確定資料連結控制項的 DataField 屬性中,所設定的資料欄名稱在新的 Recordset 中是正確的。

預存查詢

當使用 Data 控制項時,亦可執行預存查詢。如果您事先建立了 QueryDef 物件,則 Data 控制項就可執行該物件,並利用 QueryDef 物件的預存 SQLConnect 和其它屬性來建立 Recordset。若要執行 QueryDef,請將 Data 控制項的 RecordSource 屬性設成 QueryDef 的名稱,並使用 Refresh 方法。

如果預存 QueryDef 含有參數,您就必須建立 Recordset,並把它傳給 Data 控制項。

BOF/EOF 的處理

當您遇到無資料錄的 Recordset 時,Data 控制項也能對其做處理。透過改變 EOFAction 屬性,您可以讓 Data 控制項自動進入 AddNew 模式。

使用 Align 屬性,您可以讓 Data 控制項自動移到其父表單的頂端或底端。在任何一種情況下,當父表單改變大小時,Data 控制項都會水平改變大小,以符合父表單的寬度。該屬性允許 Data 控制項放在 MDI 表單中,而不需要求包含 Picture 控制項。

◎李明山 如意網站 VB教學網◎