【數據庫】MFC ODBC(四)

七、滾動記錄數據庫

CRecordset提供了幾個成員函數用來在記錄集中滾動。當用這些函數滾動到一個新記錄時,框架會自動地把新記錄的內容拷貝到域數據成員中。框架

void MoveNext( );  //前進一個記錄
void MovePrev( );  //後退一個記錄
void MoveFirst( ); //滾動到記錄集中的第一個記錄
void MoveLast( );  //滾動到記錄集中的最後一個記錄
//該函數用於滾動到由參數nRows指定的絕對位置處。若nRows爲負數,則從後往前滾動。例如,當nRows爲-1時,函數就滾動到記錄集的末尾。注意,該函數不會跳過被刪除的記錄。
void SetAbsolutePosition( long nRows );

注意:若是記錄集是空的,那麼調用上述函數將產生異常。另外,必須保證滾動沒有超出記錄集的邊界。函數

long GetRecordCount( ) const;// 調用GetRecordCount可得到記錄集中的記錄總數。

注意:GetRecordCount返回的其實是用戶在記錄集中滾動的最遠距離。要想真正返回記錄總數,只有調用MoveNext移動到記錄集的末尾(MoveLast不行)。spa

 

八、修改、添加和刪除記錄code

(1)修改記錄blog

1)調用Edit成員函數。調用該函數後就進入了編輯模式,程序能夠修改域數據成員。注意不要在一個空的記錄集中調用Edit,不然會產生異常。
it

2)設置域數據成員的新值。io

3)調用Update完成編輯。Update把變化後的記錄寫入數據源並結束編輯模式。ast

m_ChangeLineSet.Edit();

//字段設置...
m_ChangeLineSet.m_Date=datatemp.Date;

//更新記錄
m_ChangeLineSet.Update();

//重建記錄集
m_ChangeLineSet.Requery();

(2)添加記錄class

1)調用AddNew成員函數。調用該函數後就進入了添加模式,該函數把全部的域數據成員都設置成NULL(注意,在數據庫術語中,NULL是指沒有值,這與C++的NULL是不一樣的)。與Edit同樣,AddNew會把當前域數據成員的內容保存在一個緩衝區中。

2)設置域數據成員。

3)調用Update。Update把域數據成員中的內容做爲新記錄寫入數據源,從而結束了添加。若是記錄集是快照,那麼在添加一個新的記錄後,須要調用Requery從新查詢,由於快照沒法反映添加操做。

if (m_ChangeLineSet.CanAppend()) {
    m_ChangeLineSet.AddNew();
    
    //字段設置...
    m_ChangeLineSet.m_Date=datatemp.Date;

    //更新記錄
    m_ChangeLineSet.Update();
    
    //重建記錄集
    m_ChangeLineSet.Requery();

}

(3)刪除記錄

1)調用Delete成員函數。該函數會同時給記錄集和數據源中當前記錄加上刪除標記。注意不要在一個空記錄集中調用Delete,不然會產生一個異常。

2)滾動到另外一個記錄上以跳過刪除記錄。

//刪除記錄集,不須要Update
if (m_ChangeLineSet.CanUpdate())
    m_ChangeLineSet.Delete();

在對記錄集進行更改之前,程序也許要調用下列函數來判斷記錄集是不是能夠更改的,由於若是在不能更改的記錄集中進行修改、添加或刪除將致使異常的產生。

BOOL CanUpdate( ) const;  //返回TRUE代表記錄是能夠修改、添加和刪除的。
BOOL CanAppend( ) const;  //返回TRUE則代表能夠添加記錄。
相關文章
相關標籤/搜索