Implicit database connection
An implicit database connection is made with the DATABASE instruction
used before MAIN; use SCHEMA to avoid the implicit
connection.
The DATABASE instruction can be used in two distinct ways, depending on the
context of the statement within its source module:
- To specify a default database.
Typically used in a
GLOBALSmodule, to define variables with theDEFINE ... LIKE, but it is also used for theINITIALIZEandVALIDATEstatements. Using theDATABASEstatement in this way results in that database being opened automatically at run time. - To specify a current database.
In
MAINor in aFUNCTION, used to connect to a database. A variable can be used in this context (DATABASE varname).
A default database is almost always used, because many programs
contain
DEFINE ... LIKE statements. A
problem occurs when the production database name differs
from the development database name, because the default database specification
will result in an automatic connection (just after
MAIN):DATABASE stock_dev -- Default database, used at compile time
DEFINE
p_cust RECORD LIKE customer.*
MAIN -- Connection to default database occurs at MAIN
DEFINE dbname CHAR(30)
LET dbname = "stock1"
DATABASE dbname -- Real database used in production
...
END MAINIn order to avoid the implicit connection, you can use the
SCHEMA instruction instead of
DATABASE:SCHEMA stock_dev -- Schema specification only
DEFINE
p_cust RECORD LIKE customer.*
MAIN -- No default connection occurs...
DEFINE dbname CHAR(30)
LET dbname = "stock1"
DATABASE dbname
END MAINThis instruction will define the database schema for compilation only, and will not make an implicit connection at runtime.