「データベースドキュメントのオンデマンドローディング」環境でのスクリプトについて
- ■ 「データベースドキュメントのオンデマンドローディング」オプションについて
- 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()を使って非表示データベースドキュメント取得している場合は、次のように作り変えて下さい。
- プロジェクトオブジェクト(PcmAutoProject)を取得
- プロジェクトオブジェクトから登録データベースオブジェクト(PcmAutoPcmDb)を取得
- 登録データベースオブジェクトからデータベースドキュメント(PcmAutoDbDoc)を取得
- 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形式)」の関連メソッドページにも記載しておりますので、併せてご覧ください。
|