首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

请问:vb连接access数据库中遇到的有关问题

2012-01-30 
请教:vb连接access数据库中遇到的问题我用的ADO及DATAGRID来连接和显示ACCESS数据库中的表,表里面有一些点

请教: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应该是在某个地方给关闭了

热点排行