【问题标题】:MS Access VBA boolean values localization problemMS Access VBA布尔值本地化问题
【发布时间】:2020-03-28 12:20:12
【问题描述】:

我在 MS Access 数据库(当前 Office 365 Access 版本)的 VBA 中构建了一些 SQL 查询字符串,我遇到了一个奇怪的从表单控件读取布尔值的本地化问题Me.MyBooleanControl 返回"Wahr" (德语 "True") => 生成的 SQL 失败。

我现在正在使用一种解决方法,通过一个函数包装每个值请求以将值转换为 -1/0,就像建议的 here 一样,但我真的很想知道是否有直接的方法可以避免这种情况.去年我在另一个 Access 数据库中使用了相同的代码结构,但没有遇到同样的问题 - 我完全不知道有什么不同(除了 MS Office 我已经更新)。

编辑:我找到了解决方案,请参阅下面的答案。

【问题讨论】:

  • 复选框返回无法本地化的值。因此,您以某种方式投射了这些值。没有您的代码,我们无法说出原因。
  • 感谢@Gustav 的提示,我通过提供代码找到了错误(见编辑)。
  • 您应该将解决方案作为答案发布并接受它,以便遇到类似问题的其他人可以找到解决方案。
  • 好的,谢谢@forpas,我会的。

标签: ms-access


【解决方案1】:

试图独立于我的代码的其余部分重现问题,我确定它是我的错:我将未绑定的复选框初始化为True,这似乎工作正常,但导致问题:

Private Sub Form_Load()
    Me.UnboundCheckbox01 = True
    Me.UnboundCheckbox02 = -1
End Sub

Private Sub ReadCheckBox()
    Debug.Print Me.UnboundCheckbox01 ' returns localized value "Wahr"
    Debug.Print Me.UnboundCheckbox02 ' returns -1 as expected

    ' after manually toggeling UnboundCheckbox01 to unchecked
    ' and back to checked again, the value returns as -1 too
End Sub

对不起!下次我会遵守规则并提供一些代码 - 有时问题会通过这样做来解决......

【讨论】:

    【解决方案2】:

    我的丹麦本地化无法复制这一点:

    Me!UnboundCheckbox01 = True
    Debug.Print Me!UnboundCheckbox01 ' returns String: "True"
    

    但是,您似乎可以将任何数据类型的任何值分配给未绑定的复选框:

    Me!UnboundCheckbox01 = "Martin"
    Debug.Print Me!UnboundCheckbox01 ' returns String: "Martin"
    
    Me!UnboundCheckbox01 = Now
    Debug.Print Me!UnboundCheckbox01 ' returns Date like: 2020-03-29 13.45.23
    

    我不确定这是否是有意的——即使 Value 属性据说是数据类型 Variant

    CheckBox.Value property (Access)

    【讨论】:

    • 感谢您查看此内容!因此,您上面的评论并非 100% 正确:在将 True 分配给复选框的特殊情况下,可能您会遇到本地化问题(可能取决于程序版本或设置);)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    相关资源
    最近更新 更多