注册 登录
编程论坛 VB6论坛

技术请教:下面的代码运行时报错?

wangyiaihu 发布于 2020-05-19 07:01, 4169 次点击
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

程序代码:
Call KKK(conn)
RS.Open "delete * from 数据 Where 确认状态= 'NG'", conn, 3, 2

Image8.Visible = True

Image8.Picture = Form2.Image62.Picture

'  释放相应的资源
RS.Close
    Set RS = Nothing
    conn.Close
    Set conn = Nothing

Exit Sub
19 回复
#2
wangyiaihu2020-05-19 07:02
寻找高手指点迷津。
#3
风吹过b2020-05-19 08:23
RS.Open "delete * from 数据 Where 确认状态= 'NG'", conn, 3, 2
没有 RS 对象返回,所以得到了 RS 是关闭的。
其实,除下 select 外,其他的SQL命令都不建议使用 rs.open 来执行,而是使用

conn.execute(SQL命令) 来执行,这种方法直接不要求返回 RS 对象。

按你大型数据库工程,建议封装四个功能函数
1、打开数据库连接。
2、执行SQL,并返回 RS
3、执行SQL,不返回 RS
4、关闭数据库连接,并且清理对象。

一般情况下,在整个程序运行过程是, conn 是不关闭的,保留 conn 不需要占用太多资源,但每次都重新连接 conn ,那倒开销比较大。
RS,一般用完就关闭。
#4
wangyiaihu2020-05-19 17:46
回复 3楼 风吹过b
那我当前用这RS这种,出现的问题应该怎么处理?
是来一个
if rs.eof = true then

end if

这样吗?
#5
foreach2020-05-20 15:17
以下是引用wangyiaihu在2020-5-19 17:46:50的发言:

那我当前用这RS这种,出现的问题应该怎么处理?
是来一个
if rs.eof = true then

end if

这样吗?


应该是
Set abc=Rs.open
....
abc.close
#6
wangyiaihu2020-05-20 16:20
回复 5楼 foreach
按照你的试了,不管用,
#7
风吹过b2020-05-20 17:32
State 属性 (ADO)


对所有可应用对象,说明其对象状态是打开或是关闭。

对执行异步方法的 Recordset 对象,说明当前的对象状态是连接、执行或是获取。

返回值

返回下列常量之一的长整型值。

常量 说明

adStateClosed 默认,指示对象是关闭的。
adStateOpen 指示对象是打开的。
adStateConnecting 指示 Recordset 对象正在连接。
adStateExecuting 指示 Recordset 对象正在执行命令。
adStateFetching 指示 Recordset 对象的行正在被读取。


说明
可以随时使用 State 属性确定指定对象的当前状态。该属性是只读的。
Recordset 对象的 State 属性可以是组合值。例如,如果正在执行语句,该属性将是 adStateOpen 和 adStateExecuting 的组合值

---------------------
if rs.eof = adStateOpen then

end if
#8
wangyiaihu2020-05-20 17:37
回复 7楼 风吹过b
试了,也不管用,
程序代码:
Private Sub Image4_Click()

Call KKK(conn)
RS.Open "delete * from 数据 Where 确认状态= 'NG'", conn, 3, 2

If RS.EOF = adStateOpen Then



Image8.Visible = True

Image8.Picture = Form2.Image62.Picture

Else
Image8.Picture = Form2.Image63.Picture


'  释放相应的资源
RS.Close
conn.Close
    Set RS = Nothing
   
    Set conn = Nothing

Exit Sub

End If

End Sub
#9
风吹过b2020-05-20 18:37
不好意思,复制你代码时忘了修改了,
应该是
if rs.state <> adStateClosed then

数据表不处于关闭状态,则...
#10
wangyiaihu2020-05-21 07:18
回复 9楼 风吹过b
依旧不管用,还是一样的报错,
#11
wangyiaihu2020-05-21 07:19
回复 9楼 风吹过b
程序代码:
Private Sub Image4_Click()

Call KKK(conn)
RS.Open "delete * from 数据 Where 确认状态= 'NG'", conn, 3, 2

If RS.State <> adStateClosed Then


Image8.Visible = True

Image8.Picture = Form2.Image62.Picture

Else
Image8.Picture = Form2.Image63.Picture


'  释放相应的资源
RS.Close
conn.Close
    Set RS = Nothing
   
    Set conn = Nothing

Exit Sub

End If

End Sub
#12
风吹过b2020-05-21 08:09
那你只能 在这个地方中断一下,然后在本地窗口里,检查 rs 的属性。
看看有哪个属性能标识RS 的状态的。
#13
风吹过b2020-05-21 08:12
用这个判断呢?

if  rs is Nothing then     
'如果对象没有引用任何对象


---------------
我直接定义一个RS,然后不做任何操作时,在本地窗口 中 rs 的属性直接为 Nothing

#14
ZHRXJR2020-05-21 13:38

程序代码:
Private Sub Image4_Click()

Call KKK(conn)
RS.Open "delete * from 数据 Where 确认状态= 'NG'", conn, 3, 2
    If RS.State <> adStateClosed Then
        Image8.Visible = True
        Image8.Picture = Form2.Image62.Picture
    Else
        Image8.Picture = Form2.Image63.Picture
        ' 这里取消 Exit Sub 语句
    End If
    '将 关闭对象语句移动到判断语句之外
    RS.Close
    Set RS = Nothing
    conn.Close
    Set conn = Nothing
End Sub
#15
wangyiaihu2020-05-21 17:37
回复 14楼 ZHRXJR
只有本站会员才能查看附件,请 登录



报错依旧。。。。。
#16
ZHRXJR2020-05-23 13:27
检查其他过程,可能没有关闭 RS 对象
#17
wangyiaihu2020-05-23 13:30
回复 16楼 ZHRXJR
好的,我再查查。
#18
pt4971592020-06-18 00:41
Call KKK(conn)
Set rs = New ADODB.Recordset
RS.Open "delete * from 数据 Where 确认状态= 'NG'", conn, 3, 2

Image8.Visible = True

Image8.Picture = Form2.Image62.Picture
If rs.State = 1 Then rs.Close
#19
cwa99582020-06-18 10:22
有这个提示了,说明rs是在关闭状态,不需要再关闭了。
感觉 delete * from 数据 Where 确认状态= 'NG'"就是直接删除数据。

确认对应的记录已经被删除,那么这个关闭语句就不要了。
#20
wangyiaihu2020-06-19 18:08
回复 19楼 cwa9958


这是最让我能够理解满意的答案,谢谢
1