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