【发布时间】:2021-05-01 17:43:36
【问题描述】:
我想填写一个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"我没有看到错误但记录集是空的!
【问题讨论】:
-
试试
select idCourse from dataCourse where day(depart_time) = 18 order by idCoursew3schools.com/sql/func_sqlserver_day.asp -
@TimWilliams 是的,它适用于 day(depart_time) thx,但是 datepart() 有什么问题!
-
也许
datepart('dd',depart_time)