首页 > 解决方案 > 错误 3061:在 VBA 中使用 datepart() 时需要的参数 1 太少

问题描述

我想填写一个excel表,数据存储在SQL server下的数据库中。我通过 VBA 做到这一点

Sub fillRows(db As DAO.Database, query As String, row As Integer)

    Dim rs As DAO.recordSet
    Set rs = db.OpenRecordset(query, dbOpenDynaset, dbSeeChanges)

    column = 2
    Do While Not rs.EOF
        ' fill the row

         Sheets(1).Cells(row, column) = rs.Fields(0).Value

         column = column + 1

         ' Move to next Record
         rs.MoveNext
    Loop
    rs.Close
End Sub


Sub main()


    Dim conn As DAO.Database
    Dim query As String

    Set conn = connectToDb()

    query = "select idCourse from dataCourse where datepart(dd,depart_time) = 18 order by idCourse"

    Call fillRows(conn, query, 1)

End Sub

我收到此错误:错误 3061:需要的参数 1 太少

问题确实是查询,更准确地说是“日期部分”,因为当我将请求更改为

select idCourse from dataCourse order by idCourse

有用。

我指定当我在 SQL Server Management Studio 中使用 datepart() 启动请求时它起作用了。

我认为 datepart() 是一个 VBA 函数,所以这就是冲突的原因。

我也试过query = "select idCourse from traincourse where " & DatePart("d", depart_time) & " = 18 order by idCourse"了,我没有看到错误,但记录集是空的!

标签: sqlexcelvba

解决方案


我的问题是我的表托管在 sql server 上。通过 VBA,我使用 DAO 来互操作数据库。因此,在 Microsoft SQL 服务器管理中工作的查询不一定适用于访问,因为访问查询有点特定


推荐阅读