【问题标题】:Combining fields, some null, in a textbox on a report in access在访问报告的文本框中组合字段,一些为空
【发布时间】:2012-12-05 20:18:52
【问题描述】:

我正在尝试将几个地址字段合并到报告的一个文本框中:

=[City]+", "+[County]+", "+[Post Code]

但是,并非所有记录在 [County] 列中都有条目,这意味着这些记录的文本框中根本没有显示任何内容。所以我尝试了一个 Iif 语句:

=IIf([County],[City]+", "+[County]+", "+[Post Code],[City]+", "+[Post Code])

这不起作用,我怎样才能让文本框显示存在的任何字段?

【问题讨论】:

  • 你想显示City County Post Code。那么如果 Country 为空,文本框不显示City and PostCode
  • No 如果 [County] 为 NULL 但 [City] 和 [Postcode] 不是,则文本框为空白。
  • +1 触发 HansUp 优秀答案

标签: database ms-access vba


【解决方案1】:

IMO 最简单的解决方案:使用 Nz

=[City]+", "+Nz([County]+", ")+[Post Code]

尽管您可能希望使用& 而不是+。在 Access 中,+ 表示求和,而& 表示串联。

【讨论】:

  • +1 但我仍然不会在 VBA 中使用 + 作为连接符,除非我有特别的想法,换句话说,仅适用于 Nz。 VBA 字符串连接器是 &.
  • @Remou,如果你想要除了 null 的默认响应之外的东西,你只需要另一个 Nz 参数。在大多数情况下(个人)处理字符串值时,我希望使用默认值,因此完全没有必要特别指出 , ""
  • 你在我删除我的评论后回复了:) 我意识到点击帖子后:(
【解决方案2】:

你离得太近了!

=[City]+", "+[County]+", "+[Post Code]

应该是:

=[City]&", "&[County]&", "&[Post Code]

请记住,在数学中,NULL 胜过一切,所以每次任何字段为空白时,使用加号运算符都会给您一个 NULL 结果。

【讨论】:

    【解决方案3】:

    你的IIf声明很接近。

    您错过了 2 个可能的测试之一

    如果只能出现空值,

    =IIf(IsNull([County]),[City]+", "+[County]+", "+[Post Code],[City]+", "+[Post Code])
    

    如果它可以为空 ("") 或 null

    =IIf(len(""&[County]),[City]+", "+[County]+", "+[Post Code],[City]+", "+[Post Code])
    

    【讨论】:

      【解决方案4】:

      您可以利用两个连接运算符(+&)以不同方式处理 Null 的事实。

      ? "A" + Null
      Null
      ? "A" & Null
      A
      

      所以你可以这样做......

      ? "A" & ", " & "B" & ", " & "C"
      A, B, C
      ? "A" & ", " & Null & ", " & "C"
      A, , C
      

      ...但是如果您在使用 Null 而不是第二个字符串值时不想要两个逗号,请改为:

      ? "A" & (", " + Null) & ", " & "C"
      A, C
      

      如果这一切都有意义,请将相同的模式应用于您的文本框控件源:

      =[City] & (", " + [County]) & ", " & [Post Code]
      

      您不需要函数(IIfIsNullLen 和/或Nz)来获得您想要的内容。

      【讨论】:

      • 太棒了!知道这个技巧会为我节省不少代码!
      【解决方案5】:

      请试试这个:相当丑陋的想法......当 Chr(13) 和 Chr(10) 在那里时,它永远不会是空的。

      IIf(Isnull([County]), 
          IIf(Isnull([Post Code]), 
              IIf(IsNull[Post Code]), "No Address", [Post Code]),
              [City] + Chr(13) & Chr(10) +[Post Code]),
      [Country] + Chr(13) & Chr(10) + [City] + Chr(13) & Chr(10) +[Post Code])
      

      【讨论】:

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