当前位置:编程学习 > VB >>

VBA+ADO出现奇异问题

小弟使用EXCEL2010 VBA+ADO,引用ACCESS2010数据库中的查询。代码如下:

Public Sub adoDate()

Dim adoConn As ADODB.Connection
Dim adoRS As ADODB.Recordset
    
Set adoConn = New ADODB.Connection
Set adoRS = New ADODB.Recordset

With adoConn
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .Open "D:\客户表格.accdb"
End With

adoRS.Open "[查询2]", adoConn
Range("A1").CopyFromRecordset adoRS

adoRS.Close
Set adoRS = Nothing

End Sub


[查询2]SQL代码如下:

SELECT 客户表.公司名称, 客户表.注册日期, 客户工程师表.姓名, 项目表.项目名称
FROM (客户表 INNER JOIN 客户工程师表 ON 客户表.ID = 客户工程师表.客户表ID) 
      INNER JOIN 项目表 ON 客户工程师表.ID = 项目表.工程师ID;

SQL代码在ACCESS2010中运行OK,能返回查询结果。

问题:
在VBA中调试出错,错误如图(3表):


但是--

如果是2个表的查询:

SELECT 客户表.公司名称, 客户表.注册日期, 客户工程师表.姓名
FROM 客户表 INNER JOIN 客户工程师表 ON 客户表.ID = 客户工程师表.客户表ID;

VBA就可以顺利执行并得出结果。

或者将3表查询的SQL语句写在adoRS.Open ""引号内可以顺利执行,为什么会这样呢?

如何才能引用3表查询呢?
vba sql access 2010 --------------------编程问答-------------------- adoRS.Open "[查询2]", adoConn 
查询2的方括号去掉试试

或者

adoRS.Open "select * from 查询2", adoConn 
--------------------编程问答--------------------
SELECT A.公司名称, A.注册日期, A.姓名, 项目表.项目名称
FROM (SELECT  客户表.ID,客户表.公司名称, 客户表.注册日期, 客户工程师表.姓名 FROM 客户表 INNER JOIN 客户工程师表 ON 客户表.ID = 客户工程师表.客户表ID) A 
      INNER JOIN 项目表 ON A.ID = 项目表.工程师ID


--------------------编程问答-------------------- TO worldy:
1."adoRS.Open "[查询2]", adoConn  查询2的方括号去掉试试"
方括号是必要的,不然会当成文本,而不引用。

2."adoRS.Open "select * from 查询2", adoConn "
此方案可行能得出结果而不报错。
--------------------编程问答-------------------- TO dong_y888:

1.新SQL语句方案
此方案在ACCESS2010中调试通过,但是EXCEL2010中引用中依然不能通过,出现开贴中的错误信息。

--------------------编程问答-------------------- adoRS.Open "[查询2]", adoConn 
换成
adoRS.Open "select * from [查询2]", adoConn
试试这样行不 可行的话请告诉我 --------------------编程问答-------------------- TO wzn721721:
   见3楼答复 --------------------编程问答-------------------- 大过年的我这眼神
http://zhidao.baidu.com/question/78045966.html --------------------编程问答--------------------
引用 3 楼 racher2006 的回复:
TO worldy:
1."adoRS.Open "[查询2]", adoConn  查询2的方括号去掉试试"
方括号是必要的,不然会当成文本,而不引用。

2."adoRS.Open "select * from 查询2", adoConn "
此方案可行能得出结果而不报错。


不明白,为什么方括号是必须的,按照我的经验,你的查询2应该是在数据库中设计的一个视图,那么直接打开视图
adoRS.Open "查询2", adoConn  完全是可以的,再说,查询所有的元素都是文本 --------------------编程问答-------------------- 除
补充:VB ,  VBA
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,