📄 chap10_5.htm
字号:
<p ALIGN="JUSTIFY"></font><font SIZE="3">如果在建立记录集时选择了</font><font FACE="Times New Roman" SIZE="3">CRecordset::skipDeletedRecords</font><font SIZE="3">选项,那么除了</font><font FACE="Times New Roman" SIZE="3">SetAbsolutePosition</font><font SIZE="3">外,在滚动记录时将跳过被删除的记录,这一点对象</font><font FACE="Times New Roman" SIZE="3">FoxPro</font><font SIZE="3">这样的数据库十分重要.</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">如果记录集是空的,那么调用上述函数将产生异常.另外,必须保证滚动没有超出记录集的边界.调用</font><font FACE="Times New Roman" SIZE="3">IsEOF</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">IsBOF</font><font SIZE="3">可以进行这方面的检测.</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<blockquote>
<blockquote>
<p ALIGN="JUSTIFY">BOOL IsEOF( ) const;<br>
</font><font SIZE="3">如果记录集为空或滚动过了最后一个记录,那么函数返回</font><font FACE="Times New Roman" SIZE="3">TRUE</font><font SIZE="3">,否则返回</font><font FACE="Times New Roman" SIZE="3">FALSE</font><font SIZE="3">.</p>
</font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">BOOL IsBOF( ) const;<br>
</font><font SIZE="3">如果记录集为空或滚动过了第一个记录,那么函数返回</font><font FACE="Times New Roman" SIZE="3">TRUE</font><font SIZE="3">,否则返回</font><font FACE="Times New Roman" SIZE="3">FALSE</font><font SIZE="3">.</font></p>
</blockquote>
</blockquote>
<p><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">下面是一个使用</font><font FACE="Times New Roman" SIZE="3">IsEOF</font><font SIZE="3">的例子:</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">while(!m_pSet->IsEOF( ))</p>
<p ALIGN="JUSTIFY">m_pSet->MoveNext( );</p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">调用</font><font FACE="Times New Roman" SIZE="3">GetRecordCound</font><font SIZE="3">可获得记录集中的记录总数,该函数的声明为</p>
<blockquote>
<blockquote>
</font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">long GetRecordCount( )
const;<br>
</font><font SIZE="3">要注意这个函数返回的实际上是用户在记录集中滚动的最远距离.要想真正返回记录总数,只有调用</font><font FACE="Times New Roman" SIZE="3">MoveNext</font><font SIZE="3">移动到记录集的末尾</font><font FACE="Times New Roman" SIZE="3">(MoveLast</font><font SIZE="3">不行</font><font FACE="Times New Roman" SIZE="3">)</font><font SIZE="3">.</p>
</font><font FACE="Times New Roman" SIZE="3">
</blockquote>
</blockquote>
<p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font></b><font color="#3973DE" FACE="Times New Roman" SIZE="3">10.5.6
</font><font SIZE="3" color="#3973DE">修改、添加和删除记录</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">要修改当前记录,应该按下列步骤进行:</p>
<blockquote>
<blockquote>
<p ALIGN="JUSTIFY">调用</font><font FACE="Times New Roman" SIZE="3">Edit</font><font SIZE="3">成员函数.调用该函数后就进入了编辑模式,程序可以修改域数据成员.注意不要在一个空的记录集中调用</font><font FACE="Times New Roman" SIZE="3">Edit</font><font SIZE="3">,否则会产生异常.</font><font FACE="Times New Roman" SIZE="3">Edit</font><font SIZE="3">函数会把当前域数据成员的内容保存在一个缓冲区中,这样做有两个目的,一是可以与域数据成员作比较以判断哪些字段被改变了,二是在必要的时侯可以恢复域数据成员原来的值.若再次调用</font><font FACE="Times New Roman" SIZE="3">Edit</font><font SIZE="3">,则将从缓冲区中恢复域数据成员,调用后程序仍处于编辑模式.调用</font><font FACE="Times New Roman" SIZE="3">Move(AFX_MOVE_REFRESH)</font><font SIZE="3">或</font><font FACE="Times New Roman" SIZE="3">Move(0)</font><font SIZE="3">可退出编辑模式</font><font FACE="Times New Roman" SIZE="3">(AFX_MOVE_REFRESH</font><font SIZE="3">的值为</font><font FACE="Times New Roman" SIZE="3">0)</font><font SIZE="3">,同时该函数会从缓冲区中恢复域数据成员.</p>
<p ALIGN="JUSTIFY">设置域数据成员的新值.</p>
<p ALIGN="JUSTIFY">调用</font><font FACE="Times New Roman" SIZE="3">Update</font><font SIZE="3">完成编辑.</font><font FACE="Times New Roman" SIZE="3">Update</font><font SIZE="3">把变化后的记录写入数据源并结束编辑模式.</font></p>
</blockquote>
</blockquote>
<p><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">要向记录集中添加新的记录,应该按下列步骤进行:</p>
<blockquote>
<blockquote>
<p ALIGN="JUSTIFY">调用</font><font FACE="Times New Roman" SIZE="3">AddNew</font><font SIZE="3">成员函数.调用该函数后就进入了添加模式,该函数把所有的域数据成员都设置成</font><font FACE="Times New Roman" SIZE="3">NULL(</font><font SIZE="3">注意,在数据库术语中,</font><font FACE="Times New Roman" SIZE="3">NULL</font><font SIZE="3">是指没有值,这与</font><font FACE="Times New Roman" SIZE="3">C++</font><font SIZE="3">的</font><font FACE="Times New Roman" SIZE="3">NULL</font><font SIZE="3">是不同的</font><font FACE="Times New Roman" SIZE="3">)</font><font SIZE="3">.与</font><font FACE="Times New Roman" SIZE="3">Edit</font><font SIZE="3">一样,</font><font FACE="Times New Roman" SIZE="3">AddNew</font><font SIZE="3">会把当前域数据成员的内容保存在一个缓冲区中,在必要的时侯,程序可以再次调用</font><font FACE="Times New Roman" SIZE="3">AddNew</font><font SIZE="3">取消添加操作并恢复域数据成员原来的值,调用后程序仍处于添加模式.调用</font><font FACE="Times New Roman" SIZE="3">Move(AFX_MOVE_REFRESH)</font><font SIZE="3">可退出添加模式,同时该函数会从缓冲区中恢复域数据成员.</p>
<p ALIGN="JUSTIFY">设置域数据成员.</p>
<p ALIGN="JUSTIFY">调用</font><font FACE="Times New Roman" SIZE="3">Update</font><font SIZE="3">.</font><font FACE="Times New Roman" SIZE="3">Update</font><font SIZE="3">把域数据成员中的内容作为新记录写入数据源,从而结束了添加.</font></p>
</blockquote>
</blockquote>
<p><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">如果记录集是快照,那么在添加一个新的记录后,需要调用</font><font FACE="Times New Roman" SIZE="3">Requery</font><font SIZE="3">重新查询,因为快照无法反映添加操作.</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">要删除记录集的当前记录,应按下面两步进行:</p>
<blockquote>
<blockquote>
<p ALIGN="JUSTIFY">调用</font><font FACE="Times New Roman" SIZE="3">Delete</font><font SIZE="3">成员函数.该函数会同时给记录集和数据源中当前记录加上删除标记.注意不要在一个空记录集中调用</font><font FACE="Times New Roman" SIZE="3">Delete</font><font SIZE="3">,否则会产生一个异常.</p>
<p ALIGN="JUSTIFY">滚动到另一个记录上以跳过删除记录.</font></p>
</blockquote>
</blockquote>
<p><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">上面提到的函数声明为:</p>
<blockquote>
<blockquote>
</font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">virtual void Edit(
);throw( CDBException, CMemoryException );</p>
<p ALIGN="JUSTIFY">virtual void AddNew( );throw( CDBException );</p>
<p ALIGN="JUSTIFY">virtual void Delete( );throw( CDBException );</p>
<p ALIGN="JUSTIFY">virtual BOOL Update( );throw( CDBException ); <br>
</font><font SIZE="3">若更新失败则函数返回</font><font FACE="Times New Roman" SIZE="3">FALSE</font><font SIZE="3">,且会产生一个异常.</font></p>
</blockquote>
</blockquote>
<p><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">在对记录集进行更改以前,程序也许要调用下列函数来判断记录集是否是可以更改的,因为如果在不能更改的记录集中进行修改、添加或删除将导致异常的产生.</p>
<blockquote>
<blockquote>
</font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">BOOL CanUpdate( ) const;
//</font><font SIZE="3">返回</font><font FACE="Times New Roman" SIZE="3">TRUE</font><font SIZE="3">表明记录是可以修改、添加和删除的.</p>
</font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">BOOL CanAppend( ) const;
//</font><font SIZE="3">返回</font><font FACE="Times New Roman" SIZE="3">TRUE</font><font SIZE="3">则表明可以添加记录.</p>
</font>
</blockquote>
</blockquote>
<div align="center"><center><table border="0" cellpadding="0" cellspacing="0" width="615">
<tr>
<td><a href="chap10_4.htm">上一页</a></td>
<td><p align="right"><a href="chap10_6.htm">下一页</a></td>
</tr>
</table>
</center></div><font SIZE="5"><hr noshade color="#3973DE" size="1">
<p align="center"></font><font size="2" color="#000000">本教程由<a href="http://vcdynasty.yeah.net">Visual C++王朝(Where programmers come together)</a>协助制作<br>
未经许可,请勿以任何形式复制</font></td>
<b>
</tr>
</table>
</center></div>
<p ALIGN="CENTER"></b><font SIZE="5"> </font><font FACE="Times New Roman" SIZE="5"></p>
</font><font FACE="Times New Roman" SIZE="3">
<p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
</font></b>
<p><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p></font> </p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -