【问题标题】:MS Access, in trigger, SetField to format(Now(),"Short Date") brokenMS Access,在触发器中,SetField to format(Now(),"Short Date") 损坏
【发布时间】:2019-07-18 04:40:17
【问题描述】:

MS Office 365 专业增强版,Access 2007 - 2016

我最近注意到,我编写的触发器中设置字段命令的定义在我不做的情况下发生了变化。我最近拆分了数据库(前端/后端),但不确定这是否是造成这种情况的原因。这就是发生的事情......

之前:

SetField
    Name last_mod_date
    Value =Format(Now(),"Short Date")

现在...

SetField
    Name last_mod_date
    Value =Format(Now()|"Short Date")

(这不是错字,“|”替换了“,”)

如果我只是单击“更改前”(在“表”选项卡下,查看我的触发器),然后单击“保存”,我会弹出一个...

The 'SetField' macro action has an invalid value for the 'Value' argument."

(它突出显示“值”行)在 SetField 块中。

IOW,我没有进行任何更改,但它不再喜欢那里的内容。
我可以理解这一点。 “|”在哪里来自?我没有把它放在那里。无论如何,我将其替换为“,”(常​​识),单击“保存”并获得相同的弹出窗口。

知道为什么我的“,”被“|”代替会很有趣。但我更愿意学习如何解决这个问题。 Format(Now(),"Short Date") 似乎也不起作用。

有什么想法吗?

【问题讨论】:

  • 我的解决办法是使用 VBA。我不使用宏。如果您不想要时间部分,那么为什么要使用 Now(),只需使用:Value = Date()。 Format() 函数实际上返回一个字符串,而不是真正的日期/时间值。日期/时间实际上存储为日期/时间类型字段中的双数字。

标签: ms-access


【解决方案1】:

你会喜欢这个的。 我想到了。为了能够导入带有除“,”以外的分隔符的 csv,我将列表分隔符(使用...控制面板 -> 区域语言设置 -> 列表分隔符)设置为(您猜对了)“|”。我刚把它放回去,问题就消失了。

为什么默认列表分隔符设置会影响 Access 触发器深处的触发器定义的内容,这超出了我的理解。但它就在那里。

【讨论】:

    【解决方案2】:

    您不应该尝试将日期/时间存储为文本 - 这是 Format 返回的内容。所以:

    SetField
        Name last_mod_date
        Value = Now()
    

    仅存储日期:

    SetField
        Name last_mod_date
        Value = Date()
    

    【讨论】:

    • 嗨古斯塔夫。谢谢你的建议。在编码方面,我仍然是一个 Windows/VBA 新手,所以我全神贯注 :-)。目标的列定义是“日期/时间”,格式是“短日期”。所以我想我必须在填充到列之前格式化值。也许不是?
    • 日期值没有格式。格式仅供展示。
    猜你喜欢
    • 2013-11-03
    • 2011-08-03
    • 2019-01-31
    • 1970-01-01
    • 2020-03-20
    • 2022-09-22
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    相关资源
    最近更新 更多