我本来是VB+ACCESS,现在老师要求VB+SQL,所以我改成连接SQL,可是现在出现了问题,SQL连接正常,就是代码不知道哪里错了:有劳大家了!谢谢!
'Dim db As Database
'Dim rst As Recordset
Dim Rec As Integer
Dim StrFlag As String
Dim NumFlag As Boolean
'Dim db1 As Database
'Dim rst1 As Recordset
Dim CN As New ADODB.Connection '定义数据库的连接
Dim Rs As New ADODB.Recordset
Dim Rs1 As New ADODB.Recordset
Private Sub cmdOkCancel_Click(Index As Integer)
Select Case Index
Case 0
If StrFlag = "修改" Then
Rs.EditMode
WriteIn
Rs.Update
Disp
Picture2.Visible = False
Picture1.Visible = True
SetTxt (False)
ElseIf StrFlag = "删除" Then
Rs.Delete
Rs.MovePrevious
If Rs.BOF Then Rs.MoveNext
Disp
Picture2.Visible = False
Picture1.Visible = True
End If
Case 1
Disp
Picture2.Visible = False
Picture1.Visible = True
SetTxt (False)
End Select
End SubPrivate Sub Command1_Click()
Unload Me
End SubPrivate Sub Form_Load()
CN.ConnectionString = "Provider=sqloledb;Data Source=GUOCHEN;Initial Catalog=book;User Id=sa;Password=;"
CN.OpenRs.CursorLocation = adUseClient
Rs.Open "select * from Book", CN, adOpenDynamic, adLockOptimistic
Rs.Filter = "图书编号=5"
'Set db = Workspaces(0).OpenDatabase("Database\Data.mdb", False)
'Set rst = db.OpenRecordset("Book", dbOpenTable)
'rst.Index = "图书编号"
Rs1.CursorLocation = adUseClient
Rs1.Open "select * from Type", CN, adOpenDynamic, adLockOptimistic
'Set db1 = Workspaces(0).OpenDatabase("Database\Data.mdb", False)
'Set rst1 = db1.OpenRecordset("Type", dbOpenTable)Rec = Rs.RecordCount
If Rec = 0 Then
Toolbar1.Enabled = False
SetTxt (False)
End If
SetTxt (False)
Rs.MoveFirst'到这句错误,说EOF或BOF有个为空,到底哪里错了?
Disp
TypeAdd
Picture1.Visible = True
Picture2.Visible = False
NumFlag = False
End Sub
Private Sub Disp()
txtBookNum = Rs.Fields("图书编号") & vbNullString
txtBookName = Rs.Fields("书名") & vbNullString
txtCost = Rs.Fields("价格") & Empty
txtBookChu = Rs.Fields("出版社") & vbNullString
Combo1.Text = Rs.Fields("类别") & vbNullString
End Sub
Private Sub Kong()
txtBookNum = ""
txtBookName = ""
txtbookcost = ""
txtBookChu = ""
Combo1.Text = ""
End Sub
Private Sub SetTxt(Bool As Boolean)
txtBookNum.Enabled = Bool
txtCost.Enabled = Bool
txtBookName.Enabled = Bool
txtBookChu.Enabled = Bool
Combo1.Enabled = Bool
End SubPrivate Sub Form_Unload(Cancel As Integer)
'rst.Close
'rst1.Close
'db1.Close
'db.Close
Rs.Close
Rs1.Close
CN.Close
End SubPrivate Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Index
Case 1
Rs.MoveFirst
Disp
Case 2
Rs.MovePrevious
If Rs.BOF Then
Rs.MoveNext
Exit Sub
End If
Disp
Case 3
Rs.MoveNext
If Rs.EOF Then
Rs.MovePrevious
Exit Sub
End If
Disp
Case 4
Rs.MoveLast
Disp
Case 10
StrFlag = "修改"
SetTxt (True)
labFlag.Caption = "您确实要修改当前记录吗?"
Picture1.Visible = False
Picture2.Visible = True
Case 11
StrFlag = "删除"
labFlag.Caption = "您确实要删除当前记录吗?"
Picture1.Visible = False
Picture2.Visible = True
Case 12
SearchNum.Show (1)
If SearchFlag = True Then
Rs.Find "图书编号=" & Trim(BookBianHao)
If Not Rs.EOF Then
MsgBox "没有此图书编号!", 0 + 48, "查找失败"
Exit Sub
End If
Disp
SearchFlag = False
End If
End Select
End Sub
Private Sub WriteIn()
Rs.Fields("图书编号") = txtBookNum
Rs.Fields("书名") = txtBookName
Rs.Fields("价格") = Val(txtCost)
Rs.Fields("出版社") = txtBookChu
Rs.Fields("类别") = Combo1.Text
End Sub
Private Sub TypeAdd()
Rs1.MoveLast
Rs1.MoveFirst
For i = 1 To Rs1.RecordCount
Combo1.AddItem Rs1.Fields("类别")
Rs1.MoveNext
If Rs1.EOF Then Exit Sub
Next
End SubPrivate Sub txtBookNum_Change()End Sub
'Dim db As Database
'Dim rst As Recordset
Dim Rec As Integer
Dim StrFlag As String
Dim NumFlag As Boolean
'Dim db1 As Database
'Dim rst1 As Recordset
Dim CN As New ADODB.Connection '定义数据库的连接
Dim Rs As New ADODB.Recordset
Dim Rs1 As New ADODB.Recordset
Private Sub cmdOkCancel_Click(Index As Integer)
Select Case Index
Case 0
If StrFlag = "修改" Then
Rs.EditMode
WriteIn
Rs.Update
Disp
Picture2.Visible = False
Picture1.Visible = True
SetTxt (False)
ElseIf StrFlag = "删除" Then
Rs.Delete
Rs.MovePrevious
If Rs.BOF Then Rs.MoveNext
Disp
Picture2.Visible = False
Picture1.Visible = True
End If
Case 1
Disp
Picture2.Visible = False
Picture1.Visible = True
SetTxt (False)
End Select
End SubPrivate Sub Command1_Click()
Unload Me
End SubPrivate Sub Form_Load()
CN.ConnectionString = "Provider=sqloledb;Data Source=GUOCHEN;Initial Catalog=book;User Id=sa;Password=;"
CN.OpenRs.CursorLocation = adUseClient
Rs.Open "select * from Book", CN, adOpenDynamic, adLockOptimistic
Rs.Filter = "图书编号=5"
'Set db = Workspaces(0).OpenDatabase("Database\Data.mdb", False)
'Set rst = db.OpenRecordset("Book", dbOpenTable)
'rst.Index = "图书编号"
Rs1.CursorLocation = adUseClient
Rs1.Open "select * from Type", CN, adOpenDynamic, adLockOptimistic
'Set db1 = Workspaces(0).OpenDatabase("Database\Data.mdb", False)
'Set rst1 = db1.OpenRecordset("Type", dbOpenTable)Rec = Rs.RecordCount
If Rec = 0 Then
Toolbar1.Enabled = False
SetTxt (False)
End If
SetTxt (False)
Rs.MoveFirst'到这句错误,说EOF或BOF有个为空,到底哪里错了?
Disp
TypeAdd
Picture1.Visible = True
Picture2.Visible = False
NumFlag = False
End Sub
Private Sub Disp()
txtBookNum = Rs.Fields("图书编号") & vbNullString
txtBookName = Rs.Fields("书名") & vbNullString
txtCost = Rs.Fields("价格") & Empty
txtBookChu = Rs.Fields("出版社") & vbNullString
Combo1.Text = Rs.Fields("类别") & vbNullString
End Sub
Private Sub Kong()
txtBookNum = ""
txtBookName = ""
txtbookcost = ""
txtBookChu = ""
Combo1.Text = ""
End Sub
Private Sub SetTxt(Bool As Boolean)
txtBookNum.Enabled = Bool
txtCost.Enabled = Bool
txtBookName.Enabled = Bool
txtBookChu.Enabled = Bool
Combo1.Enabled = Bool
End SubPrivate Sub Form_Unload(Cancel As Integer)
'rst.Close
'rst1.Close
'db1.Close
'db.Close
Rs.Close
Rs1.Close
CN.Close
End SubPrivate Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Index
Case 1
Rs.MoveFirst
Disp
Case 2
Rs.MovePrevious
If Rs.BOF Then
Rs.MoveNext
Exit Sub
End If
Disp
Case 3
Rs.MoveNext
If Rs.EOF Then
Rs.MovePrevious
Exit Sub
End If
Disp
Case 4
Rs.MoveLast
Disp
Case 10
StrFlag = "修改"
SetTxt (True)
labFlag.Caption = "您确实要修改当前记录吗?"
Picture1.Visible = False
Picture2.Visible = True
Case 11
StrFlag = "删除"
labFlag.Caption = "您确实要删除当前记录吗?"
Picture1.Visible = False
Picture2.Visible = True
Case 12
SearchNum.Show (1)
If SearchFlag = True Then
Rs.Find "图书编号=" & Trim(BookBianHao)
If Not Rs.EOF Then
MsgBox "没有此图书编号!", 0 + 48, "查找失败"
Exit Sub
End If
Disp
SearchFlag = False
End If
End Select
End Sub
Private Sub WriteIn()
Rs.Fields("图书编号") = txtBookNum
Rs.Fields("书名") = txtBookName
Rs.Fields("价格") = Val(txtCost)
Rs.Fields("出版社") = txtBookChu
Rs.Fields("类别") = Combo1.Text
End Sub
Private Sub TypeAdd()
Rs1.MoveLast
Rs1.MoveFirst
For i = 1 To Rs1.RecordCount
Combo1.AddItem Rs1.Fields("类别")
Rs1.MoveNext
If Rs1.EOF Then Exit Sub
Next
End SubPrivate Sub txtBookNum_Change()End Sub
解决方案 »
- 从网上找了段代码, 其中的 _NewEnum 是什么 意思 ?
- 更改datagrid控件的表头问题!
- 对象变量或with块变量未设置???在线等候,谢谢!
- 使用Vsprinter生成的报表数据为什么不能居中?
- 客户端软件调用服务端软件总是提示“运行错误'70':拒绝的权限”,求助!!!
- 如何调用模块中定义的带控件数组的函数
- 求教关于MSHFlexgrid控件的几个问题。谢谢指点
- 请问我做了一个网络数据库,在两台机器上测试了.一台作为服务器,另一台作为客户机.是不是说明我的程序能在整个局域网中运行了?
- 为什么????怎么回事。。
- 在VB的ADOC控件中怎么加过滤条件,让他的数据源是多张表里的,但是有限定的
- 用DataGrid时,提示"The current row is not available",请帮忙解决,谢谢!
- 请如何使用WININET(api)或Internet Transfer(控件)
如果rec=0,就不应该执行rs.movefirst
if cbool(rs.state) then '判斷紀錄集是否打開
if not rs.eof then '如果紀錄集紀錄為空
rs.filter="" '將篩選過濾條件去掉(也可以加在下一個篩選條件前)
msgbox "不存在紀錄!",vbinfomation,me.caption
exit sub
else
rs.movefirst
end if
endif
REC=0
然后跳到:
Private Sub SetTxt(Bool As Boolean)
txtBookNum.Enabled = Bool
txtCost.Enabled = Bool
txtBookName.Enabled = Bool
txtBookChu.Enabled = Bool
Combo1.Enabled = Bool
End Sub
原:
SetTxt (False)
Rs.MoveFirst'到这句错误,说EOF或BOF有个为空,到底哪里错了?
Disp改后:
SetTxt(False)
if not (Rs.eof or Rs.bof) then '确定当前记录集中有记录
rs.movefirst
else
'在里做你自己的特殊处理.
end if
Disp
谢谢你告诉我原理,还告诉我修改,现在这句不抱错,跳到DISP这里抱错,同样是“BOF或EOF有个为真,或当前记录以被删除”请问如何解决?谢谢!
Private Sub Disp()
txtBookNum = Rs.Fields("图书编号") & vbNullString'错误指像这里
txtBookName = Rs.Fields("书名") & vbNullString
txtCost = Rs.Fields("价格") & Empty
txtBookChu = Rs.Fields("出版社") & vbNullString
Combo1.Text = Rs.Fields("类别") & vbNullString
End Sub
SetTxt (False)
If Not (Rs.EOF Or Rs.BOF) Then '确定当前记录集中有记录
Rs.MoveFirst
Else
MsgBox "hello" '在里做你自己的特殊处理.
End If
Disp
他就直接跳出MSGBOX,说明记录集没有记录,怎么可能呢?
还有在Disp,TypeAdd这些直接访问RS对象的地方,最好加上一些判断或错误处理.
改成AND也一样,可是我数据库中有数据呀
select * from Book
ID 图书编号 书名 价格 类别 出版社 借出日期 是否借出
----------- ---------- ------------------------------ ------------------------ ---------- ------------------------------ --------------------------- ----
1 1000 c++语言程序设计 30.0 电子计算机 清华大学出版社 NULL 0
2 1001 vb6程序设计 32.0 电子计算机 机械工业出版社 NULL 0
3 1002 大学英语四级词汇 18.0 外语 清华大学出版社 NULL 0
4 1004 足球理论 14.0 体育 北京体育大学出版社 NULL 0
5 1005 哈哈后 20.0 电子计算机 哈哈 NULL NULL(5 row(s) affected)
这个是ACCESS里的写发,改成SQL因该也是这样吧
请问我记录集为什么没有记录?
Rs.Filter = "图书编号=5",当然没有记录,有图书编号=5的吗?好像有1005的
'''''''''msgbox "记录集为空"
else
Disp
TypeAdd
Picture1.Visible = True
Picture2.Visible = False
NumFlag = False
end if
End Sub
if not (Rs.eof or Rs.bof) then '确定当前记录集中有记录
rs.movefirst
else
'在里做你自己的特殊处理.
end if
Disp
只要执行了ELSE里面的东东,说明已经是没有数据集了,怎么还要执行DISP呢?只要是没有数据集,就不要再对RS进行什么查询/删除/更改的操作。RS.EOF或者RS.BOF的值为真,说明所查询出来的数据集是空的,指针已经移到了末尾或者是首位置!