vb连接access -2147467259 自动化错误

ytbiby 2016-11-29 10:51:36
报错如题,代码如下

selsql = "select * from constants where TREEID = " & selectId & " and SIZE = " & mid
Debug.Print selsql
Set numrst = executesql(selsql, msgtxt)

其中executesql错误位置代码如下:

If InStr("INSERT,DELETE,UPDATE,EXECUTE", UCase$(stokens(0))) Then '
cnn.Execute (sql) '执行语句
msgstring = stokens(0) & "query successful" '返回执行结果
Else
Set rst = New ADODB.Recordset '创建结果数据集
Set rst.ActiveConnection = cnn
rst.CursorLocation = adUseClient
rst.Open Trim$(sql), cnn, adOpenKeyset, adLockOptimistic 'trim$为去掉字符串两边的空格,
Set executesql = rst
msgstring = "查询到" & rst.RecordCount & "条记录"
End If

executesql_exit:
Set rst = Nothing
Set cnn = Nothing
Exit Function

executesql_error:
msgstring = "查询错误:" & Err.Description
MsgBox "错误号:" & Err.Number & Chr(13) & Chr(10) & Err.Description '获取错误号和错误说明。
Resume executesql_exit

rst.Open 那句之后,没有直接走下一句,而是直接跳到error块。
另外做了尝试,如果我将sql语句后边的where查询条件去掉,是可以正常查出来的。
新手小白求大神解答
...全文
502 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ytbiby 2016-12-13
  • 打赏
  • 举报
回复
我自己来结帖,先谢谢楼上两位解答,但是并不是这个原因。最终经过跟度娘单独约会,深入交流之后,发现解决方法是这样的:将所有字段名加上[ ] (中括号)就OK啦,据大神介绍可能是因为数据库中的字段有可能跟VB中关键字冲突。不过不管冲突不冲突,加上去永远不会因为这个原因报错。
ytbiby 2016-11-29
  • 打赏
  • 举报
回复
要沉啊,怎么没人解答啊。。。我Debug打印出来的sql语句,放在access中是可以正常查询结果的,而且确保数据库是连接成功的。64位系统,office是2013版。
Tiger_Zhao 2016-11-29
  • 打赏
  • 举报
回复
1)Debug.Print 的输出内容
2)adOpenKeyset 换成其它参数试试
赵4老师 2016-11-29
  • 打赏
  • 举报
回复
在64位Windows下: 64位exe和dll在目录c:\windows\system32目录下; 32位exe和dll在目录c:\windows\syswow64目录下; 所以要注意: 在win64位系统下注册32位ocx或dll需要将32位ocx或dll拷贝到c:\windows\syswow64\目录下。 且注册要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll 在win64位系统下设置32位程序使用的数据库别名要用c:\windows\syswow64\cliconfg.exe 在win64位系统下设置32位程序使用的系统DSN要用c:\windows\syswow64\odbcad32.exe

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧