Answered by:
conversion to Integer is not valid

Question
-
User533367837 posted
Hi, built this function:
Public Shared Function getAcCurr(ByVal varID, ByVal acType) As getAcCurrency
Dim getAcCurrVal As getAcCurrency
Dim dateNow As Date = Now()
Dim date90 As Date = dateNow.AddDays(-90)
Dim objConn As New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("MyDB.My.MySettings.db_conn").ConnectionString)
objConn.Open()
Dim sSQL As String = "select aircraftType, SUM(dayLnd) as 'dayLnd', SUM(nightLnd) as 'nightLnd' from t_curtrack where currencyDate between '" & date90 & "' and '" & dateNow & "' and pic = '" & varID & "' and aircraftType = '" & acType & "' or currencyDate between '" & date90 & "' and '" & dateNow & "' and sic = '" & varID & "' and sicFlewLeg = '1' and aircraftType = '" & acType & "' group by aircraftType"
Dim objCmd As New SqlDataAdapter(sSQL, objConn)
Dim DS As New DataSet()
objCmd.Fill(DS)
If DS.Tables(0).Rows.Count > 0 Then
If Not IsDBNull(DS.Tables(0).Rows(0).Item("aircraftType")) Then
getAcCurrVal.acData1 = DS.Tables(0).Rows(0).Item("dayLnd")
getAcCurrVal.acData2 = DS.Tables(0).Rows(0).Item("nightLnd")
Else
getAcCurrVal.acData1 = 0
getAcCurrVal.acData2 = 0
End If
End If
objConn.Close()
Return getAcCurrVal
End FunctionIt has a supporting public structure and the function is nearly identical to another function that works correctly. Calling it from my code behind using code similar to this:
aircraftDay = Class1.getAcCurr(varID, "aircraftType") - varID is the staff member (pilot, etc) that I'm trying to return a count of day and night landings and "aircraftType" is a string that identifies the type of aircraft that we are looking to query.
I'm getting a "Conversion from type 'getAcCurrency' to type 'Integer' is not valid." in VS2019. Now I do this for another type of data that we are trying to query on the same page using an almost identical function and it works fine. The only difference between the functions is the one that works only takes varID - it doesn't get the "aircraftType" variable.
I'm at a loss trying to figure this out - I've tried Cint() on various parts of both the function and in the code behind, etc...no joy...any help appreciated.
Thx....
Wednesday, August 5, 2020 10:42 PM
Answers
-
User-1330468790 posted
Hi ewalling,
The function has no error itself. The problem might be that you tried to convert the function result, which is of type 'getAcCurrency', to the type 'Integer' in below codes (This is what I am guessing since the information you provide is not sufficient):
aircraftDay = Class1.getAcCurr(varID, "aircraftType")
You might need to check if the variable aircraftDay's type is 'Integer'.
If so, you might need to modify the codes e.g. to fetch the integer value from the function result.
Hope this can help you.
Best regards,
Sean
- Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
Thursday, August 6, 2020 1:48 AM -
User753101303 posted
Hi,
Yes aircraftDay is an integer and so aircraftDay = Class1.getAcCurr(varID, "C182") tries to assign a value whose type is getAcCurrency to an integer causing this message.
Assuming "aircraftDay" is the total number of landings it seems you want perhaps:
Dim data=Class1.getAcCurr(varID,"C182") ' This is just an object or structure that exposes multiple values, this is NOT an integer
aircraftDay=data.acData1+data.actData2 ' Add day and night landings integer values exposed by this object or structureEdit: more likely our other function does return directly an integer but this is not for this one as it uses "As getAcCurrency" not "As Integer".
- Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
Thursday, August 6, 2020 12:59 PM
All replies
-
User-1330468790 posted
Hi ewalling,
The function has no error itself. The problem might be that you tried to convert the function result, which is of type 'getAcCurrency', to the type 'Integer' in below codes (This is what I am guessing since the information you provide is not sufficient):
aircraftDay = Class1.getAcCurr(varID, "aircraftType")
You might need to check if the variable aircraftDay's type is 'Integer'.
If so, you might need to modify the codes e.g. to fetch the integer value from the function result.
Hope this can help you.
Best regards,
Sean
- Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
Thursday, August 6, 2020 1:48 AM -
User533367837 posted
Hi,
Thanks for the reply - I have aircraftDay set as Integer (Dim aircraftDay as Integer = 0) at the top of the code behind. To add some info on how this is set up - this call runs inside of rowdatabound:
...
Dim gvr as GridViewRow = e.Row
if gvr.RowType = DataControlRowTpye.DataRow then
...
Dim varID as Integer = Databinder.Eval(gvr.DataItem, "id")
aircraftDay = Class1.getAcCurr(varID, "C182") 'Looking for data for a Cessna 182 in this example
'now do some math to see if the pilot is current
if aircraftDay >= 3 then
'do coloring in the GV
end if
...
I'm doing this for a call to the other function (the one that is almost identical) and it works fine (also returns integers) but this one errors. Hope that sheds a little more light on what might be going on.
Thanks again....
Thursday, August 6, 2020 12:43 PM -
User753101303 posted
Hi,
Yes aircraftDay is an integer and so aircraftDay = Class1.getAcCurr(varID, "C182") tries to assign a value whose type is getAcCurrency to an integer causing this message.
Assuming "aircraftDay" is the total number of landings it seems you want perhaps:
Dim data=Class1.getAcCurr(varID,"C182") ' This is just an object or structure that exposes multiple values, this is NOT an integer
aircraftDay=data.acData1+data.actData2 ' Add day and night landings integer values exposed by this object or structureEdit: more likely our other function does return directly an integer but this is not for this one as it uses "As getAcCurrency" not "As Integer".
- Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
Thursday, August 6, 2020 12:59 PM -
User533367837 posted
OK, so this is why I should not code after 300pm - I omitted the .public component when calling the class function :(
I had the following:
aircraftDay = Class1.getAcCurr(varID, "C182")
It needed to be:
aircraftDay = Class1.getAcCurr(varID, "C182).data1
Ugh, ok thanks for the help - still have a couple of bugs with the data being returned but not erroring anymore.
Thursday, August 6, 2020 1:11 PM -
User753101303 posted
This is a runtime error?
You could consider using https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/option-strict-statement which is less permissive (will catch some of these at compile time for the price of being explicit about the conversion you want in your code).
You don't have to do the switch in one go as this option could be set both at the project level and for each file (ie "On" at the global level, and "Off" at the file level would preserve the current behavior, then when working on a file you can take the occasion to move a file from the "Off" to the "On" option).
Thursday, August 6, 2020 1:42 PM -
User533367837 posted
Thanks but this literally was me not writing the full line of code to do the function call. The function uses a public structure and I had omitted the .data suffix (not the best word but hopefully it makes sense). As a result the function call was trying to return the getAcCurr vs. getAcCurr.data1 - the .data1 being type "Integer" :|
Thursday, August 6, 2020 1:49 PM -
User1166908476 posted
Obrigado pela sua breve explicação me ajudou muito a tirar algumas dúvidas relacionadas a este tópico!
Friday, August 7, 2020 10:11 AM