0

另一个问题源于这个棘手的环境和我的经验不足。似乎 VB 函数是我可以满足其中一些报告要求的唯一方法。

我有一种情况,用户希望在报告中查看数据,如下所示:

一般要求是:报表初始化时,不显示任何数据——用户必须输入一个参数。这是完整的。该参数是一个日期参数——如果日期为空,则返回列表中的所有项目。如果为参数输入了日期,则必须返回等于或大于数据参数的 typeA 或 typeB 的所有项。

更具体地说,这就是我要完成的任务:返回 typeA_date 不为空且大于或等于参数中输入的日期的所有项目,或者返回 typeB_date 不为空且大于或等于参数中输入的日期。

这是我的代码,但它返回错误:

Function dtComprRtrn(ByVal awardField As String, ByVal suspendField As String, ByVal chkDtField As String) As Boolean
    If chkDtField Is Nothing Then
        Return True
    End If
    Dim awardDate As Date
    Dim suspendDate As Date
    If (IsDate(awardDate)) Then
        chkDtField = Convert.ToDateTime(awardDate)
    ElseIf (IsDate(suspendDate)) Then
        chkDtField = Convert.ToDateTime(suspendDate)
    Else
        Return False
    End If
    If awardDate >= chkDtField Then
        Return True
    Else
        If suspendDate >= chkDtField Then
            Return True
        Else
            Return False
        End If
    End If

错误是这样的:

“编译表达式时发生意外错误。本机编译器返回值:'[BC30289] 语句不能出现在方法主体中。假定方法结束”

我在这方面没有太多经验,也没有将功能集成到报表生成器中,我永远感谢可能提供的任何帮助。非常感谢!

4

1 回答 1

0

这是已实现且似乎正在运行的最终代码解决方案:

Function dtComprRtrn(ByVal awardField As String, ByVal suspendField As String, ByVal chkDtField As String) As Boolean
    If chkDtField Is Nothing Then
        Return True
    End If
    Dim compareDate As Date = DateTime.MinValue
    Dim chkDtDate As Date = DateTime.MinValue
    ' Check to see if input string chkDtField is a date
    If (IsDate(chkDtField)) Then
        chkDtDate = Convert.ToDateTime(chkDtField)
    End If
    ' Check to see if either awardField or suspendField is a date
    ' if not then return false
    If (IsDate(awardField)) Then
        compareDate = Convert.ToDateTime(awardField)
    ElseIf (IsDate(suspendField)) Then
        compareDate = Convert.ToDateTime(suspendField)
    Else
        Return False
    End If
    ' Now we know we have a date in compareDate
    ' and we know that chkDtDate is at least DateTime.MinValue
    ' so if chkFtField was blank then this comparison will always
    ' work if we have a valid date for awardField or suspendField
    If compareDate >= chkDtDate Then
        Return True
    Else
        Return False
    End If
End Function
于 2013-04-02T18:14:44.747 回答