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.