Recordset 物件 (ADO)

表示基底資料表中的整個記錄集或執行命令的結果。 在任何時間中,Recordset 物件僅參考集合內的單一記錄作為目前記錄。

備註

您可以使用 Recordset 物件來操作提供者的資料。 使用 ADO 時,您幾乎全都會使用 Recordset 物件來操作資料。 所有 Recordset 物件都包含記錄 (資料列) 和欄位 (資料行)。 視提供者支援的功能而定,某些 Recordset 方法或屬性可能無法使用。

ADODB.Recordset 是應該用來建立 Recordset 物件的 ProgID。 現有的應用程式若參考了過時的 ADOR.Recordset ProgID 仍將繼續運作,而無需重新編譯,但新的開發應參考 ADODB.Recordset。

ADO 中定義了四種不同的資料指標類型:

  • 動態資料指標可讓您檢視其他使用者的新增、變更和刪除、允許透過不依賴書籤的資料錄集進行所有類型的移動,以及在提供者支援書籤的情況下允許使用書籤。

  • 索引鍵集資料指標的行為與動態資料指標類似,但會禁止您查看其他使用者新增的記錄,並禁止存取其他使用者刪除的記錄。 其他使用者的資料變更仍會顯示。 此資料指標一律支援書籤,因此允許透過資料錄集進行所有類型的移動。

  • 靜態資料指標提供一組記錄的靜態複本,讓您用來尋找資料或產生報表;此資料指標一律允許書籤,因此允許透過資料錄集進行所有類型的移動。 其他使用者的新增、變更或刪除將不會顯示。 當您開啟用戶端 Recordset 物件時,這會是唯一允許的資料指標類型。

  • 順向資料指標僅允許您在資料錄集中向前捲動。 其他使用者的新增、變更或刪除將不會顯示。 若您只需透過資料錄集進行一次傳遞,這將可改善效能。

在開啟資料錄集之前設定 CursorType 屬性,以選擇資料指標類型,或使用 Open 方法傳遞 CursorType 引數。 某些提供者不支援所有的資料指標類型。 請在文件中查看提供者。 若未指定資料指標類型,ADO 依預設會開啟順向資料指標。

如果 CursorLocation 屬性設定為 adUseClient 以開啟資料錄集,則在傳回的 Recordset 物件中將無法使用 Field 物件的 UnderlyingValue 屬性。 與某些提供者搭配使用時 (例如,與 Microsoft SQL Server 一起使用的 Microsoft ODBC Provider for OLE DB),您可以使用 Open 方法傳遞連接字串,在先前定義的 Connection 物件以外建立獨立的 Recordset 物件。 ADO 仍然會建立 Connection 物件,但不會將該物件指派給物件變數。 不過,如果您要透過相同的連線開啟多個 Recordset 物件,您應明確建立並開啟 Connection 物件;這會將 Connection 物件指派給物件變數。 如果您在開啟 Recordset 物件時未使用此物件變數,則 ADO 會為每個新的資料錄集建立新的 Connection 物件,即使您傳遞相同的連接字串也一樣。

您可以視需要建立 Recordset 物件,數量不限。

當您開啟資料錄集時,目前的記錄會放置在第一筆記錄 (如果有的話),且 BOFEOF 屬性會設定為 False。 如果沒有記錄,則 BOFEOF 屬性會設定為 True

您可以使用 MoveFirstMoveLastMoveNextMovePrevious 方法、Move 方法,以及 AbsolutePositionAbsolutePageFilter 屬性,以重新置放目前的記錄 (假設提供者支援相關功能)。 順向 Recordset 物件僅支援 MoveNext 方法。 當您使用 Move 方法來瀏覽每筆記錄 (或列舉資料錄集) 時,您可以使用 BOFEOF 屬性來確認是否超出了資料錄集的開頭或結尾。

在使用 Recordset 物件的任何功能之前,您必須在物件上呼叫 Supports 方法,以確認功能受到支援或可供使用。 若 Supports 方法傳回 false,則不可使用此功能。 例如,只有在 Recordset.Supports(adMovePrevious) 傳回 True 時,您才能使用 MovePrevious 方法。 否則,您將收到錯誤,因為 Recordset 物件可能已關閉,且功能在執行個體上顯示為無法使用。 如果您感興趣的功能不受支援,則 Supports 也會傳回 false。 在此情況下,您應避免在 Recordset 物件上呼叫對應的屬性或方法。

Recordset 物件可支援兩種類型的更新:立即和批次。 在立即更新中,資料的所有變更都會在您呼叫 Update 方法後立即寫入至基礎資料來源。 您也可以使用 AddNewUpdate 方法將值的陣列當作參數傳遞,同時更新記錄中的數個欄位。

如果提供者支援批次更新,您可以讓提供者快取多筆記錄的變更,然後使用 UpdateBatch 方法在對資料庫的單一呼叫中傳輸這些變更。 這適用於使用 AddNewUpdateDelete 方法所做的變更。 呼叫 UpdateBatch 方法後,您可以使用 Status 屬性來檢查是否有任何資料衝突,以解決這些衝突。

注意

若要在不使用 Command 物件的情況下執行查詢,請將查詢字串傳至 Recordset 物件的 Open 方法。 不過,若您想要保存命令文字並重新執行,或使用查詢參數,則需要 Command 物件。

Mode 屬性會控管存取權限。

Fields 集合是 Recordset 物件的預設成員。 因此,下列兩個程式碼陳述式是等效的。

Debug.Print objRs.Fields.Item(0)  ' Both statements print   
Debug.Print objRs(0)              '  the Value of Item(0).  

Recordset 物件跨程序傳遞時,只會封送處理資料列集值,且會忽略 Recordset 物件的屬性。 在解除封送期間,資料列集會解壓縮到新建立的 Recordset 物件中,而此物件也會將屬性設定為預設值。

Recordset 物件可安全用於撰寫指令碼。

本節包含下列主題。

另請參閱

Connection 物件 (ADO)
Fields 集合 (ADO)
Properties 集合 (ADO)
附錄 A:提供者