SSRS 2005 を使用して開発されたレポート アプリケーションには、時刻を受け取る文字列型のパラメーターがあります。時刻は「HH:mm:ss」の形式である必要があります。入力文字列が正しい形式かどうかを確認するにはどうすればよいですか?
次の IsDate(TimeValue(parametr!stime.Value)) を実行しようとしました。これは、値が範囲内にある限り true を返します。ただし、値が 24:00:00 または間違った値の場合、例外がスローされます。
また、次のようにレポート コードに関数を作成しようとしました。
Public Function CheckNum(sNum as String) as Boolean
Dim msg as String
msg = ""
Try
If IsDate(TimeValue(sNum))=1 Then
Return True
Else
msg="Parameter must be a number"
End If
Catch ex as Exception
Return False
End Try
If msg <> "" Then
MsgBox(msg, 16, "Parameter Validation Error")
Err.Raise(6,Report) 'Raise an overflow
End If
End Function
そして、値 24:00:00 を入力すると、まだエラーが発生します
「 char 型から datetime データ型への変換により、日時値が範囲外になりました」 エラーが発生しないように例外を処理するにはどうすればよいですか?
編集:
public Function CheckNum(sNum as String) as Boolean
Dim REGEX_TIME = "^(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])(:([0-5]?[0-9]))?$"
If System.Text.RegularExpressions.Regex.IsMatch(sNum, REGEX_TIME) Then
Return True
Else
Return False
End If
End Function
次に、=Code.CheckNum(Parameters!sTime.Value) としてパラメーター (validateTime) 値を割り当てました。
ただし、パラメーターの値は常に true です。23 より大きい値を指定しても、まだエラーが表示されます。画像をご覧ください