为什么执行到If (Not rs2.EOF) Then时显示对象关闭?该如何解决

为什么执行到If (Not rs2.EOF) Then时显示对象关闭???PrivateSubCommand5_Click()checkbqopendbOnErrorRes

为什么执行到If (Not rs2.EOF) Then时显示对象关闭???
Private   Sub   Command5_Click()
checkbq
opendb
On   Error   Resume   Next

Dim   rs   As   New   ADODB.Recordset
Dim   rs2   As   New   ADODB.Recordset

lc_sql   =   "select   *   from   lcryk "
rs.Open   lc_sql,   Conn,   3,   3

While   Not   rs.EOF

        jbqk_sql   =   "Select   *   from   base_fqjbqk   where   zf_lcbm= ' "   &   rs.Fields( "bm ")   &   " '                       '更新base_fqjbqk表中的夫流出编号 "
        rs2.Open   jbqk_sql,   Conn,   3,   3
       
       
        If   (Not   rs2.EOF)   Then
                rs2.Fields( "zf_hyzh ")   =   rs.Fields( "hyz_bm ")
                rs2.Update
        End   If
       
        rs.MoveNext
Wend


rs.Close
rs2.Close

MsgBox   "修改成功! ",   vbInformation,   "异步软件 "
End   Sub

[解决办法]
jbqk_sql = "Select * from base_fqjbqk where zf_lcbm= ' " & rs.Fields( "bm ") & " '
这句sql错误



[解决办法]
jbqk_sql = "Select * from base_fqjbqk where zf_lcbm= ' " & rs.Fields( "bm ") & " ' " '更新base_fqjbqk表中的夫流出编号

一个双引号放错了位置
[解决办法]
把rs2.Open jbqk_sql, Conn, 3, 3

该成 rs2.Open jbqk_sql, Conn, 1, 1
[解决办法]
要么就是在vb中不可以那么连续使用两个Recordset?
[解决办法]

若此句之前rs2未能的到纪录集合,则下面的语句会出错 对象关闭
If (Not rs2.EOF) Then
rs2.Fields( "zf_hyzh ") = rs.Fields( "hyz_bm ")
rs2.Update
End If

所以应该是:
jbqk_sql = "Select * from base_fqjbqk where zf_lcbm= ' " & rs.Fields( "bm ") & " ' '更新base_fqjbqk表中的夫流出编号 "
rs2.Open jbqk_sql, Conn, 3, 3
这两句代码出错了

看看你的程序是否能正确的到数据集合??

[解决办法]
jbqk_sql = "Select * from base_fqjbqk where zf_lcbm= ' " & rs.Fields( "bm ") & " ' '更新base_fqjbqk表中的夫流出编号 "
rs2.Open jbqk_sql, Conn, 3, 3

因为现在rs2查询到纪录了,即使语句正确,若rs2没有查询到纪录,则rs2仍然是关闭的,那么If (Not rs2.EOF) Then
语句也会出错的。

[解决办法]
有一个题外的问题,
rs2.close
最好放在Wend上面.而不是放在Wend之后
[解决办法]
试试用这一条语句代替你的代码
update set base_fqjbqk.zf_hyzh=lcryk.bm where base_fqjbqk.zf_lcbm = lcryk.bm
------解决方案--------------------


update base_fqjb set base_fqjbqk.zf_hyzh=lcryk.bm where base_fqjbqk.zf_lcbm = lcryk.bm