13.2.1 データベース接続

DEFINE_DB_SERVERは、他のBIFとは別に単独で使用して接続パラメータおよびデータベース・タイプのオーバーライドだけを行うか、以下のすべての関連BIFと共に、この順序で使用することができます。
DEFINE_DB_SERVER、CONNECT_SERVER、CONNECT_FILE

このBIFのフル・セットは、データベース内にある外部ファイルが、ロードされたものと異なるDSNを持つ場合にのみ必要になります。

起動時に、すべてのデフォルト・データベース、すなわちOAMに定義されているすべてのデータベースに接続するには、各OAMにあるDSNを使用して、(データベース・タイプを指定して)DEFINE_DB_SERVERおよびCONNECT_SERVERを実行する必要があります。DSNがOAMにあるときと同じ場合は、CONNECT_FILEを実行する必要はありません。つまり、外部ファイルは、ロードされたデータベースに暗黙的に接続されるということです。

ユーザー環境に、開発、テスト、および生産というバージョン別の戦略がある場合、アプリケーションがこのさまざまな段階を進むにつれ、外部ファイルの配置場所の差別化を管理するための最も簡単な方法は、使用するODBC DSNを同一にして、なおかつ異なる物理データベースをポイントするように定義を変更することになります。このように定義することで、OAMに埋め込まれる省略時のデータベースは、複数の物理データベースにアクセスするようになります。

データベースを自由に切り替えることは単純な操作のように思えますが、共有されているOAMがある場合、すなわち同じファイルを複数のデータベースで使用している場合は、容易ではありません。共有されているOAMがある状況でデータベースを切り替えるには、コード/ファイル検索、トリガーなどを含む、使用していたすべてのファイルを閉じる必要があり、ファイルを見落としがちです。これを行わないと、元のデータベースに対してアクセスが行われます。これは、ファイルを開くときにデータベースが設定されるためです。それ以降、すべてのIOは、元のデータベースに対して行われます。1つのフォームを使用しているときは、CLOSEを実行すれば、使用していたすべてのファイルを閉じることができます。複数のオブジェクトを使用していた場合は、これよりはるかに複雑になります。戻る前にすべてのHEAVYUSAGEオブジェクトから確実にCLOSEを呼び出し、すべてのコンポーネントとファンクションを終了して最初のコンポーネント/ファンクションに戻ることが不可欠です。実際、LIGHTUSAGEファンクションおよび動的コンポーネントをいたるところで使用することが最善策である場合もあります。以下は、最初のコンポーネントが何らかのファイルにアクセスする場合に、そのコンポーネント内で実行する必要のあるコードの例です。

Subroutine Name(SwitchSRV) Parms(#SwitchSRV)
Define Field(#LastSRV) Reffld(#SERVER1)
 
クローズ
 
If ('#Switchsrv *NE #Lastsrv')
If ('#LastSRV *NE *BLANK')
Use Builtin(Disconnect_file) With_Args(* #LastSRV)
Endif
Use Builtin(connect_file) With_Args(* #SwitchSRV)
Endif
 
#LastSRV := #SwitchSRV
Endroutine
 

コミット制御下でファイルに接続しているデータベースが複数ある場合、COMMITまたはROLLBACKを実行すると、すべてのデータベースですべてのトランザクションがコミットまたはロールバックされます。

Ý 13.2 組み込み関数の注意事項