The select statement scans the database and selects records that match a formula you provide. But what if the formula fails to match any records? Eeek! Panorama always requires that at least one record be selected at all times, it never allows the entire database to be invisible. If none of the records in the database match the formula, Panorama will automatically select all records (if you want to leave the previous selection intact, use the safeselect statement). Of course this could be a problem if the following statements are expecting a particular subset of the database to be selected and instead all records are selected.

Fortunately, Panorama normally handles this situation for you automatically so that your code works correctly in most situations. Panorama keeps track of the fact that there should be no records selected, and it will skip any statement that modifies the database, including formulafill, sequence, propagate, unpropagate, etc. Panorama will continue skipping these statements until it comes to a selectall statement or another select statement, or until the procedure is finished.

For example, this program will fill the InvoiceAge field with the age of every outstanding invoice in the database. It will modify the age for records that have been shipped but not fully paid. If a record hasn’t shipped yet, it will be skipped, and records that have been paid will also be skipped.

select sizeof(ShipDate)≠0 and Balance>0
field InvoiceAge
formulafill today()-ShipDate
selectall

But what if there are no outstanding invoices? In that case, the code above won’t do anything. The select statement won’t match any records, so the formulafill statement will be skipped.

Panorama’s automatic statement skipping for empty subsets should work fine for most applications. As a programmer, however, you have the choice of overriding this statement skipping and programming your own solution to the empty subset condition. To test for an empty subset, use the info(“empty”) function. Here is a modified version of the previous example. It works exactly the same, except that it will display a message if there are no outstanding invoices.

select sizeof(ShipDate)≠0 and Balance>0
if info("empty")
    message "No outstanding invoices!"
else
    field InvoiceAge
    formulafill today()-ShipDate
    selectall
endif

Panorama also has a special ifselect statement that can also be used to customize what happens after an empty selection. You may find this code easier to follow.

ifselect sizeof(ShipDate)≠0 and Balance>0
    field InvoiceAge
    formulafill today()-ShipDate
    selectall
else
     message "No outstanding invoices!"
endif

Remember, this sort of special logic is only necessary if you want to perform some special handling of empty subsets. Normally, Panorama will handle the empty subset just fine on its own by skipping the statements until the selected subset changes.


See Also


History

VersionStatusNotes
10.0No ChangeCarried over from Panorama 6.0.