【问题标题】:Inserting dates in Access using VBA使用 VBA 在 Access 中插入日期
【发布时间】:2017-04-09 21:20:30
【问题描述】:

我的表格中有一个日期字段,格式为“dd/mm/yyyy”。

我正在尝试使用 VBA 代码通过表单将变量插入该字段。我有这个:

vardtedate = CDate(Format(Me.dtedate.Value, "dd/mm/yyyy"))
DoCmd.RunSQL "INSERT INTO table (dtedate) VALUES (#" & vardtedate & "#);"

它工作正常,但只有在一天超过 12 时。 如果我尝试插入类似 '12/06/2016' 的内容,它会显示它反转,例如 '06/12/2016',并且该字段将该日期视为 12 月 6 日而不是 6 月 12 日。我究竟做错了什么?我错过了什么?

我尝试参数化,但问题仍然存在。

【问题讨论】:

  • Access VBA & SQL date formats 的可能重复项。不要介意这个问题是关于 SELECT 语句的,问题是相同的。
  • 参数化查询并使用Date类型而不是Strings。
  • 不确定这是否有效vardtedate = CDate(Format(Me.dtedate.Value, "mm/dd/yyyy"))。设置 vardtedate 时反转月份和日期
  • @Andre 我尝试按照那里的答案进行参数化,但我仍然遇到同样的问题。
  • 请编辑您的问题并添加带有参数的新代码。

标签: sql vba date ms-access format


【解决方案1】:

所以我一直在寻找解决方案,我找到了这个帖子Inserting current DateTime into Audit table。显然,当您尝试通过 sql 语句插入日期值时,它会将不明确的日期格式转换为“mm/dd/yyyy”。我将变量格式化为“yyyy/mm/dd”,现在可以正常工作了。

vardtedate = CDate(Format(Me.dtedate.Value, "dd/mm/yyyy"))
DoCmd.RunSQL "INSERT INTO table (dtedate) VALUES (#" & Format(vardtedate, "yyyy-mm-dd") & "#);"

【讨论】:

    【解决方案2】:

    是的,这与您的桌面设置的区域设置有关。美国数据公约与欧洲或其他一些标准完全不同。有关详细信息,请参阅下面的链接。

    https://support.office.com/en-us/article/Set-default-values-for-fields-or-controls-99508d03-b28b-4057-9652-dac1c4c60d86

    如您所见,设置格式会强制修复。

    【讨论】:

      【解决方案3】:

      CDate(Format(Date.Now, "MM/dd/yyyy"))

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多