サポート > PC-MAPPING ヒント集 > スクリプト > 「データベースドキュメントのオンデマンドローディング」環境でのスクリプトについて
「データベースドキュメントのオンデマンドローディング」環境でのスクリプトについて
■ 「データベースドキュメントのオンデマンドローディング」オプションについて
Ver.7.501〜:[ファイル]-[システム環境設定]-[操作]パネルに「データベースドキュメントのオンデマンドローディング」チェックボックスが追加されました。
Ver.8.000〜:[スタート]リボン-[システム環境設定]-[操作]パネルの「データベースドキュメントのオンデマンドローディング」チェックボックスになります。

このチェックボックスが「ON」のとき
  • プロジェクト登録データベースを「非表示」状態で保存したプロジェクトファイルを再度開いた際、非表示データベースはデータベースドキュメントを生成せずに読み込みます。
  • その後、ユーザーがデータベースを「表示」状態にした時に初めてデータベースドキュメントを生成します。
この機能により、レコード数が非常に多い(非表示)データベースがあるプロジェクトでは、プロジェクト読み込み時間が大幅に短縮されます。

■ システム環境設定の既定値
当初このオプションは既定でOFFとしていましたが、2014年後半出荷バージョンより、既定でONに変更しました。
すなわち
  • PC-MAPPINGをインストールして最初に起動したとき
  • -prmdir等で環境設定フォルダーオプション指定して最初に起動したとき(環境設定フォルダーにpcm.iniがないとき)
  • 使用しているpcm.iniの[PcmApp]セクションにDbOndemand=キーがないとき
は、この「データベースドキュメントのオンデマンドローディング」オプションが「ON」の状態で動作します。

■ オートメーションプログラミングの注意点
上記の「データベースドキュメントのオンデマンドローディング」オプションがONの場合、プロジェクト読み込み直後の非表示データベースは、内部的にデータベースドキュメントが生成されていないため、
  • AppClass.GetNumOfDbDoc()メソッドではカウントされません。
  • AppClass.SearchDbDoc()メソッドでは、データベースタイトルを指定しても検索されず、Null(Nothing)が返ります。
非表示データベースウィンドウを操作したい場合は、明示的にデータベースドキュメントを生成する必要があります。
具体的には以下の対応策をとって下さい。

■ 対応策:ユーザー都合等でスクリプトを修正する事ができない場合
すでにSearchDbDoc()を組み込んでいるスクリプトを修正できない場合、次のいずれかの対応となります。
  • 「オンデマンドローディング」オプションをOFFにして運用する(使用しない)
  • オートメーションで操作する可能性があるデータベースを常に「表示」状態にしてプロジェクトを保存する

■ 対応策:スクリプト修正が可能な場合
AppClassのGetNumOfDbDoc()、SearchDbDoc()を使って非表示データベースドキュメント取得している場合は、次のように作り変えて下さい。
  1. プロジェクトオブジェクト(PcmAutoProject)を取得
  2. プロジェクトオブジェクトから登録データベースオブジェクト(PcmAutoPcmDb)を取得
  3. 登録データベースオブジェクトからデータベースドキュメント(PcmAutoDbDoc)を取得
  4. Nothing(null)が返った場合は、データベースドキュメントが生成されていないので生成する

以下、参考例です。
//----------------------------------------------------------
//JScript例:生成されていないデータベースドキュメントをすべて生成する
//----------------------------------------------------------
for (var i = 0; i < oProject.GetNumOfDb(); i++) {
 oDb = oProject.GetDb(i, true); //プロジェクト登録データベースを順次取得
 oDbDoc = oDb.GetDocument(); //データベースのドキュメント取得を試す
 if (oDbDoc == null) { //データベースドキュメントがnull=生成されていなければ
  oDbDoc = oApp.CreateDbDoc(oDb); //データベースドキュメントを生成する
 }
}
'----------------------------------------------------------
'VBScript例:指定タイトルのデータベースウィンドウを表示状態にする
'----------------------------------------------------------
Set oDb = oProject.SearchDb("データベースタイトル") 'プロジェクト登録データベースを検索
If Not (oDb Is Nothing) Then 'データベースが登録されていれば
 Set oDbDoc = oDb.GetDocument() 'データベースのドキュメント取得を試す
 If (oDbDoc Is Nothing) Then 'データベースドキュメントがNothing=生成されていなければ
  Set oDbDoc = oApp.CreateDbDoc(oDb) 'データベースドキュメントを生成する
 End If
 bResult = oDbDoc.SetVisible(1) 'データベースウィンドウを表示状態にする
End If

■ 参考
  • この「データベースドキュメントのオンデマンドローディング」機能は「プロジェクト登録済『非表示』データベース」のプロジェクト読み込み時のみに適用されます。
    プロジェクト登録済表示データベース、プロジェクトに登録されていないデータベース、ベクター内部属性ウィンドウには適用されません。
  • 一度ドキュメントを生成してしまえば、プロジェクトが開いている間は「非表示」状態にしてもドキュメントは破棄されません。
  • データベースウィンドウ操作を伴わない場合は、DbDocオブジェクトを使わなくてもProjectオブジェクトから取得したPcmDbオブジェクト内で直接、レコード検索やセル値取得・更新等が可能です。
    データベースウィンドウを表示したり、DbViewクラスのメソッド・プロパティを使いたい場合は、データベースドキュメントが生成されている必要があります。
  • 注意事項を「Automation リファレンス(CHM形式)」の関連メソッドページにも記載しておりますので、併せてご覧ください。