ASP Classic - Type mismatch: 'CInt' - Easy question

后端 未结 4 1991
南方客
南方客 2021-01-19 14:26

Having an issue with type conversion in ASP classic.

heres my code:

        Set trainingCost = Server.CreateObject(\"ADODB.Recordset\")
    strSQL3 =         


        
相关标签:
4条回答
  • 2021-01-19 14:29

    Potentially solving the wrong problem, depends on the type of Cost1 within the database but the code is looping through the records to generate a total.

    strSQL3 = "SELECT sum(cost1) FROM tblMain WHERE (Booked = 'Booked') AND (Paid IS NULL) AND (PaidDate BETWEEN '01/04/" & startyear & "' AND '31/03/" & endyear & "')"        
    trainingCost.Open strSQL3, Connection 
    

    etc and just read off the value as a total.

    I don't see why the RS is being looped to generate a sum when the database can do that work for you. All the conversion work it has generated just looks artifical.

    0 讨论(0)
  • 2021-01-19 14:32

    Rather than casting to a string, why not use CCur (Cast as Currency) so that your commas and any currency symbols (I think) are effectively ignored while doing arithmetic operations?

    0 讨论(0)
  • 2021-01-19 14:43

    Heh heh. Classic ASP. You have my pity :) Anyway,

    On error resume next
    

    And then on the next line, check that it worked.

    Though maybe you want CDouble. Is that a function? I can't remember.

    0 讨论(0)
  • 2021-01-19 14:47

    You have a couple of choices. You can be proactive by checking ahead of time whether the value is numeric using the IsNumeric function:

     If IsNumeric(trainCostStr) Then
        totalTrainCost = totalTrainCost + CInt(trainCostStr)
     Else
        ' Do something appropriate
     End If
    

    ...or you can be reactive by using error catching; in Classic ASP probably easiest to define a function and use 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
    

    Or return 0 or Null or whatever suits you, then use it in your trainCost code.

    Note that CInt expects an integer and will stop at the first non-digit, so "123.45" comes back as 123. Look at the other conversions, CDouble, CCur, etc.

    0 讨论(0)
提交回复
热议问题