1

我有一个我无法解决的问题。我有一个 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”提供程序字符串。

4

1 回答 1

0

作为一个疯狂的猜测,我建议你CREATE VIEWCREATE 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)
于 2013-04-05T15:07:41.013 回答