Custom Database Initialization

If you need to run some special code when a database first opens, add a procedure named `.Initialize` to the database and put the code there. Panorama will automatically run this code every time the database opens (with one exception – it will not run if the database is opened without any windows, using the opensecret statement). You can use this procedure to initialize variables, set up custom menus, pre-sort or pre-select the database… any task that needs to be done automatically whenever the database file is opened.

Keep in mind that you can’t know in advance what window will be open when the `.Initialize` procedure runs. If you’re just initializing variables or menus it doesn’t really matter, but if your initialize code requires a particular form or window to be open, the code should explicitly make sure the needed window is open, using either the window, openform and/or opensheet statement.

If a procedure is already running when a database is opened (for example if a procedure uses an opendatabase statement to open another database), the original procedure will pause until the `.Initialize` code is finished, then resume from where it left off. Because of this, it’s best to keep the code in the `.Initialize` procedure as minimal as possible. Just do the minimum necessary. We’ve seen very complicated `.Initialize` procedures that open dialogs, alerts and/or forms, completely changing the experience of opening a database. We recommend avoiding this kind of complication and just stick to the minimum code and disruption needed.

Note: In Panorama X 10.0 and 10.1, Panorama did NOT pause the original procedure to run the `.Initialize` procedure. Instead, the `.Initialize` code would not run until the the original procedure was finished. This could be confusing if a procedure opened several other databases. Starting with Panorama X 10.2, the `.Initialize` code runs immediately when a database opens, and the original procedure (if any) must wait to complete.

If there is an error in the `.Initialize` code, Panorama does not display an alert or open the Error Wizard. Instead, it simply displays the error in the Notification Center (in the upper right hand corner of the screen). If you don’t have Notification Center enabled, you won’t see the error message.

### Opening Auxiliary Databases

Before Panorama X 10.2, a common application for the `.Initialize` code was to automatically open other databases needed to work with the current database, for example an Invoice database could open 4 other databases it needs by using code like this:

    opendatabase "Inventory"
    opendatabase "Prices"
    opendatabase "Customers"
    opendatabase "Sales Staff"

In Panorama X 10.2 or later, you can remove this code, and use the Auxiliary panel of the Database Options dialog to specify that these databases be loaded automatically – no code needed at all. See Auxiliary Databases to learn more.

### Using Diagnostic Mode to Skip the .Initialize Procedure

If you want to open a database without running the `.Initialize` procedure (for example if there is a problem with the `.Initialize` procedure), use diagnostic mode. See Opening a Database in Diagnostic Mode to learn how this mode works.

### Database Initialization on Panorama X Server

When a database is opened on Panorama X Server, the `.Initialize` procedure does not run. However, if the database contains a procedure named `.InitializeServer`, that procedure will run when the database opens. This is never needed for database sharing, but you can use it to perform any initializion needed for web publishing.

See Also

- Auxiliary Databases -- automatically opening multiple databases associated with each other.
- closefile -- closes the current database.
- closeserverfile -- closes the current database (used on the server).
- Database Integrity Checks -- checking database integrity when opening and saving.
- Database is Damaged Alert -- how to fix the "database is damaged" alert when opening a database.
- opendatabase -- opens a database file.
- openfile -- opens a database file. It can also import data from a text file, another database, or a variable into the current database.
- opensavedwindows -- opens windows that were open the last time file was saved.
- opensecret -- opens a database invisibly, without opening its windows.
- openserverfile -- opens a database (used on the server).
- opentextfile -- imports data from a text file or a variable into the current database.
- panoramastartupdatabases -- opens any databases specified for startup.

History

Version | Status | Notes
10.2 | Updated | Altered control flow so that .Initialize code runs immediately when database opens. If the database was opened with a procedure statement, the code in .Initialize will finish before the original procedure resumes.
10.0 | Updated | Carried over from Panorama 6.0.