添加的时候老是出现“书号不能为空”的提示,不管书号空不空;代码如下:
Dim Conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim cmd As New ADODB.Command
Public connstring As StringPrivate Sub cmdadd_Click()
Dim rsvalid As ADODB.Recordset
'Dim strsql$, strreaderID$, strName$, strsex$, strad$, strtel$
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 strbookID = "" Then
   MsgBox "书号不能为空", , "输入错误"
   txt书号.SetFocus
   Exit Sub
ElseIf str书名 = "" Then
   MsgBox "书名不能为空", , "输入错误"
   txt书名.SetFocus
   Exit Sub
End If
Set rsvalid = New ADODB.Recordset
strsql = "select * from 图书 where bookid='" & strbookID & "';"
rsvalid.Open strsql, Conn, 1, 1
If Not rsvalid.EOF Then
   MsgBox "该书号已存在,重新输入"
   txt书号.SetFocus
   rsvalid.Close
   Set rsvalid = Nothing
   Exit Sub
End If
   rsvalid.Close
   Set rsvalid = Nothing
   
   bookmk = rs.Book
   rs.AddNew        '使用记录集对象的AddNew方法添加记录
   txt书号.Text = rs("bookid").Value
   txt书名.Text = rs("书名").Value
   Txt类别.Text = rs("类别").Value
   Txt作者.Text = rs("作者").Value
   txt出版社.Text = rs("出版社").Value
   txt单价.Text = rs("定价").Value
   txt借出否.Text = rs("借出否").Value
'   cmd.ActiveConnection = Conn
'   cmd.CommandText = "insert into s(sno,sname,sex,class,birthday,telephone,address,email) values( '" + strstudentID + "','" + strstudentName + "','" + strsex + "','" + strclassid + "','" + strbirthday + "','" + strtelphone + "','" + strnative + "','" + stremail + "')"
'   Set rs = cmd.Execute
   rs.Close
   strsql = "select * from 图书"
   rs.Open strsql, Conn, 3, 3
   Set dgbook.DataSource = rs
   txt书号.Text = ""
   txt书名.Text = ""
   txt出版社.Text = ""
   Txt类别.Text = ""
   Txt作者.Text = ""
   txt借出否.Text = ""
   txt单价.Text = ""
End SubPrivate Sub cmddelete_Click()
Dim rsvalid As ADODB.Recordset
Dim strsql$
If rs.BOF Or rs.EOF Then Exit Sub
Set rsvalid = New ADODB.Recordset
   strsql = "select * from 借阅 where bookid='" & rs("bookid").Value & "'"
   rsvalid.Open strsql, Conn, 1, 1
If Not rsvalid.EOF Then
   MsgBox "借阅表中又该图书的借阅,不能删除。如非删除,先删除借阅表中记录"
   rsvalid.Close
   Set rsvalid = Nothing
   Exit Sub
End If
   rsvalid.Close
   Set rsvalid = Nothing
   rs.Delete
   rs.Update
End SubPrivate Sub cmdquit_Click()
frmmain.Show
Unload frmbookManage
frmmain.Enabled = True
End SubPrivate Sub cmdfirst_Click()
   If rs.RecordCount > 0 Then rs.MoveFirst
   txt书号.Text = rs("bookid").Value
   txt书名.Text = rs("书名").Value
   Txt类别.Text = rs("类别").Value
   Txt作者.Text = rs("作者").Value
   txt出版社.Text = rs("出版社").Value
   txt单价.Text = rs("定价").Value
   txt借出否.Text = rs("借出否").ValueEnd SubPrivate Sub cmdlast_Click()
   If rs.RecordCount > 0 Then rs.MoveLast
   txt书号.Text = rs("bookid").Value
   txt书名.Text = rs("书名").Value
   Txt类别.Text = rs("类别").Value
   Txt作者.Text = rs("作者").Value
   txt出版社.Text = rs("出版社").Value
   txt单价.Text = rs("定价").Value
   txt借出否.Text = rs("借出否").Value
End SubPrivate Sub cmdmodify_Click()
   If Not rs.EOF And Not rs.BOF Then
   txt书号.Text = rs("bookid").Value
   txt书名.Text = rs("书名").Value
   Txt类别.Text = rs("类别").Value
   Txt作者.Text = rs("作者").Value
   txt出版社.Text = rs("出版社").Value
   txt单价.Text = rs("定价").Value
   txt借出否.Text = rs("借出否").Value   cmdsave.Enabled = True
End If
End SubPrivate Sub cmdnext_Click()
If Not rs.EOF Then rs.MoveNext
  If rs.EOF And rs.RecordCount > 0 Then
     rs.MoveLast
  End If
   txt书号.Text = rs("bookid").Value
   txt书名.Text = rs("书名").Value
   Txt类别.Text = rs("类别").Value
   Txt作者.Text = rs("作者").Value
   txt出版社.Text = rs("出版社").Value
   txt单价.Text = rs("定价").Value
   txt借出否.Text = rs("借出否").Value
End SubPrivate Sub cmdprevious_Click()
    If Not rs.BOF Then rs.MovePrevious
    If rs.BOF And rs.RecordCount > 0 Then
     rs.MoveFirst
   txt书号.Text = rs("bookid").Value
   txt书名.Text = rs("书名").Value
   Txt类别.Text = rs("类别").Value
   Txt作者.Text = rs("作者").Value
   txt出版社.Text = rs("出版社").Value
   txt单价.Text = rs("定价").Value
   txt借出否.Text = rs("借出否").Value
  End If
End SubPrivate Sub cmdsave_Click()
Dim strsql$, strbookID$, str书名$, str作者$, str出版社$, str类别$, str借出否$, str单价$
Dim bookmk
strbookID = 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 strbookID = "" Then
   MsgBox "书号不能为空", , "输入错误"
   txt书号.SetFocus
   Exit Sub
ElseIf str书名 = "" Then
   MsgBox "书名不能为空", , "输入错误"
   txt书名.SetFocus
   Exit SubEnd IfIf strbookID <> rs("bookid") Then
   Set rsvalid = New ADODB.Recordset
   strsql = "select * from 图书 where bookid='" & strbookID & "'"
   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.   

    strbookID 从哪里来的值?
    不赋值默认就是""
      

  2.   

    改了以后,他又出现了这个错误:实时错误3219.在此环境中不允许操作。错误行为:   rs.Close
    改后代码如下:Dim Conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim cmd As New ADODB.Command
    Public connstring As StringPrivate Sub cmdadd_Click()
    Dim rsvalid As ADODB.Recordset
    'Dim strsql$, strreaderID$, strName$, strsex$, strad$, strtel$
    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 Sub
    End If
    Set rsvalid = New ADODB.Recordset
    strsql = "select * from 图书 where bookid='" & strbookID & "';"
    rsvalid.Open strsql, Conn, 1, 1
    If Not rsvalid.EOF Then
       MsgBox "该书号已存在,重新输入"
       txt书号.SetFocus
       rsvalid.Close
       Set rsvalid = Nothing
       Exit Sub
    End If
       rsvalid.Close
       Set rsvalid = Nothing
       
       bookmk = rs.Book
       rs.AddNew        '使用记录集对象的AddNew方法添加记录
       txt书号.Text = rs("bookid").Value
       txt书名.Text = rs("书名").Value
       Txt类别.Text = rs("类别").Value
       Txt作者.Text = rs("作者").Value
       txt出版社.Text = rs("出版社").Value
       txt单价.Text = rs("定价").Value
       txt借出否.Text = rs("借出否").Value
    '   cmd.ActiveConnection = Conn
    '   cmd.CommandText = "insert into s(sno,sname,sex,class,birthday,telephone,address,email) values( '" + strstudentID + "','" + strstudentName + "','" + strsex + "','" + strclassid + "','" + strbirthday + "','" + strtelphone + "','" + strnative + "','" + stremail + "')"
    '   Set rs = cmd.Execute
       rs.Close
       strsql = "select * from 图书"
       rs.Open strsql, Conn, 3, 3
       Set dgbook.DataSource = rs
       txt书号.Text = ""
       txt书名.Text = ""
       txt出版社.Text = ""
       Txt类别.Text = ""
       Txt作者.Text = ""
       txt借出否.Text = ""
       txt单价.Text = ""
    End SubPrivate Sub cmddelete_Click()
    Dim rsvalid As ADODB.Recordset
    Dim strsql$
    If rs.BOF Or rs.EOF Then Exit Sub
    Set rsvalid = New ADODB.Recordset
       strsql = "select * from 借阅 where bookid='" & rs("bookid").Value & "'"
       rsvalid.Open strsql, Conn, 1, 1
    If Not rsvalid.EOF Then
       MsgBox "借阅表中又该图书的借阅,不能删除。如非删除,先删除借阅表中记录"
       rsvalid.Close
       Set rsvalid = Nothing
       Exit Sub
    End If
       rsvalid.Close
       Set rsvalid = Nothing
       rs.Delete
       rs.Update
    End SubPrivate Sub cmdquit_Click()
    frmmain.Show
    Unload frmbookManage
    frmmain.Enabled = True
    End SubPrivate Sub cmdfirst_Click()
       If rs.RecordCount > 0 Then rs.MoveFirst
       txt书号.Text = rs("bookid").Value
       txt书名.Text = rs("书名").Value
       Txt类别.Text = rs("类别").Value
       Txt作者.Text = rs("作者").Value
       txt出版社.Text = rs("出版社").Value
       txt单价.Text = rs("定价").Value
       txt借出否.Text = rs("借出否").ValueEnd SubPrivate Sub cmdlast_Click()
       If rs.RecordCount > 0 Then rs.MoveLast
       txt书号.Text = rs("bookid").Value
       txt书名.Text = rs("书名").Value
       Txt类别.Text = rs("类别").Value
       Txt作者.Text = rs("作者").Value
       txt出版社.Text = rs("出版社").Value
       txt单价.Text = rs("定价").Value
       txt借出否.Text = rs("借出否").Value
    End SubPrivate Sub cmdmodify_Click()
       If Not rs.EOF And Not rs.BOF Then
       txt书号.Text = rs("bookid").Value
       txt书名.Text = rs("书名").Value
       Txt类别.Text = rs("类别").Value
       Txt作者.Text = rs("作者").Value
       txt出版社.Text = rs("出版社").Value
       txt单价.Text = rs("定价").Value
       txt借出否.Text = rs("借出否").Value   cmdsave.Enabled = True
    End If
    End SubPrivate Sub cmdnext_Click()
    If Not rs.EOF Then rs.MoveNext
      If rs.EOF And rs.RecordCount > 0 Then
         rs.MoveLast
      End If
       txt书号.Text = rs("bookid").Value
       txt书名.Text = rs("书名").Value
       Txt类别.Text = rs("类别").Value
       Txt作者.Text = rs("作者").Value
       txt出版社.Text = rs("出版社").Value
       txt单价.Text = rs("定价").Value
       txt借出否.Text = rs("借出否").Value
    End SubPrivate Sub cmdprevious_Click()
        If Not rs.BOF Then rs.MovePrevious
        If rs.BOF And rs.RecordCount > 0 Then
         rs.MoveFirst
       txt书号.Text = rs("bookid").Value
       txt书名.Text = rs("书名").Value
       Txt类别.Text = rs("类别").Value
       Txt作者.Text = rs("作者").Value
       txt出版社.Text = rs("出版社").Value
       txt单价.Text = rs("定价").Value
       txt借出否.Text = rs("借出否").Value
      End If
    End SubPrivate Sub cmdsave_Click()
    Dim strsql$, strbookID$, str书名$, str作者$, str出版社$, str类别$, str借出否$, str单价$
    Dim bookmk
    strbookID = 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 strbookID = "" Then
       MsgBox "书号不能为空", , "输入错误"
       txt书号.SetFocus
       Exit Sub
    ElseIf str书名 = "" Then
       MsgBox "书名不能为空", , "输入错误"
       txt书名.SetFocus
       Exit SubEnd IfIf strbookID <> rs("bookid") Then
       Set rsvalid = New ADODB.Recordset
       strsql = "select * from 图书 where bookid='" & strbookID & "'"
       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