VFP Tutorial - Do Case

The syntax of the Do Case structure in FoxPro allows a choice between several actions based on the result of various logical expressions:

Do Case
   Case _TALLY = 0
     Wait Window 'No records found'
   Case _TALLY = 1
     Wait Window 'One record found'
   Otherwise
     Wait Window 'Many records found'
EndCase

Each Case statement is followed by an expression which must evaluate to true or false. FoxPro evaluates each of these in sequence.

If the expression following the first Case statement evaluates as true (.T. in FoxPro) then the statements between this Case and the next one will be executed. The rest of the structure will be skipped and execution will continue on the line following the EndCase statement.

If the first expression evaluates as false (.F. in FoxPro) then the next Case statements will be evaluated in turn until one is found to be true. If none are found to be true then the code following Otherwise will be executed.

Notes

_TALLY is a variable maintained by FoxPro which holds the number of records processed by the last command. It is very useful in situations like this where you need to know how many records have been found.

Each logical condition must evaluate as either .T. or .F. because the logical values in FoxPro are a separate data type. Unlike in many other languages, an integer result will not be interpreted as a logical value.

Be careful to get the tests in the right order when designing a Case structure. Remember that the expressions are evaluated in sequence and put the toughest test first. If for example you need to test whether something is greater than 1 or greater than 10 then you must test for greater than 10 first. If you test for greater than 1 first then a value such as 11 would pass that test and the greater than 10 test would never be reached. This sort of mistake can be difficult to detect in tests because the program runs without error and will give the right result most of the time.

The Otherwise clause is optional. If it is not included and all the individual Case statements evaluate as false then none of the code will be executed.

It is good practice to include an Otherwise clause even if there is no action which needs to be taken. If you are positive that the individual Case statements cover every possible situation then add an Otherwise and display an error message.

Each Case can have an expression based on a different variable. This example works out the method of delivery from the value of the order, the weight of the goods and the country to which it has to be delivered.

Do Case
   Case lyCost > 1000
     *-- Free delivery for large orders
     lcDelMethod = 'Free'
   Case lnWeight > 10
     *-- Buyers must collect cheap, heavy orders
     lcDelMethod = 'Collect'
   Case lcCountry <> 'UK'
     *-- Airmail for a light, cheap, overseas delivery
     lcDelMethod = 'Airmail'
   Otherwise
     *-- Must be light, cheap, inland delivery
     lcDelMethod = '2nd class mail'
EndCase

Back to FoxPro program control structures.


Introduction | Environment | Project | Tables | Forms | Navigation | Executable

Related Items

Visual FoxPro Tutorial - The Goto statement

The truth about the FoxPro Goto statement

Read More

Visual FoxPro Tutorial - If ... Else ... EndIf

Using If EndIf to control program flow in Visual FoxPro

Read More

Visual FoxPro Tutorial - Navigation

Navigating between records in Visual FoxPro

Read More

Visual FoxPro Tutorial - Scan ... EndScan loop

Using a scan loop to control program flow in Visual FoxPro

Read More

Visual FoxPro Tutorial - Variables

Using variables in Visual FoxPro

Read More