I don't think my original question ever made it to the list but this would appear to be the solution:
C_REAL ($1) `From Active4D C_LONGINT($tableID) `Same type as [TABLE]id $tableID := Int($1) `Convert Real to Integer -- Brad Perkins On 9/10/12 10:40 AM, "Perkins, Bradley D" <[email protected]> wrote: >Despite using Active4D since V1 I only recently learned that when calling >4D Methods, numeric and textual parameters in the 4D method must be typed >C_REAL and C_TEXT. This is clearly documented but I somehow missed it and >in our case it hadn't been causing clearly noticeable problems. Recently >(thanks to Aparajita) we discovered that it was contributing to a memory >leak that would eventually crash 4D. In my case I had a lot of methods >with C_STRING parameters that needed to be replaced with C_TEXT. Easy >enough to fix. > >`Example Method called by Active4D > >C_TEXT($1; $inString) `replaces C_STRING($1;$inString;20) >$inString := Substring($1;1;20) > > > >We've long run a structure that serves both Active4D and legacy >(Netlink/WS4D style) pages. I am in the process of rewriting the latter in >A4D and am encountering more called 4D methods that have illegal parameter >types. > >My question involves having to now use C_REAL instead of C_LONGINT. >Most of the cases where I'll need to replace C_REAL parameters are methods >where I currently use C_LONGINT to reference a primary key for a QUERY. > >`Example Method 2 called by Active4D >C_REAL ($1; $tableID) ` replaces C_LONGINT($1; $tableID) >$tableID := $1 >QUERY([TABLE];[TABLE]id = $tableID) `[Table]id is a long integer, $tableID >is a real >... > >I have always run 4D compiled in production. I always compile with "All >variables are typed". From my CS studies and Numerical Analysis classes I >know that a floating point number that "looks equal" to a similar integer >isn't always equal. > >In re-typing existing method C_LONGINT parameters to C_REAL, do I need to >worry that about this? > >Should I do something like this? > >C_REAL ($1) ` replaces C_LONGINT($1; $tableID) >C_LONGINT($tableID) >$tableID := Round($1;0) > >QUERY([TABLE];[TABLE]id = $tableID) `[Table]id is a long integer, $tableID >is a real > >Thanks, > >Brad Perkins > > > > > _______________________________________________ Active4D-dev mailing list [email protected] http://list.aparajitaworld.com/listinfo/active4d-dev Archives: http://active4d-nabble.aparajitaworld.com/
