错误:对象关闭时,不允许操作
简介:我要做的是一个办公自动化系统,窗体中有四个文本框,有一个Command1按钮,用于输出下一个查询结果,我刚开始写的代码比较简单,目的是要测试一下功能,但是当我惦记Command1按钮的时候,却出现了上面的错误,求高手不吝指教
代码如下:
全局:
Dim cn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rst As New ADODB.Recordset
---------------------------------
Private Sub Command1_Click()
rst.MoveNext
Set rst = Nothing
Set cmd = Nothing
Set cn = Nothing
End Sub
-------------------------------
Private Sub Form_Load()
综合处.Caption = "综合处办公系统"
综合处.Move (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 2
Me.Move 0, 0, Screen.Width, Screen.Height  '全屏显示
cn.Open "DSN=sl;uid=sa;pwd=1234;"
Set cmd.ActiveConnection = cn
cmd.CommandText = "Select * From 人事库"
cmd.CommandType = adCmdText
cn.CursorLocation = adUseClient
rst.Open cmd
Text1.Text = rst.Fields("职工号")
Text2.Text = rst.Fields("姓名")
Text3.Text = rst.Fields("性别")
Text4.Text = rst.Fields("年龄")End Sub
----------------
可能解决方法很简单,但是还是希望各位高手能够耐心点,详细写出正确的代码,毕竟我是刚学的啊!

解决方案 »

  1.   

    你把断点设在form load里面然后一步一步Debug下来就好了。应该是你rst打开的问题吧。
    你的text1.text正确显示了么?去掉rst.movenext再试试看
      

  2.   

    rst.MoveNext
    这个有问题,rst记录集没有打开,所以不能移动
      

  3.   

    我的目的就是要没点击一次Command1一次之后,就显示下一条记录,删除了那我这个功能不是都没有了吗,我的目的是怎样修改能够正常运行
      

  4.   

    要达到这个目的,应该在form_load事件中先加载rst
      

  5.   

    我之前在form_load中不是加载了吗?要不你麻烦帮我写一下代码看一下啊
      

  6.   

    Dim cn As New ADODB.Connection
    'Dim cmd As New ADODB.Command
    Dim rst As New ADODB.Recordset
    ---------------------------------
    Private Sub Command1_Click()if rst.recordcount =0 then exit sub
    rst.MoveNext
    if rst.eof then rst.movelast
    Text1.Text = rst.Fields("职工号")
    Text2.Text = rst.Fields("姓名")
    Text3.Text = rst.Fields("性别")
    Text4.Text = rst.Fields("年龄")
    'Set rst = Nothing'第一次点击的时候将rst卸载了'Set cmd = Nothing
    'Set cn = Nothing
    End Sub
    -------------------------------
    Private Sub Form_Load()
    dim sql as string综合处.Caption = "综合处办公系统"
    综合处.Move (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 2
    Me.Move 0, 0, Screen.Width, Screen.Height '全屏显示'Set cmd.ActiveConnection = cn
    'cmd.CommandText = "Select * From 人事库"
    sql= "Select * From 人事库"'cmd.CommandType = adCmdText
    cn.CursorLocation = adUseClient
    cn.Open "DSN=sl;uid=sa;pwd=1234;"rst.Open sqlText1.Text = rst.Fields("职工号")
    Text2.Text = rst.Fields("姓名")
    Text3.Text = rst.Fields("性别")
    Text4.Text = rst.Fields("年龄")End Sub
    ----------------
    sub form_unload
     Set rst = Nothing
     Set cn = Nothingend sub
      

  7.   

    你要显示下一条记录的话在你的command1执行里面并没有显示出来,即便你的movenext成功了你也没有更新相应的textbox可以尝试做如下更改
    1 rst.Open sql ,1,1 
    2 在movenext的时候查查看是不是已经到底了, eof是否true可以解决
    3 movenext之后更新相应的textbox
    Text1.Text = rst.Fields("职工号")
    Text2.Text = rst.Fields("姓名")
    Text3.Text = rst.Fields("性别")
    Text4.Text = rst.Fields("年龄")
      

  8.   

    请问form卸载的时候那个要不要加上 Set comd=Nothing 啊?小弟愚笨,望指教
      

  9.   


    在form_load()中,我按照你这样改的,结果弹出错误啊,问题指向 rst.Open sql,问题说:
    实时错误‘3709’
    连接无法用于此操作。在此上下文中它可能已被关闭或无效
      

  10.   

    cn.Open "DSN=sl;uid=sa;pwd=1234;"rst.Open sql ??此处打开失败?
    在rst.open上设置断点,检查cn.state是否为1 ?如果不为1 ,则说明你的连接串有问题。如果不知道连接串怎么写,在Form中加入一个adodc控件,然后在其connectionstring中点击右边的按键,按照提示进行设置,设置好之后,记得测试一下链接,如果正常,将connectionstring属性中的内容拷贝到代码中,替换
    "DSN=sl;uid=sa;pwd=1234;"然后删除掉adodc控件