单步调试为什么与直接运行结果会不一致

wch1013 2007-07-06 04:23:39
有这么一段代码:直接运行的结果与单步调试不一致不知道是什么原因
我做的程序是对表中的字段setrnd的每条纪录逐个赋一个随机值
下面是窗口form_load中的代码
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
cn.ConnectionString = connstring 'connstring是一个常数模块中已定义
cn.Open
If cn.State <> adStateOpen Then MsgBox "找不到数据库!"
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic
rs.Open "u_temp", cn, , , adCmdTable 'u_temp 赋随机值的表

Dim b(n) As Integer
Dim i As Integer
Dim cnt As Integer

Call rptingrnd(rs.RecordCount, b()) ’这个函数是用来生成一串和纪录数一样
长的随机数,并分别存在数组b中,以
后就直接把b数组赋给setrnd字段
i = 1
############
While Not rs.EOF
rs.Fields(4) = b(i) '将随机值逐个赋给字段setrnd
rs.Update
i = i + 1
rs.MoveNext
Wend

############

Adodc1.ConnectionString = connstring
Adodc1.RecordSource = "select * from u_temp order by setrnd" 'setrnd保存
Adodc1.Refresh 随机值的字段

Set Picture2.DataSource = Adodc1
Picture2.DataField = "picture"

Label2.Caption = Adodc1.Recordset.Fields(0)
Label3.Caption = Adodc1.Recordset.Fields(7)
Label4.Caption = Adodc1.Recordset.Fields(4)
rs.close
cn.close
上面3个label标签是我调式的时候用的 也就是因为这3个我才发现了直接运行程序和单步调式的结果不一致 (上面的程序是在form_load中的;label2,3,4只取第一条纪录,即排序后的setrnd最小的那条)
当直接运行的时候我发现结果得出的不是刚刚算出来的随机值,而是在运行前,数据库中已经保存的纪录,就好象是##### #####之间的代码没有运行时的效果一样
但是如果用单步调式我很清楚的看到每一个字段都给赋予了一个随机值,而不是在程序运行前上一次算出来的随机值。
打个比喻 在数据库中已经排序好的纪录 setrnd=2 最小 第一条纪录
label2.caption label3.caption label4.caption
pid=3 setrnd=2 position=1
程序单步调式后给字段setrnd都赋值好了 最小的setrnd=1 第一条纪录
pid=4 setrnd=1 position=4
但是如果把rs.close 和 cn.close移动到 第二个######下那么单步调式和直接运行的结果就会一样
或着在 第二个####### 下 加入 cn.execute("select * from u_temp order by setrnd") 也会正确
请问这是什么原因?我主要是想知道为什么单步调式和直接运行的结果会不一样,请不要讨论取随机数的办法。
我是新手没有分数,有点不好意思,还写了那么
...全文
346 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧