在ASP classic中遇到类型转换问题.
继承我的代码:
Set trainingCost = Server.CreateObject("ADODB.Recordset")
strSQL3 = "SELECT cost1 FROM tblMain WHERE (Booked = 'Booked') AND (Paid IS NULL) AND (PaidDate BETWEEN '01/04/" & startyear & "' AND '31/03/" & endyear & "')"
trainingCost.Open strSQL3, Connection
trainingCost.movefirst
totalTrainCost = 0
do while not trainingCost.eof
trainCost = trainingCost("cost1")
If NOT isNull(trainCost) then
trainCostStr = CStr(trainCost)
trainCostStr = Replace(trainCostStr, "£", "")
trainCostStr = Replace(trainCostStr, ",", "")
totalTrainCost = totalTrainCost + CInt(trainCostStr)
end if
trainingCost.movenext
loop
trainingCost.close
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我收到以下错误:
Microsoft VBScript运行时(0x800A000D)类型不匹配:'CInt'/systems/RFT/v1.2/Extract.asp,第43行
这是"totalTrainCost = totalTrainCost + CInt(trainCostStr)"
我猜这个问题与String值是不可播放的Int有关,在这种情况下是否有任何方法可以捕获此错误?我没有使用asp经典,所以任何帮助都会有用
干杯
-编辑-
列cost1的类型是String,因为它可能包含一个数字或一系列字符,例如£10.00或TBC
T.J*_*der 12
你有几个选择.您可以通过使用IsNumeric函数提前检查值是否为数字来主动:
If IsNumeric(trainCostStr) Then
totalTrainCost = totalTrainCost + CInt(trainCostStr)
Else
' Do something appropriate
End If
Run Code Online (Sandbox Code Playgroud)
...或者你可以通过使用错误捕获来反应; 在Classic ASP中最容易定义一个函数并使用On Error Resume Next:
Function ConvertToInt(val)
On Error Resume Next
ConvertToInt = CInt(val)
If Err.Number <> 0 Then
ConvertToInt = Empty
Err.Clear
End If
End Function
Run Code Online (Sandbox Code Playgroud)
或者返回0或Null或任何适合你的东西,然后在你的trainCost代码中使用它.
请注意,CInt需要一个整数并且将在第一个非数字处停止,因此"123.45"将返回123.查看其他转换,CDouble,CCur等.