【问题标题】:vba access query with parameters throws "invalid procedure" on execute()带参数的vba访问查询在execute()上抛出“无效过程”
【发布时间】: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


【解决方案1】:

就像@Rory 说的,你要么需要提供变量内联

.Parameters.Append .CreateParameter("@Weekday", adInteger, adParamInput, <yourintVar>)

或在之后添加它们

Dim prmWeekday As ADODB.Parameter
SET prmWeekday = .Parameters.Append .CreateParameter("@Weekday", adInteger)
prmWeekday.Value = <yourIntVar>

【讨论】:

  • 我忘记将其添加到我发布的代码摘录中。但是,为了表明参数分配没有问题(因为我在不同位置以相同的方式执行此操作),我尝试了您建议的两种方法,但都没有解决原始错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-25
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多