我的SSRS 2005报告中有一个文本框。这个文本框的表达是:
=IIF(IsDBNull(Fields!fOrgID), Code.SetMyVar("null"), Code.SetMyVar(Fields!fOrgID.Value))
我还尝试了IsNothing(Fields!fOrgID)
以及检查nulls
的其他一些变体。
我修改了SetMyVar
函数进行测试,现在看起来像这样:
Public Function SetMyVar (var as String)
MsgBox(var, VbOKCancel, "Test1")
If var Is Nothing Then
Return "NOTHING"
Else
MyVar = var
Return var
End If
End Function
我还有公共变量MyVar
:
Public Shared Dim MyVar as String
当我的数据库查询返回数据时,这会正确评估,带有值的消息框显示,文本框设置为值,世界通常更幸福。
当我的数据库查询没有返回值时,我收到错误:
查询未返回数据集的行。因此表达 评估为null。
并且SetMyVar
函数似乎永远不会被运行(您永远不会弹出消息框)。正如所料,我的情绪包括SSRS的愤怒,悲伤和仇恨。
我读了一些关于评估IF
语句两边的SSRS的内容,所以也许这就是我得到错误的原因(可能在Code.SetMyVar(Fields!fOrgID.Value)
上)...不知道我怎么解决这个问题。
思考?建议?舒适的话?
答案 0 :(得分:1)
从事物的声音来看,问题似乎是SSRS在显示零记录时出现问题。我建议使用以下其中一项:
1)使用一个适当处理零记录的控件(表格。我认为列表也是如此)。
2)修改您的查询以返回带有空值的单个记录,否则它将返回零记录。
答案 1 :(得分:1)
对原始问题的回答:
=IIF(IsNothing(Fields!fOrgID),
Code.SetMyVar("null"),
Code.SetMyVar(IIF(IsNothing(Fields!fOrgID),"Foo",Fields!fOrgID.Value)))
错误来自正在评估的IIF的双方。上面语句中的额外IIF将避免使用空值调用Code.SetMyVar。
答案 2 :(得分:0)
我相信你对Iif总是评估它的两个值参数是正确的(至少,在Visual Basic中它是这样)。我不确定为什么你会得到这个精确的错误(除非字符串不能被指定为DBNull的值?),但你几乎肯定想用不同的方法来解决这个问题。
原因在于,无论条件值如何,您当前的代码都可能始终调用两种set方法。
答案 3 :(得分:0)
我也试过这个(也尝试过使用IsNothing的版本)......
= Code.SetField(IsDBNull以便(字段!fOrgID))
并将函数更改为接受布尔值的函数。我认为上面这个函数总是返回true或false,但是如果是NULL,我再次得到“查询没有返回数据集的行。因此表达式的计算结果为null。”。
如果字段为null,我需要传回我的代码(因为这会让我知道数据源是否为null)。
如果你能想到更好的方法,请告诉我,因为我不能。
答案 4 :(得分:0)
适用于我的SSRS 2008报告的公式。
= IIF(String.IsNullOrEmpty(字段!NullableFieldwithPossibleBlankStrings.Value), “是”, “否”)