📄 vb6error.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="Author" content>
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<title>VB6 与数据库程序设计 - 错误更正</title>
</head>
<body bgcolor="#FFFFFF" text="#202020" link="#FF0000"
vlink="#000080" alink="#FF0000">
<h2 align="center"><font color="#0000FF">VB6
数据库程序设计</font></h2>
<p align="center"><font color="#800000" size="5"><b>错误更正</b></font></p>
<hr>
<h3><font color="#800000">更正日期:99/06/07</font></h3>
<hr>
<p><font color="#0000FF">p.169 程序:</font></p>
<blockquote>
<p>原书内容:</p>
</blockquote>
<blockquote>
<blockquote>
<pre><font color="#0000FF">Private Sub Adodc1_Error(DataErr AS Integer, Response _
As Integer)</font><font color="#FF0000">
</font> If ErrorNumber = <font color="#0000FF">3662</font> Then
'处理错误程序码,例如显示错误信息
<font color="#0000FF">Response = 0</font><font
color="#FF0000"> </font>'请Adodc控件不必再显示任何信息
End If
End Sub</pre>
</blockquote>
<p>更正后内容:</p>
</blockquote>
<blockquote>
<blockquote>
<pre><font color="#FF0000">Private Sub Adodc1_Error(ByVal ErrorNumber As Long, Description As String,
ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal
HelpContext As Long, fCancelDisplay As Boolean)
</font> If ErrorNumber = <font color="#FF0000" size="4"><strong>16389</strong></font> Then
'处理错误程序码,例如显示错误信息
<font color="#FF0000">fCancelDisplay = True </font>'请Adodc控件不必再显示任何信息
End If
End Sub</pre>
</blockquote>
</blockquote>
<hr>
<h3><font color="#800000">更正日期:99/05/26</font></h3>
<hr>
<blockquote>
<p><font color="#0000FF">p.90 第一段文字:</font></p>
<blockquote>
<p>原书内容:</p>
<blockquote>
<p>执行「Recordset.Update」语句将数据记录(也就是所有栏位)数据写<br>
入<font color="#0000FF">缓冲区</font>之前。</p>
</blockquote>
<p>更正后内容:</p>
<blockquote>
<p>执行「Recordset.Update」语句将数据记录(也就是所有栏位)数据写<br>
入<font color="#FF0000">数据库</font>之前。</p>
</blockquote>
</blockquote>
<p><font color="#0000FF">p.120 参考解答:</font></p>
<blockquote>
<p>原书内容:</p>
</blockquote>
<blockquote>
<blockquote>
<p>(1) Where 成交量 >= 3500<br>
(2) Where 股票名称 = '旗阵'<br>
(3) Where 涨跌 > 3 Or 涨跌 < -3<br>
(4) Where 交易日期 > #97/8/30#<br>
(5) Where 股票名称 Like "台<font
color="#0000FF">*</font>"<br>
(6) Where 股票名称 Like "<font
color="#0000FF">*</font>台<font color="#0000FF">*</font>"<br>
(7) Where 股票名称 Is Null<br>
(8) Where 股票名称 Like "<font
color="#0000FF">*</font>泥"<br>
(9) Where Len(股票名称) < 3</p>
</blockquote>
</blockquote>
<blockquote>
<p>更正后内容:</p>
</blockquote>
<blockquote>
<blockquote>
<p>(1) Where 成交量 >= 3500<br>
(2) Where 股票名称 = '旗阵'<br>
(3) Where 涨跌 > 3 Or 涨跌 < -3<br>
(4) Where 交易日期 > #97/8/30#<br>
(5) Where 股票名称 Like "台<font
color="#FF0000">%</font>"<br>
(6) Where 股票名称 Like "<font
color="#FF0000">%</font>台<font color="#FF0000">%</font>"<br>
(7) Where 股票名称 Is Null<br>
(8) Where 股票名称 Like "<font
color="#FF0000">%</font>泥"<br>
(9) Where Len(股票名称) < 3</p>
</blockquote>
</blockquote>
<blockquote>
<p>特别说明:</p>
</blockquote>
<blockquote>
<blockquote>
<p>* 是 DAO(Data Access Objects) SQL
的万用字符, 而 % 是 ADO (ActiveX Data
Objects) SQL 的万用字符, 对于写过 VB5
数据库程序的人来说, 往往会顺手写 *
为 SQL 的万用字符。<font color="#008000"> (注:VB6
可以同时使用 DAO 及 ADO
来存取数据库,但由于书本的介绍以 ADO
为主,所以应该采用 % 为万用字符)</font></p>
</blockquote>
</blockquote>
<p><font color="#0000FF">p.120 参考解答:</font></p>
</blockquote>
<blockquote>
<blockquote>
<p>原书内容:</p>
</blockquote>
</blockquote>
<blockquote>
<blockquote>
<blockquote>
<p>(1) Select *, 涨跌/收盘价*100 As 涨幅 From
股票行情表 <br>
Order By 涨跌/收盘价*100<br>
(2) Select *, (最高价-最低价)/收盘价*100 As
震荡幅度 <br>
From 股票行情表 Order By (最高价-最低价)/收盘价*100<br>
(3) Select *, 收盘价*成交量 As 成交金额
From 股票行情表 <br>
Order By 收盘价*成交量</p>
</blockquote>
</blockquote>
<blockquote>
<p>更正后内容:</p>
</blockquote>
<blockquote>
<blockquote>
<p>(1) Select *, 涨跌/收盘价*100 As 涨幅 From
股票行情表 <br>
Order By 涨跌/收盘价*100 <font color="#FF0000">Desc</font><br>
(2) Select *, (最高价-最低价)/收盘价*100 As
震荡幅度 <br>
From 股票行情表 Order By (最高价-最低价)/收盘价*100
<font color="#FF0000">Desc</font><br>
(3) Select *, 收盘价*成交量 As 成交金额
From 股票行情表 <br>
Order By 收盘价*成交量 <font color="#FF0000">Desc</font></p>
</blockquote>
</blockquote>
<p><font color="#0000FF">p.167 最后一行、p.169
最后一行、p.170 第一段程序:</font></p>
<blockquote>
<p>原书内容:<font color="#0000FF"> -2147217887</font><br>
更正后内容: <font color="#FF0000">-2147467259</font></p>
</blockquote>
</blockquote>
<hr>
<h3><font color="#800000">更正日期:99/04/23</font></h3>
<hr>
<blockquote>
<p><font color="#0000FF">p.47 第一段文字</font></p>
<blockquote>
<p>原书内容:</p>
</blockquote>
<blockquote>
<blockquote>
<pre><font size="4">笔者判定这是 VB 的 bug,经研究之后,找到避开这个 bug 的方法
-- 在 Delete 方法之后加上 DoEvents 语句,修改后的程序如下:
Adodc1.Recordset.MoveFirst
Adodc1.Recordset.Delete
DoEvents
Adodc1.Recordset.Delete
DoEvents
Adodc1.Recordset.Delete
DoEvents</font></pre>
</blockquote>
</blockquote>
<blockquote>
<p>更正后内容:<font color="#FF0000" size="2">(致歉!
这不是 VB 的错误,是笔者一时糊涂,
弄错了)</font></p>
</blockquote>
<blockquote>
<blockquote>
<pre><font size="4">当第一个 Delete 方法被执行之后,目前数据记录即被删除,接着目前
数据记录便不存在,以致再执行第二个 Delete 及 第三个 Delete 都
会产生错误,修正的方法是在删除目前数据记录之后,利用 MoveNext
方法将目前数据记录设定到下一笔:</font></pre>
<pre><font size="4">Adodc1.Recordset.MoveFirst
Adodc1.Recordset.Delete
</font><font color="#0000FF" size="4">Adodc1.Recordset.MoveNext</font><font
size="4">
Adodc1.Recordset.Delete
</font><font color="#0000FF" size="4">Adodc1.Recordset.MoveNext</font><font
size="4">
Adodc1.Recordset.Delete</font></pre>
</blockquote>
<p>特别说明:<font color="#FF0000">为什么
DoEvents 也能够解决连续 Delete 的问题</font></p>
<blockquote>
<p><font size="3">其实 DoEvents(原来的作用是让程序暂停一下)
并不具备将目前数据记录移到<br>
下一笔的功用, 当我们暂停程序时,DataGrid
会获得 CPU 的使用权(注:<br>
虽然 DataGrid 属于程序的一部分, 但对于
Windows 来说, 它也是独立的视<br>
窗, 所以一样会因事件驱动而被执行),
所以就在程序暂停的时候,DataGrid <br>
会主动将目前数据记录移到下一笔,
这也使得 DoEvents 好像具备就目前数据<br>
录移到下一笔的功用,但实际上,
将目前数据记录移到下一笔的却是 DataGrid。</font></p>
<p><font size="3">由于我们可能在没有使用
DataGrid 的情况下(例如直接利用第 8
章介绍的 ADO <br>
对象), 而使用 Recordset.Delete
方法来删除数据记录, 若是此一情况,
DoEvents <br>
就会充分暴露出它不具备将目前数据记录移到下一笔的功能。</font></p>
</blockquote>
</blockquote>
<p><font color="#0000FF">p.47 参考解答:</font></p>
<blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -