資料庫 MFC ODBC 二

2022-04-12 05:22:30 字數 2861 閱讀 3240

三、crecordset類

1、isbof與iseof

(1)isbof

如果記錄集沒有記錄,或已經向前游動到第乙個記錄之前,則返回非零;否則返回0。詳細說明如下:

1)訪問open函式之後,如果記錄集沒有任何記錄,isbof返回非零。當你開啟乙個至少包含乙個記錄的記錄集,第乙個記錄是當前記錄,此時isbof返回0。

2)如果第乙個記錄是當前記錄並且你訪問moveprev,之後isbof會返回非零值。如果isbof返回非零值並且訪問moveprev函式,會報錯。

3)如果isbof返回非零值,說明當前記錄沒有定義,任何請求當前記錄的動作將會導致錯誤。

(2)iseof

如果記錄集沒有記錄,或已經滾動到最後一條紀錄之後,則返回非零。否則,返回0。

if

(m_test.isopen())

m_test.close();

m_test.open();

//如果記錄集為空,返回

if(m_test.isbof())

return

false;

//如果不是最後乙個記錄的下乙個位置,就向下移動乙個記錄

while (!m_test.iseof)

2、快照(snapshot) 和動態集(dynaset)

在多工作業系統或網路環境中,多個使用者可以共享同乙個資料來源。共享資料的乙個主要問題是如何協調各個使用者對資料來源的修改。例如,當某乙個應用改變了資料來源中的記錄時,別的連線至該資料來源的應用應該如何處理。對於這個問題,基於mfc的odbc應用程式可以採取幾種不同的處理辦法,這將由程式採用哪種記錄集決定。

記錄集主要分為快照(snapshot) 和動態集(dynaset)兩種,crecordset類對這兩者都支援。這兩種記錄集的不同表現在它們對別的應用改變資料來源記錄採取了不同的處理方法。

(1)快照(snapshot) 

快照型記錄集提供了對資料的靜態視。當別的使用者改變了記錄時(包括修改、新增和刪除),快照中的記錄不受影響,也就是說,快照不反映別的使用者對資料來源記錄的改變,直到呼叫了crecordset::requery重新查詢後,快照才會反映變化。需要指出的是,快照的這種靜態特性是相對於別的使用者而言的,它會正確反映由本身使用者對記錄的修改和刪除,但對於新新增的記錄直到呼叫requery後才能反映到快照中。

(2)動態集(dynaset)

(3)游標機制

在記錄集中滾動,需要有乙個標誌來指明滾動後的位置(當前位置)。odbc驅動程式會維護乙個游標,用來跟蹤記錄集的當前記錄,可以把游標理解成跟蹤記錄集位置的一種機制。

游標庫(cursor library)是處於odbc驅動程式管理器和驅動程式之間的動態鏈結庫(odbccr32.dll)。游標庫的主要功能是支援快照以及為底層驅動程式提供雙向滾動能力,高層次的驅動程式不需要游標庫,因為它們是可滾動的。游標庫管理快照記錄的緩衝區,該緩衝區反映本程式對記錄的修改和刪除,但不反映其它使用者對記錄的改變,由此可見,快照實際上相當於當前的游標庫緩衝區。

快照是一種靜態游標(static cursor)。靜態游標直到滾動到某個記錄才能取得該記錄的資料。因此,要保證所有的記錄都被快照,可以先滾動到記錄集的末尾,然後再滾動到感興趣的第乙個記錄上。這樣做的缺點是滾動到末尾需要額外的開銷,會降低效能。

與快照不同,動態集不用游標庫維持的緩衝區來存放記錄。實際上,動態集是不使用游標庫的,因為游標庫會遮蔽掉一些支援動態集的底層驅動程式功能。動態集是一種鍵集驅動游標(keyset-driven cursor),當開啟乙個動態集時,驅動程式儲存記錄集中每個記錄的鍵。只要游標在動態集中滾動,驅動程式就會通過鍵來從資料來源中檢取當前記錄,從而保證選取的記錄與資料來源同步。

從上面的分析中可以看出,快照和動態集有乙個共同的特點,那就是在建立記錄集後,記錄集中的成員就已經確定了。這就是為什麼兩種記錄集都不能反映別的使用者新增記錄的原因。

3、open與requery

crecordset的open()和requery()成員函式可以實現記錄查詢。詳細說明如下:

(1)使用crecordset的類物件之前,必須使用crecordset的成員函式open()來獲得有效的記錄集。一旦使用過open()函式,再次查詢時使用requery()函式就可以了。

(2)呼叫open()函式時,如果已經將乙個開啟的cdatabase物件指標傳遞給crecordset類物件的m_pdatabase成員變數,那麼,crecordset類物件將使用該資料庫物件建立odbc連線;否則,如果m_pdatabase為空指標,物件就需要就新建乙個cdatabase類物件並使其與預設的資料來源相連,然後進行crecordset類物件的初始化。預設資料來源由getdefaultconnect()函式獲得。

(3)也可以提供所需要的sql語句,並以它來呼叫crecordset::open()函式,例如:

//

strsql為sql語句

m_test.open(afx_db_use_default_type, strsql);

(4)如果open沒有指定引數,程式使用預設的sql語句,即對在getdefaultsql()函式中指定的sql語句進行操作。例如:

cstring chistoryset::getdefaultsql()

getdefaultsql()函式返回的表名,對應的預設操作是select語句,即:select *from history。

MFC ODBC資料庫程式設計

一 mfc提供的odbc資料庫類 visual c 的mfc基類庫定義了幾個資料庫類。在利用odbc程式設計時,經常要使用到cdatabase 資料庫類 crecordset 記錄集類 和crecordview 可視記錄集類 cdatabase類 提供了對資料來源的連線,通過它可以對資料來源進行操作...

資料庫 MFC ODBC 四

7 滾動記錄 crecordset提供了幾個成員函式用來在記錄集中滾動。當用這些函式滾動到乙個新記錄時,框架會自動地把新記錄的內容拷貝到域資料成員中。void movenext 前進乙個記錄 void moveprev 後退乙個記錄 void movefirst 滾動到記錄集中的第乙個記錄 void...

MFC ODBC資料庫開發技術

1.mfc odbc 主要類的介紹 visual c 提供了mfc odbc 類,封裝了odbc api,這使得利用mfc來建立odbc的應用程式非常簡便。在mfc odbc類中,常用的類有cdatabase 資料庫類 crecordset 記錄集類 crecordview 可視記錄集類 和cdbe...