You must use the parameter approach you mention. VFP tries to be smart, and since no parameters are passed, VFP only evaluates the function for the first record. BTW, this is also logically the correct way, IMHO.
>I have a select statement that calls a method to return a value:
>
>Following is a stripped down version to get the gist.
>
> select vin_ref, thisform.yGetAging()as vin_aging
> from scvndino
>
>*yGetAging Method*
>with thisform
> do case
> case vin_duedate >= .ydDate
> return 'Current'
> case between(vin_duedate,.ydDate-10,.ydDate - 1)
> return '1 - 10'
> case between(vin_duedate,.ydDate-20,.ydDate - 11)
> return '11 - 20'
> case between(vin_duedate,.ydDate-30,.ydDate - 21)
> return '21 - 30'
> case between(vin_duedate,.ydDate-60,.ydDate - 31)
> return '31 - 60'
> case between(vin_duedate,.ydDate-90,.ydDate - 61)
> return '61 - 90'
> case between(vin_duedate,.ydDate-120,.ydDate - 91)
> return '91- 120'
> otherwise
> return '121+'
> endcase
>endwith
>
>
>
>Prior to VFP 9 this worked fine. I am finding now that the record pointer in the scvndino table is not on the correct record anymore in the method. If the select statement is going through a hundred records this method returns the results for the first record in the table all 100 times.
>
>Sending vin_duedate as a parameter to the method and replacing "vin_duedate" with this parameter DOES work. My concern is that I have code like this all over the place. Is there something else I'm missing?