gpt4 book ai didi

sql - 将vba变量日期传递给sql语句

转载 作者:行者123 更新时间:2023-12-02 15:25:50 25 4
gpt4 key购买 nike

作为 vba-sql 的新手,我尝试在 vbaDocmd.runsql 中使用 for 循环填充一个表填充表。代码工作正常,但表中的值是:所有记录的 12/30/1899。我使用消息框进行检查,dt 工作正常。它在循环中为我提供了日期并移至下一个日期,但在表格中它只为我提供了一个日期:12/30/1899。

Function dateTblUpdate()

DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE FROM [date-table]"
Dim dt As Date



For dt = #1/1/2010# To DateSerial(Year(Now), Month(Now), Day(Now))
'MsgBox DateSerial(Year(Now), Month(Now), Day(Now))
'MsgBox dt
DoCmd.RunSQL "Insert into [date-table] (the_date) values(" & dt & ")"

Next
DoCmd.SetWarnings True
End Function

日期表当前结果

the_date
----------
12/30/1899
12/30/1899
12/30/1899
12/30/1899
12/30/1899
12/30/1899

但预期结果:

the_date
------------
01/01/2010
01/02/2010
01/03/2010
01/04/2010

我的日期列是日期类型,我相信 sql 认为 dt 不是日期,所以它不保存它并保存默认日期....有什么想法吗?

最佳答案

在文字日期值前后包含 # 个字符。否则,数据库引擎会将类似 26/5/2015 的内容解释为 26 除以 5 除以 2015 ... IOW 作为数学表达式,而不是您想要的日期。

"Insert into [date-table] (the_date) values(" & Format(dt, "\#yyyy-m-d\#") & ")"

但是如果你使用参数查询,你就不需要在意 SQL 语句中的那些 # 字符:

Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim dt As Date
Dim strInsert As String

strInsert = "INSERT INTO [date-table] (the_date) VALUES (pDate)"
Set db = CurrentDb
Set qdf = db.CreateQueryDef(vbNullString, strInsert)

'For dt = #1/1/2010# To DateSerial(Year(Now), Month(Now), Day(Now))
For dt = #1/1/2010# To Date
qdf.Parameters("pDate").Value = dt
qdf.Execute dbFailOnError
Next

请注意,使用 QueryDef.Execute 方法会消除 DoCmd.SetWarnings False 的动机。关闭 SetWarnings 会抑制信息,包括可能对故障排除有用的信息。

关于sql - 将vba变量日期传递给sql语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30463044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com