七、滾動記錄數據庫
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則代表能夠添加記錄。