我有一个问题,我无法理解。我有一个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”提供程序字符串。
答案 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)