Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
IIF syntax
Message
From
13/09/2015 17:55:12
 
 
To
13/09/2015 15:13:37
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Title:
Environment versions
Visual FoxPro:
VFP 9 SP2
OS:
Windows Server 2012
Network:
Windows 2008 Server
Database:
MS SQL Server
Application:
Web
Miscellaneous
Thread ID:
01624559
Message ID:
01624569
Views:
49
thanks al - good to know.
I have copied all codes into my file. whether this has been a source of errors over the years is hard to say, but now that I am aware of the issue I can keep my eyes open and have a solution in place should it arise. many thanks for the detailed response.

k

>>>>I have always used the if .. endif clause but am wondering if the IIF could serve me here. The example in help menu of VFP does not answer my question.
>>>>here is what I want to do using if ... endif
>>>>
>>>>
>>>>if myval<7
>>>>replace myval with int(myval) && I want to remove values to the right of the decimal
>>>>else
>>>>? 'myval exceeds 7'
>>>>endif
>>>>
>>>>
>>>>I tried this without success - is it possible ?? (or does this function only apply to expressions) or do I just have the syntax wrong.
>>>>
>>>>? IIF(myval<7,Replace myval with Int(myval), 'Retained myval'  )
>>>>
>>>
>>>IIF() returns either the second or third parameter as an expression, depending on the value of the first parameter. You're attempting to return a command rather than an expression.
>>>
>>>You could do something like
>>>
>>>REPLACE MyVal WITH IIF( MyVal < 7, INT( MyVal ), MyVal ) IN MyAlias
>>>
>>>but that's not a great alternative. MyVal would always be REPLACEd, even with the same value, which will affect things like GETFLDSTATE( ).
>>
>>I'm curious Al why you added the 'in myalias' since ken's solution (which is virtually the same) works for me without it. Unless you were attempting to display the process as it occurs (which for me was not essential component to the operation.) Thanks for your input - I have a lot of places to use this new found knowledge.
>
>The IN clause of REPLACE was introduced to fix a subtle bug in the REPLACE command present from the earliest days of dBASE. Basically, if:
>
>- you have Table A SELECTed
>- the record pointer of Table A happens to be at EOF( )
>- you run the command: REPLACE A.MyVal WITH ...
>
>Then, there is no error, but the value of A.MyVal doesn't get updated (!)
>
>Using the IN clause with REPLACE also means you have to worry less about which work area is currently SELECTed.
>
>IMO using the IN clause should be mandatory with REPLACE in almost all circumstances. The only exception I've run into over the years is in generic functions where preceding or calling code sets the proper work area in advance.
>
>It's worth pointing out that the UPDATE-SQL command can be useful for this kind of stuff as well. If you want to update all values in a table (i.e. you're running your REPLACE within a SCAN...ENDSCAN loop), you could do something like this instead:
>
>UPDATE MyAlias SET ;
>  MyVal = IIF( MyVal < 7, INT( MyVal ), MyVal )
>
>* It would arguably be nicer to do this:
>UPDATE MyAlias SET ;
>  MyVal = INT( MyVal ) ;
>  WHERE MyVal < 7
>
>* Updating a single row, or a selection of rows also requires a WHERE clause, for example:
>UPDATE MyAlias SET ;
>  MyVal = IIF( MyVal < 7, INT( MyVal ), MyVal ) ;
>  WHERE MyPrimaryKey = SomePrimaryKeyValue
>
>
Previous
Reply
Map
View

Click here to load this message in the networking platform