共用方式為


動態集

本主題描述動態集,並討論其 可用性

注意

本主題適用于 MFC ODBC 類別,包括 CRecordset 。 如需 DAO 類別中動態集的相關資訊,請參閱 CDaoRecordset 。 透過 DAO,您可以開啟動態集類型記錄集。

動態集是具有動態屬性的記錄集。 在其存留期間,動態集模式中的 recordset 物件(通常稱為動態集)會以下列方式與資料來源保持同步。 在多使用者環境中,其他使用者可能會編輯或刪除動態集中的記錄,或將記錄新增至動態集所代表的資料表。 應用程式新增或刪除記錄集的記錄會反映在您的動態集中。 在您藉由呼叫 Requery 其成員函式來重建動態集之前,其他使用者新增至資料表的記錄將不會反映在動態集中。 當其他使用者刪除記錄時,MFC 程式碼會略過記錄集中的刪除。 當您捲動至受影響的記錄時,其他使用者對現有記錄的編輯變更就會反映在動態集中。

同樣地,對動態集中記錄所做的編輯也會反映在其他使用者使用的動態集中。 您新增的記錄不會反映在其他使用者的動態集中,直到他們重新查詢其動態集為止。 您刪除的記錄會標示為其他使用者記錄集中的「已刪除」。 如果您有多個與相同資料庫 (多個 CDatabase 物件) 的連接,則與這些連線相關聯的記錄集與其他使用者的記錄集具有相同的狀態。

動態資料集在資料必須是動態時最有價值,例如,在航空公司預訂系統中。

注意

若要使用動態集,您必須擁有支援動態集之資料來源的 ODBC 驅動程式,而且不能載入 ODBC 資料指標程式庫。 如需詳細資訊,請參閱 Dynasets 的可用性。

若要指定記錄集是動態集,請將 作為第一個參數傳遞 CRecordset::dynasetOpen 記錄集物件的成員函式。

注意

針對可更新的動態集,ODBC 驅動程式必須支援定位的 update 語句或 ::SQLSetPos ODBC API 函式。 如果支援這兩者,MFC 會使用 ::SQLSetPos 來提高效率。

Dynasets 的可用性

如果符合下列需求,MFC 資料庫類別支援動態集:

  • ODBC 資料指標程式庫 DLL 不得用於此資料來源。

    如果使用資料指標程式庫,它會遮罩動態集支援所需的基礎 ODBC 驅動程式的某些功能。 如果您想要使用動態集(且 ODBC 驅動程式具有動態集所需的功能,如本節的其餘部分所述),可能會導致 MFC 在建立 CDatabase 物件時不會載入資料指標程式庫。 如需詳細資訊,請參閱 ODBC 類別的 CDatabase OpenEx Open 成員函式。

    在 ODBC 術語中,動態集和快照集稱為資料指標。 資料指標是用來追蹤其記錄集中位置的機制。

  • 資料來源的 ODBC 驅動程式必須支援索引鍵集驅動資料指標。

    索引鍵集驅動資料指標會藉由取得和儲存一組索引鍵來管理資料表中的資料。 當使用者捲動到特定記錄時,索引鍵會用來從資料表取得目前的資料。 若要判斷驅動程式是否提供此支援,請使用 SQL_SCROLL_OPTIONS 參數呼叫 ::SQLGetInfo ODBC API 函

    如果您嘗試在沒有索引鍵集支援的情況下開啟動態集,則會取得 CDBException 傳回碼值AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED的 。

  • 資料來源的 ODBC 驅動程式必須支援延伸擷取。

    延伸擷取是能夠向後捲動,以及向前捲動 SQL 查詢所產生的記錄。 若要判斷驅動程式是否支援這項功能,請使用 SQL_API_SQLEXTENDEDFETCH 參數呼叫 ::SQLGetFunctions ODBC API 函 式。

如果您想要更新可更新的動態集(或快照集),ODBC 驅動程式也必須支援 ::SQLSetPos ODBC API 函式或定點更新。 函 ::SQLSetPos 式可讓 MFC 在不傳送 SQL 語句的情況下更新資料來源。 如果此支援可供使用,MFC 會以喜好設定來使用 SQL 進行更新。 若要判斷驅動程式是否支援 ::SQLSetPos ,請使用 SQL_POS_OPERATIONS 參數呼叫 ::SQLGetInfo

定點更新會使用 SQL 語法 ( WHERE CURRENT OF < cursorname > ) 來識別資料來源資料表中的特定資料列。 若要判斷驅動程式是否支援定點更新,請使用 SQL_POSITIONED_STATEMENTS 參數呼叫 ::SQLGetInfo

一般而言,MFC 動態集(但不是順向記錄集)需要具有層級 2 API 一致性的 ODBC 驅動程式。 如果資料來源的驅動程式符合層級 1 API 集合,您仍然可以同時使用可更新和唯讀的快照集和順向記錄集,但不能使用動態集。 不過,如果層級 1 驅動程式支援擴充擷取和索引鍵集驅動資料指標,則可以支援動態集。 如需 ODBC 一致性層級的詳細資訊,請參閱 ODBC

注意

如果您想要同時使用快照集和動態集,您必須以兩個不同的 CDatabase 物件為基礎(兩個不同的連接)。

不同于使用 ODBC 資料指標程式庫所維護之中繼儲存體的快照集,動態集會在捲動至該快照集時,直接從資料來源擷取記錄。 這會讓動態集最初選取的記錄與資料來源同步。

如需此版本 Visual C++ 隨附之 ODBC 驅動程式的清單,以及取得其他驅動程式的相關資訊,請參閱 ODBC 驅動程式清單

另請參閱

開放式資料庫連接 (ODBC)