VB access 实时错误 '-2147467259 (80004005)'

kaixuan001 2009-12-14 10:32:56
Adodc1.ConnectionString = login.conn

sql1 = "select format(a.logindate,'yyyy\/mm') as ny,a.logindate, MAX(a.start) as start,MAX(a.end) as end from (" & _
"select YD_Login_ID ,format(YD_Login_DT,'yyyy\/mm\/dd') as logindate,MIN(format(YD_Login_DT,'hh:mm:ss')) as start,null as end from [YD_LoginLog] where YD_Login_Type ='IN' GROUP BY YD_Login_ID ,format(YD_Login_DT,'yyyy\/mm\/dd')" & _
" union select YD_Login_ID,format(YD_Login_DT,'yyyy\/mm\/dd') as logindate,null as start,MAX(format(YD_Login_DT,'hh:mm:ss')) as end from [YD_LoginLog] where YD_Login_Type ='OUT' GROUP BY YD_Login_ID,format(YD_Login_DT,'yyyy\/mm\/dd') ) a" & _
" where a.YD_Login_ID ='" & login.gobal_userid & "' " & _
" GROUP BY format(a.logindate,'yyyy\/mm'),a.logindate ORDER BY a.logindate"
Adodc1.CommandType = adCmdText
Adodc1.RecordSource = sql1
Adodc1.Refresh

其中sql1 在MS ACCESS的查询中执行正确,在VB ADODC1.refresh 时提示未知错误,实时错误 '-2147467259 (80004005)'
以上都是在本地运行的。
...全文
1062 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
安迪小宝 2010-11-29
  • 打赏
  • 举报
回复
我也出现了同样的错误,我是在vb环境中的编程,代码如下,不知道哪里出错了
im scode() As String


Private Sub Adodc1_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
If Adodc1.Recordset.EOF Or Adodc1.Recordset.BOF Then Exit Sub
Text2.Text = Adodc1.Recordset("学号").Value
Text3.Text = Adodc1.Recordset("姓名").Value
Combo2.Text = Adodc1.Recordset("性别").Value
Text4.Text = Adodc1.Recordset("出生日期").Value
Text5.Text = Adodc1.Recordset("籍贯").Value
Combo1.Text = Adodc1.Recordset("专业代码").Value
Text6.Text = Adodc1.Recordset("班级").Value
End Sub



Private Sub Combo1_Click()
'Dim n As String
n = Combo1.ListIndex
'Text2.Text = scode(n)
End Sub




Private Sub Command1_Click()
Dim sql As String
'sql = "select *from t"
'sql = "select *from ss"
sql = "SELECT S# AS 学号,SNAME AS 姓名,SSEX AS 性别,SBRITHIN AS 出生日期,PLACEOFB AS 籍贯,SCODE# AS 专业代码,CLASS AS 班级 FROM S"
If Len(Trim(Text1.Text)) = 0 Then Exit Sub
Adodc1.ConnectionString = connString + Text1.Text
Adodc1.RecordSource = sql
Adodc1.Refresh

Adodc2.ConnectionString = connString + Text1.Text
Adodc2.RecordSource = "select * from ss"
Adodc2.Refresh
n = Adodc2.Recordset.RecordCount
ReDim scode(n) As String
For i = 0 To n - 1
scode(i) = Adodc2.Recordset("scode#").Value
Combo1.AddItem Adodc2.Recordset("ssname").Value
Adodc2.Recordset.MoveNext
Next i
End Sub

Private Sub Command2_Click()
st1 = Trim(Text2.Text)
st2 = Trim(Text3.Text)
st3 = Trim(Combo2.Text)
st4 = Trim(Text4.Text)
st5 = Trim(Text5.Text)
st6 = scode(Combo1.ListIndex)
st7 = Trim(Text6.Text)
If Len(st1) = 0 Then
MsgBox "请输入学号", vbOKOnly, "警告"
Exit Sub
End If
If Len(st2) = 0 Then
MsgBox "请输入姓名", vbOKOnly, "警告"
Exit Sub
End If

If Len(st5) = 0 Then
MsgBox "请输入籍贯", vbOKOnly, "警告"
Exit Sub
End If
If Len(st7) = 0 Then
MsgBox "请输入班级", vbOKOnly, "警告"
Exit Sub
End If
sql = "insert into S(S#,SNAME,SSEX,SBRITHIN,PLACEOFB,CLASS) values ('"
sql = sql + st1 + "','" + st2 + "','" + st3 + "','" + st4 + "','" + st5 + "','" + st6 + "','" + st7 + "')"
Dim cn As New ADODB.Connection
Adodc1.ConnectionString = connString + Text1.Text
cn.Open
cn.Execute sql
cn.Close
Adodc1.Refresh
End Sub


Private Sub Form_Load()
connString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=school;Data Source="
Text1.Text = "XIAOBAO"
Combo2.AddItem "男"
Combo2.AddItem "女"
Combo2.Text = "男"

End Sub
slowgrace 2009-12-15
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 kaixuan001 的回复:]
查到了http://blog.csdn.net/gracexu/archive/2008/04/23/2318384.aspx
Access 2003 的两种SQL 查询模式:ANSI-89 和 ANSI-92  ,的确有些地方不同
[/Quote]

谢谢分享。
kaixuan001 2009-12-15
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 slowgrace 的回复:]
引用 4 楼 kaixuan001 的回复:
第一个错误消息:[ADODC]:Unknown error. [ADO]:

在哪一行报的错?

引用 4 楼 kaixuan001 的回复:
正常情况下,如果sql1中没有union语句时,可以正常获取到结果集。
但sql1的语句在MS access2003 的查询窗口中执行正确,得到结果集,是不是我使用ADODC1的方法错误?

这不奇怪,我也遇到过在ACCESS里查询能用,同样的SQL在VB里却通不过。原因是ACCESS内部和ADO遵循的是不同版本的ANSI SQL标准。

[/Quote]
查到了http://blog.csdn.net/gracexu/archive/2008/04/23/2318384.aspx
Access 2003 的两种SQL 查询模式:ANSI-89 和 ANSI-92 ,的确有些地方不同
kaixuan001 2009-12-15
  • 打赏
  • 举报
回复
问题如17楼所说,实在惭愧,犯了这样的错误。不过也通过各位学到了学到了许多东西。
slowgrace 2009-12-15
  • 打赏
  • 举报
回复
直接打开记录集报错么?


Dim RST As New ADODB.Recordset
'adodc1.ConnectionString = login.conn

sql1 = "……
With RST
.ActiveConnection = login.conn
.Source = sql1
.CursorLocation = adUseClient
.CursorType = adOpenForwardOnly
.LockType = adLockReadOnly
.Open Options:=adCmdText
End With
Stop
RST.Close
Set RST = Nothing
'Adodc1.CommandType = adCmdText
'Adodc1.RecordSource = sql1
'Adodc1.Refresh
Tiger_Zhao 2009-12-15
  • 打赏
  • 举报
回复
end保留字,作为字段名应该两边加方括号 [end]
kaixuan001 2009-12-15
  • 打赏
  • 举报
回复
12楼的测试了,一样的错误
jhone99 2009-12-15
  • 打赏
  • 举报
回复
12楼测试了吗?

kaixuan001 2009-12-15
  • 打赏
  • 举报
回复
在Adodc1.Refresh 行出的错误,可能是标准不一样。有好的解决方法吗
slowgrace 2009-12-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kaixuan001 的回复:]
第一个错误消息:[ADODC]:Unknown error. [ADO]:
[/Quote]
在哪一行报的错?

[Quote=引用 4 楼 kaixuan001 的回复:]
正常情况下,如果sql1中没有union语句时,可以正常获取到结果集。
但sql1的语句在MS access2003 的查询窗口中执行正确,得到结果集,是不是我使用ADODC1的方法错误?
[/Quote]
这不奇怪,我也遇到过在ACCESS里查询能用,同样的SQL在VB里却通不过。原因是ACCESS内部和ADO遵循的是不同版本的ANSI SQL标准。
king06 2009-12-15
  • 打赏
  • 举报
回复
测试 Adodc1.CommandType = AdCmdUnknown
kaixuan001 2009-12-15
  • 打赏
  • 举报
回复
调用sql1前,已经对参数进行赋值,测试中login.gobal_userid =‘001’
jhone99 2009-12-15
  • 打赏
  • 举报
回复
这样测试一下

Adodc1.ConnectionString = login.conn

sql1 = "select format(a.logindate,'yyyy-mm') as ny" & _
" ,a.logindate" & _
" , MAX(a.start) as start,MAX(a.end) as end " & _
" from (select YD_Login_ID " & _
" ,format(YD_Login_DT,'yyyy-mm-dd') as logindate" & _
" ,MIN(format(YD_Login_DT,'hh:mm:ss')) as start" & _
" ,null as end " & _
" from [YD_LoginLog] " & _
" where YD_Login_Type ='IN' " & _
" GROUP BY YD_Login_ID ,format(YD_Login_DT,'yyyy-mm-dd')" & _
" union " & _
" select YD_Login_ID" & _
" ,format(YD_Login_DT,'yyyy-mm-dd') as logindate" & _
" ,null as start" & _
" ,MAX(format(YD_Login_DT,'hh:mm:ss')) as end " & _
" from [YD_LoginLog] " & _
" where YD_Login_Type ='OUT' " & _
" GROUP BY YD_Login_ID,format(YD_Login_DT,'yyyy-mm-dd') " & _
" ) a" & _
" where a.YD_Login_ID ='" & login.gobal_userid & "' " & _
" GROUP BY format(a.logindate,'yyyy-mm'),a.logindate ORDER BY a.logindate"
'debug.print sql1 '测试这个sql
Adodc1.CommandType = adCmdText
Adodc1.RecordSource = sql1
Adodc1.Refresh
孤独剑_LPZ 2009-12-15
  • 打赏
  • 举报
回复
login.gobal_userid 是什么? sql里这样写能对吗
debug.print sql1 先看一下输出是什么
kaixuan001 2009-12-15
  • 打赏
  • 举报
回复
可以
我这个sql想通过登录日志来统计每个人每个月出勤情况。
jhone99 2009-12-15
  • 打赏
  • 举报
回复
在MS access2003 的查询窗口中执行可以吗?
kaixuan001 2009-12-15
  • 打赏
  • 举报
回复
select format(a.logindate,'yyyy\/mm') as ny ,a.logindate , MAX(a.start) as start,MAX(a.end) as end from (select YD_Login_ID ,format(YD_Login_DT,'yyyy\/mm\/dd') as logindate ,MIN(format(YD_Login_DT,'hh:mm:ss')) as start ,null as end from [YD_LoginLog] where YD_Login_Type ='IN' GROUP BY YD_Login_ID ,format(YD_Login_DT,'yyyy\/mm\/dd') union select YD_Login_ID ,format(YD_Login_DT,'yyyy\/mm\/dd') as logindate ,null as start ,MAX(format(YD_Login_DT,'hh:mm:ss')) as end from [YD_LoginLog] where YD_Login_Type ='OUT' GROUP BY YD_Login_ID,format(YD_Login_DT,'yyyy\/mm\/dd') ) a where a.YD_Login_ID ='001' GROUP BY format(a.logindate,'yyyy\/mm'),a.logindate ORDER BY a.logindate

jhone99 2009-12-15
  • 打赏
  • 举报
回复
Adodc1.ConnectionString = login.conn

sql1 = "select format(a.logindate,'yyyy\/mm') as ny" & _
" ,a.logindate" & _
" , MAX(a.start) as start,MAX(a.end) as end " & _
" from (select YD_Login_ID " & _
" ,format(YD_Login_DT,'yyyy\/mm\/dd') as logindate" & _
" ,MIN(format(YD_Login_DT,'hh:mm:ss')) as start" & _
" ,null as end " & _
" from [YD_LoginLog] " & _
" where YD_Login_Type ='IN' " & _
" GROUP BY YD_Login_ID ,format(YD_Login_DT,'yyyy\/mm\/dd')" & _
" union " & _
" select YD_Login_ID" & _
" ,format(YD_Login_DT,'yyyy\/mm\/dd') as logindate" & _
" ,null as start" & _
" ,MAX(format(YD_Login_DT,'hh:mm:ss')) as end " & _
" from [YD_LoginLog] " & _
" where YD_Login_Type ='OUT' " & _
" GROUP BY YD_Login_ID,format(YD_Login_DT,'yyyy\/mm\/dd') " & _
" ) a" & _
" where a.YD_Login_ID ='" & login.gobal_userid & "' " & _
" GROUP BY format(a.logindate,'yyyy\/mm'),a.logindate ORDER BY a.logindate"
debug.print sql1 '测试这个sql
Adodc1.CommandType = adCmdText
Adodc1.RecordSource = sql1
Adodc1.Refresh
kaixuan001 2009-12-15
  • 打赏
  • 举报
回复
提示2个错误,貌似没有什么实际意义;
第一个错误消息:[ADODC]:Unknown error. [ADO]:
第二个错误消息:对象'Refresh'的方法 'IAdodc'失败

正常情况下,如果sql1中没有union语句时,可以正常获取到结果集。
但sql1的语句在MS access2003 的查询窗口中执行正确,得到结果集,是不是我使用ADODC1的方法错误?
slowgrace 2009-12-15
  • 打赏
  • 举报
回复
像下面这样加上错误处理,把真正的错误信息贴出来看看:

On Error GoTo Err_Handler
Adodc1.ConnectionString = login.conn

sql1 = "select format(a.logindate,'yyyy\/mm') as ny,a.logindate, MAX(a.start) as start,MAX(a.end) as end from (" & _
"select YD_Login_ID ,format(YD_Login_DT,'yyyy\/mm\/dd') as logindate,MIN(format(YD_Login_DT,'hh:mm:ss')) as start,null as end from [YD_LoginLog] where YD_Login_Type ='IN' GROUP BY YD_Login_ID ,format(YD_Login_DT,'yyyy\/mm\/dd')" & _
" union select YD_Login_ID,format(YD_Login_DT,'yyyy\/mm\/dd') as logindate,null as start,MAX(format(YD_Login_DT,'hh:mm:ss')) as end from [YD_LoginLog] where YD_Login_Type ='OUT' GROUP BY YD_Login_ID,format(YD_Login_DT,'yyyy\/mm\/dd') ) a" & _
" where a.YD_Login_ID ='" & login.gobal_userid & "' " & _
" GROUP BY format(a.logindate,'yyyy\/mm'),a.logindate ORDER BY a.logindate"
Adodc1.CommandType = adCmdText
Adodc1.RecordSource = sql1
Adodc1.Refresh

Err_Handler:
MsgBox Err.Description
Stop
Resume
加载更多回复(2)

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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