请教:vb连接access数据库中遇到的问题
我用的ADO及DATAGRID来连接和显示ACCESS数据库中的表,表里面有一些点的横纵坐标,运行时时候出现:实时错误3709:连接无法用于执行此操作。在此上下文中它可能已经被关闭或无效。
我的部分代码如下:
Dim blnadd As Boolean
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Private Sub Form2_Load()
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db_sell.mdb;Persist Security Info=False"
End Sub
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Key
Case "新建"
blnadd = True '设置标记为"添加数据"
'清空文本框,解除锁定
For i = 1 To Text1.UBound
Text1(i) = ""
Text1(i).Locked = False
Next i
Text1(0).SetFocus '设置点编号Text1(0)获得焦点
Case "保存"
If IsNumeric(Text1(0).Text) = True And Len(Text1(0)) = 3 Then '为数字且为三位数字
If IsNumeric(Text1(2).Text) = True And IsNumeric(Text1(3).Text) = True And Text1(2).Text <= 40.43 And Text1(2).Text >= 34.34 And Text1(3).Text <= 114.33 And Text1(3).Text >= 110.14 Then '为数字且范围在经纬度范围内
If blnadd = True Then '如果标记为True,即添加新记录
rs.Open "select * from points", cn, adOpenKeyset, adLockOptimistic '连接数据表
'向表中添加新记录
With rs
.AddNew
.Fields("点编号") = Text1(0).Text: .Fields("点名称") = Text1(1).Text
.Fields("点纬度") = Text1(2).Text: .Fields("点经度") = Text1(3).Text
.Fields("点备注") = Text1(4).Text
.Update
End With
rs.Close
MsgBox "保存成功!"
End If
If blnadd = False Then '如果标记为False,即修改记录
rs.Open "select * from points where 点编号='" + Text1(0).Text + "'", cn, adOpenKeyset, adLockOptimistic '按点编号查询指定的点,!!!!!!!!!就是在这里出错了!!!!
If rs.RecordCount > 0 Then '如果记录大于零,则修改该记录
With rs
.Fields("点编号") = Text1(0).Text: .Fields("点名称") = Text1(1).Text
.Fields("点纬度") = Text1(2).Text: .Fields("点经度") = Text1(3).Text
.Fields("点备注") = Text1(4).Text
.Update
End With
End If
rs.Close
MsgBox "保存成功!"
End If
Else: MsgBox "经纬度错误或超出范围!"
End If
Else: MsgBox "点编号应为三位数字!"
End If
Case "修改"
blnadd = False '设置标记为False,即修改记录
'解除锁定
For i = 1 To Text1.UBound
Text1(i).Locked = False
Next i
Case "取消"
'取消操作,锁定文本框
For i = 1 To Text1.UBound
Text1(i).Locked = True
Next i
Case "删除"
rs.Open "select * from [points] where 点编号='" + Text1(0).Text + "'", cn, adOpenKeyset, adLockOptimistic '按点编号查询指定的记录
If rs.RecordCount > 0 Then '如果记录大于零
rs.Delete '删除该记录
rs.Update '更新数据表
End If
rs.Close '关闭记录集对象
MsgBox "删除完成!"
Case "刷新"
'刷新数据表
Adodc1.RecordSource = "points"
Adodc1.Refresh
Case "关闭"
Unload Me '关闭窗体
End Select
End Sub
就是加了一个toolbar来新建修改保存删除点的信息,出错的地方我在代码中标出来了,之前设置ADODB和DATAGRID应该也没问题,是用属性和datasourse源添加的不是直接用代码添加的~请教各位哪里出错了,谢谢!
[解决办法]
如果点编号是数值类型的话,这样试试:
rs.Open "select * from points where 点编号=" + Text1(0).Text, cn, adOpenKeyset, adLockOptimistic '按点编号查询指定的点
[解决办法]
断点检查一下cn是否已经与数据库连接
[解决办法]
单步运行,重点看看数据库操作部分有无错误。。。
[解决办法]
你设个断点看看停哪了
[解决办法]
你的cn是定义的模块级的,看看是不是在别的什么地方操作的时候关闭了
[解决办法]
cn应该是在某个地方给关闭了