Best Practices - Opening and Closing Tables

The purpose of this document is to provide best practices to open and close tables.

Declaring a table in a Subprogram (called by Call), a Function (called by Gosub) or a Method (invoked by Fmet) does not cause any issue, even if the table was opened in the calling sequence. You can freely declare the tables you need in the routines you write. This is actually mandatory if you want to make sure the table was opened in the right context.

However, if you declare the same table in a sequence called by Gosub, it triggers an error. For example:

Local file BPCUSTOMER [BPC]
Gosub DECLARE_TABLE
Call ANOTHER_SUBROUTINE
...
End
$DECLARE_TABLE
Local File BPCUSTOMER [BPC] : # Here, an error will occur (table already opened)
...
Return

If for any reason you want to re-open a table, you first have to close it by using the LogicClose instruction, whose syntax is as follows:

# Let's close the table BPCUSTOMER
LogicClose File [BPC]

The table is no longer online, and none of the memory resources used are destroyed in the process. The execution of the following File instruction is also faster.

Caution: The clalev function should no longer be used for that purpose, as it as many side effects and is no longer safe.