【資料庫】MFC ODBC(四)

QingLiXueShi發表於2015-10-06

7、滾動記錄

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

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

注意:如果記錄集是空的,那麼呼叫上述函式將產生異常。另外,必須保證滾動沒有超出記錄集的邊界。

long GetRecordCount( ) const;// 呼叫GetRecordCount可獲得記錄集中的記錄總數。

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

 

8、修改、新增和刪除記錄

(1)修改記錄

1)呼叫Edit成員函式。呼叫該函式後就進入了編輯模式,程式可以修改域資料成員。注意不要在一個空的記錄集中呼叫Edit,否則會產生異常。

2)設定域資料成員的新值。

3)呼叫Update完成編輯。Update把變化後的記錄寫入資料來源並結束編輯模式。

m_ChangeLineSet.Edit();

//欄位設定...
m_ChangeLineSet.m_Date=datatemp.Date;

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

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

(2)新增記錄

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則表明可以新增記錄。

 

相關文章