在ADODB(VBA,Excel和Access 2010)中执行查询时出现错误80004005

时间:2013-04-05 14:46:36

标签: excel vba ms-access inner-join adodb

我有一个问题,我无法理解。我有一个Access数据库,我试图通过使用ADODB在Excel中使用VBA来创建一组查询。

我有几个成功创建的查询,即。这下面的一个。然而第二个不起作用。如果我将查询手动复制到访问数据库(从SELECT和转发),并保存为“DK_Teledata_1”,它将完美无缺

CREATE PROCEDURE DK_Aktiviteter_Union_1 AS SELECT DK_Aktivitet.År FROM DK_Aktivitet;

那个不起作用的那个

CREATE PROCEDURE DK_Teledata_1 AS SELECT DK_Teledata.Dato FROM DK_Teledata INNER JOIN Time_Intervals ON DK_Teledata.Interval = Time_Intervals.Time_Interval;

创建具有相同数据的以下查询时没有任何问题:

CREATE PROCEDURE DK_Teledata_1 AS SELECT * FROM DK_Teledata;
CREATE PROCEDURE DK_Teledata_1 AS SELECT * FROM Time_Intervals;
CREATE PROCEDURE DK_Teledata_1 AS SELECT * FROM Time_Intervals, DK_Teledata;

一旦我创建连接或使用“WHERE DK_Teledata.Interval = Time_Intervals.Time_Interval”它就会失败。

Intervals和Time_Intervals字段都是具有相同长度和属性的文本字段。

使用Excel 2010,accdb数据库文件和“Microsoft.ACE.OLEDB.12.0”提供程序字符串。

1 个答案:

答案 0 :(得分:0)

我猜建议您将CREATE VIEW替换为CREATE PROCEDURE

如果这也不起作用,您可以使用DAO创建查询。

Dim strSql As String
Dim db As DAO.Database
Dim qdf As DAO.QueryDef

strSql = "SELECT DK_Teledata.Dato" & vbCrLf & _
    "FROM DK_Teledata INNER JOIN Time_Intervals" & vbCrLf & _
    "ON DK_Teledata.Interval = Time_Intervals.Time_Interval;"
Set db = OpenDatabase("C:\db_folder\your.accdb", True, False)
Set qdf = db.CreateQueryDef("DK_Teledata_1", strSql)

该代码使用早期绑定,因此需要设置引用。但你可以用后期绑定做同样的事情,不需要参考。

Dim strSql As String
Dim dbe As Object
Dim db As Object
Dim qdf As Object

strSql = "SELECT DK_Teledata.Dato" & vbCrLf & _
    "FROM DK_Teledata INNER JOIN Time_Intervals" & vbCrLf & _
    "ON DK_Teledata.Interval = Time_Intervals.Time_Interval;"
Set dbe = CreateObject("DAO.DBEngine.120")
Set db = dbe.OpenDatabase("C:\db_folder\your.accdb", True, False)
Set qdf = db.CreateQueryDef("DK_Teledata_1", strSql)