Delphiから、OLEでACCESSのレポートを印刷するときの話。
PCごとに、印刷出来るレポートを制御したく、
単純に、指定のレポート名があるか、ないかを調べたかった。
Ar.SysCmd(acSysCmdGetObjectState, acReport, ARTitle);
まず、acSysCmdGetObjectStateを使う方法。
この場合、
「ファイルが開いていない、存在しない場合に、0を返す」ので、
レポートがあるか、ないか、を調べる目的としては、使えない。
印刷せずに、レポートがあるか、ないかが、知りたい!!
ま、2時間ほど、探した結果、見つけた答え。
'AllReports コレクションから検索 For Each obj In dbs.AllReports Write #dsn, strPath, strFile, "レポート", obj.Name Next obj
※http://d.hatena.ne.jp/ogohnohito/20140116/p1 より
全レポート情報が引き出せるみたいなので、
これを基に、Delphiのコードを作成。
var ? obj: AccessXP.AccessObject; for i := 0 to AR.CurrentProject.AllReports.Count - 1 do begin ? obj := AR.CurrentProject.AllReports[i]; ? if (obj.name = ARTitle) then? ? ? ; end;
「とりあえず、印刷プレビューしてみて、エラーだったら・・・」
みたいなアホなコードを書かずに、良かった♪
アクセスレポートの存在チェック