ODBC:ODBC 資料指標程式庫
本主題描述 ODBC 數據指標連結庫,並說明如何使用它。 如需詳細資訊,請參閱
ODBC 數據指標連結庫是位於 ODBC 驅動程式管理員與驅動程式之間的動態連結庫 (DLL)。 在 ODBC 方面,驅動程式會維護數據指標,以追蹤其在記錄集中的位置。 游標會標記您已捲動的記錄集中的位置, 也就是目前的記錄。
數據指標連結庫和層級 1 ODBC 驅動程式
ODBC 資料指標連結庫提供第 1 層驅動程式下列新功能:
向前和向後捲動。 層級 2 驅動程式不需要數據指標連結庫,因為它們已經可捲動。
支援快照集。 數據指標連結庫會管理包含快照集記錄的緩衝區。 此緩衝區會反映程式對記錄的刪除和編輯,但不會反映其他使用者的新增、刪除或編輯。 因此,快照集只會像數據指標連結庫的緩衝區一樣目前。 在您呼叫
Requery
之前,緩衝區也不會反映您自己的新增專案。 動態集不使用數據指標連結庫。
即使驅動程式通常不支援快照集,數據指標連結庫也會提供快照集(靜態數據指標)。 如果您的驅動程式已經支援靜態數據指標,則不需要載入數據指標連結庫以取得快照集支援。 如果您使用數據指標連結庫,則只能使用快照集和正向記錄集。 如果您的驅動程式支援動態集(KEYSET_DRIVEN數據指標),而且您想要使用這些動態集,則不得使用數據指標連結庫。 如果您想要同時使用快照集和動態集,除非您的驅動程式同時支援這兩個對象,否則您必須以兩個不同的 CDatabase
物件(兩個不同的連接)為基礎。
定位的更新和時間戳數據行
注意
ODBC 數據源可透過 MFC ODBC 類別存取,如本主題所述,或透過 MFC 資料存取物件 (DAO) 類別來存取。
注意
如果您的 ODBC 驅動程式支援 SQLSetPos
,如果可用,MFC 會使用,則本主題不適用於您。
大部分層級 1 驅動程式都不支援定位更新。 這類驅動程式依賴數據指標連結庫來模擬第 2 層驅動程式在這方面的功能。 數據指標連結庫會藉由在未變更的欄位上執行搜尋的更新,模擬定位更新支援。
在某些情況下,記錄集可能會包含時間戳數據行作為其中一個未變更的欄位。 使用 MFC 記錄集搭配包含時間戳數據行的數據表時發生兩個問題。
第一個問題涉及具有時間戳數據行之數據表的可更新快照集。 如果快照集所系結的數據表包含時間戳資料行,您應該在呼叫 和 Update
之後呼叫Requery
Edit
如果沒有,您可能無法再次編輯相同的記錄。 當您呼叫 Edit
,然後 Update
,記錄會寫入數據源,並更新時間戳數據行。 如果您未呼叫 Requery
,快照集中記錄的時間戳值就不會再符合數據源上的對應時間戳。 當您嘗試再次更新記錄時,數據源可能會因為不相符而不允許更新。
第二個問題涉及與函RFX_Date
式搭配使用時,CTime 類別的限制,以將時間和日期資訊傳送至數據表或從數據表傳送。 CTime
處理物件會在數據傳輸期間,以額外的中繼處理形式造成一些額外額外負荷。 物件的日期範圍 CTime
可能也會對某些應用程式太限制。 新版本的 RFX_Date
函式會採用 ODBC TIMESTAMP_STRUCT 參數, CTime
而不是物件。 如需詳細資訊,請參閱 RFX_Date
MFC 參考中的巨集和全域。
使用數據指標連結庫
當您透過呼叫 CDatabase::OpenEx 或 CDatabase::Open 連接到數據源時,您可以指定是否要使用數據源的數據指標連結庫。 如果您要在該數據源上建立快照集,請在 參數中指定 CDatabase::useCursorLib
選項,OpenEx
或將 bUseCursorLib 參數Open
指定為 TRUE(預設值為 dwOptions
TRUE)。 如果您的 ODBC 驅動程式支援動態集,而且您想要在數據源上開啟動態集,請勿使用資料指標連結庫(它會遮罩動態集所需的某些驅動程式功能)。 在此情況下,請勿在 中OpenEx
指定 CDatabase::useCursorLib
或為 中的 Open
bUseCursorLib 參數指定 FALSE。