閱讀英文

共用方式為


動態集

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

注意

本主題適用於 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類別的 CDatabaseOpenExOpen 成員函式。

    在 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)