添加图书时出现错误:对象打开时,不允许操作
代码如下:
Dim Conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim cmd As New ADODB.Command
Public connstring As StringPrivate Sub cmdadd_Click()
rs.Open strsql, Conn, 3, 3
rs.Open "select * from 图书 ", Cn, adOpenKeyset, adLockOptimistic, adCmdText
If txt书号.Text = "" Or txt书名.Text = "" Or Txt作者.Text = "" Or _
   txt出版社.Text = "" Or txt单价.Text = "" Or txt借出否.Text = "" Then
   MsgBox "图书的信息填写不完整,请重新填写!", vbOKOnly + _
           vbExclamation, "警告"
Else
      rs.AddNew
        rst!图书_bookid = txt书号.Text
        rst!图书_书名 = txt书名.Text
        rst!图书_作者 = Txt作者.Text
        rst!图书_出版社 = txt出版社.Text
        rst!图书_定价 = txt单价.Text
        rst!图书_借出否 = txt借出否.Text
      rs.Update
     MsgBox "添加图书成功!", vbOKOnly
     txt书号.Text = "": txt书名.Text = "": Txt作者.Text = "": _
     txt出版社.Text = "": txt单价.Text = "": txt借出否.Text = ""
   End If
rs.Close
End Sub
Private Sub cmdsave_Click()
Dim strsql$, str书号$, str书名$, str作者$, str出版社$, str类别$, str借出否$, str单价$
Dim bookmk
str书号 = Replace(Trim(txt书号.Text), "'", "")
str书名 = Replace(Trim(txt书名.Text), "'", "")
str作者 = Replace(Trim(Txt作者.Text), "'", "")
str出版社 = Replace(Trim(txt出版社.Text), "'", "")
str类别 = Replace(Trim(Txt类别.Text), "'", "")
str借出否 = Replace(Trim(txt借出否.Text), "'", "")
str单价 = Replace(Trim(txt单价.Text), "'", "")
If str书号 = "" Then
   MsgBox "书号不能为空", , "输入错误"
   txt书号.SetFocus
   Exit Sub
ElseIf str书名 = "" Then
   MsgBox "书名不能为空", , "输入错误"
   txt书名.SetFocus
   Exit SubEnd IfIf str书号 <> rs("bookid") Then
   Set rsvalid = New ADODB.Recordset
   strsql = "select * from 图书 where bookid='" & str书号 & "'"
   rsvalid.Open strsql, Conn, 1, 1
  ' If Not rsvalid.EOF Then
     ' MsgBox "该图书已存在,重新输入"
      'txtreaderid.SetFocus
     ' rsvalid.Close
      'Set rsvalid = Nothing
     ' Exit Sub
  ' End If
   rsvalid.Close
   Set rsvalid = Nothing
'   Set cmdupdate = New ADODB.Command
'   Set cmdupdate.ActiveConnection = Conn
'   strsql = "update sc set sno='" & strstudentID
'   strsql = strsql & "' where sno='" & rs("sno") & "';"
'   cmdupdate.CommandText = strsql
'   cmdupdate.Execute
'   Set cmdupdate = Nothing
End If
   rs("bookid").Value = str书号
   rs("书名").Value = str书名
   rs("作者").Value = str作者
   rs("出版社").Value = str出版社
   rs("类别").Value = str类别
   rs("定价").Value = str单价
   rs("借出否").Value = str借出否
   rs.UpdateBatch
   'rs.Book = bookmk
   txt书号.Text = ""
   txt书名.Text = ""
   txt出版社.Text = ""
   Txt类别.Text = ""
   Txt作者.Text = ""
   txt借出否.Text = ""
   txt单价.Text = ""
End Sub
Private Sub Form_Load()
Set Conn = New ADODB.Connection
Set rs = New ADODB.Recordset
connstring = "driver={SQL Server};SERVER=.;DATABASE=图书管理系统;uid=;pwd="
Conn.Open connstring
strsql = "select bookid,书名,作者,出版社,类别,定价,借出否 from 图书"
rs.Open strsql, Conn, 3, 3
Set dgbook.DataSource = rs
With dgbook
     .Columns(0).Width = 1500
     .Columns(0).Caption = "书号 "
     .Columns(1).Width = 1500
     .Columns(1).Caption = "书名"
     .Columns(2).Width = 1500
     .Columns(2).Caption = "作者"
     .Columns(3).Width = 800
     .Columns(3).Caption = "出版社"
     .Columns(4).Width = 1500
     .Columns(4).Caption = "类别"
     .Columns(4).Width = 1500
     .Columns(4).Caption = "单价"
     .Columns(4).Width = 1500
     .Columns(4).Caption = "借出否"
     
End With
cmdsave.Enabled = False
'fullclass
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set dgbook.DataSource = Nothing
rs.Close
Conn.Close
Set rs = Nothing
Set Conn = Nothing
End Sub

解决方案 »

  1.   

    rs.Open strsql, Conn, 3, 3
    rs.Open "select * from 图书 ", Cn, adOpenKeyset, adLockOptimistic, adCmdText 你同一个rs连续Open了两次,当然报错。要么只Open一次,要么要先Close才能再Open。你前面Open完啥都没干,那Open它干啥?
      

  2.   

    if rs.state<>adstateclosed then rs.close
    rs.Open "select * from 图书 ", Cn, adOpenKeyset, adLockOptimistic, adCmdText 
      

  3.   

    if rs.state =1 then rs.close
    rs.Open "select * from 图书 ", Cn, adOpenKeyset, adLockOptimistic, adCmdText