【发布时间】:2016-10-07 13:22:56
【问题描述】:
我正在为我的用户构建一个小型 Excel 2010 程序,以便从 Access 2010 数据库中快速生成时间表。因为在我尝试遵守良好的编码约定并希望使用存储过程从数据库中获取我需要的所有信息之前,我还没有做过很多这样的项目。
我使用的代码(仅相关部分)如下:
Dim courses As New ADODB.Recordset
Set conn = CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & fname
conn.Open (strConnection)
Set getCoursescmd = New ADODB.Command
With getCoursescmd
Set .ActiveConnection = conn
.CommandText = "getCoursesByYearAndPeriod"
.CommandType = adCmdStoredProc
.NamedParameters = True
.Parameters.Append .CreateParameter("@Weekday", adInteger)
.Parameters.Append .CreateParameter("@CategoryID", adInteger)
.Parameters.Append .CreateParameter("@Period", adInteger)
.Parameters.Append .CreateParameter("@Year", adInteger)
.Parameters("@Weekday") = WeekDay
.Parameters("@CategoryID") = CategoryIDs.Fields(0).Value
.Parameters("@Period") = Blok
.Parameters("@Year") = Year
.Prepared = True
End With
Set courses = getCoursescmd.Execute() 'This is where it fails
SQL 查询在 Access 2010 中运行良好,如下所示(忽略荷兰变量名):
SELECT Cursussen.*, Weekday(Cursussen.StartDatum,2) AS Dag
FROM Cursussen
WHERE Weekday(Cursussen.StartDatum,2)=[@WeekDay] And Cursussen.Categorie=[@CategoryID] And Cursussen.Blok=[@Period] And Cursussen.Jaar=[@Year]
ORDER BY Cursussen.Naam, Cursussen.Niveau;
我已经对同一个数据库运行了多个其他存储查询,这些查询获取或更新数据,甚至有些带有参数。我似乎无法弄清楚为什么它在.Execute() 上失败了。它会引发运行时错误-2147467259 (80004005) Invalid Operation,这让我不知道我在这里做错了什么。
任何帮助将不胜感激。
【问题讨论】:
-
您似乎没有为您的参数分配任何值?
-
我忘记添加这部分了。它现在在那里。
标签: excel vba ms-access ms-access-2010 excel-2010