【DO!BOOK・ページリンク】 2009_migaro_techreport_001 60 / 80 10秒後にBOOKのページに移動します |
|
58 ンでは、デフォルトのライブラリが設定 されている。 例えばBDE の場合、BDE のエリア スまたはTDatabase コンポーネントの [LIBRARY NAME]設定である。 通常はここに、アプリケーション上で 使用したい参照ライブラリをデフォルト として設定する。これを設定しておけば、 例えばTTable コンポーネントなどで ファイルの指定を行う場合、ライブラリ 名の指定を省くことができる。【図1】 では、複数のライブラリを使用したい 場合はどうすればよいか。もちろん TTable コンポーネントなどで、ファイ ルを’ライブラリ名/ ファイル名’で直 接指定することができる。だが、複数ラ イブラリ間でライブラリ指定を省略した い場合には、[LIBRARY NAME]に ’*LIBL’と設定しておくとよいのである。 ’*LIBL’と設定した場合、デフォル トの参照ライブラリはどこになるかとい うと、その接続セッションのライブラリ リストが対象となる。【図2】 ここで、ネイティブコマンドを非常に 有効に使うことができる。 例えば、LIB1, LIB2 というライブラ リを参照ライブラリにしたい場合、以下 のようなコマンド実行を行うことで、接 続中のセッションのライブラリリストに LIB1, LIB2 というライブラリを追加す ることができ、これをデフォルトライブ ラリとして参照できるようになる。 AS4001.RemoteCmd('ADDLIBLE LIB1'); AS4001.RemoteCmd('ADDLIBLE LIB2'); つまり、このセッションのライブラリ リストをデフォルトライブラリとして使 用するので、ネイティブコマンドによっ て、例えば、本番環境のライブラリと試 験環境のライブラリを簡単に切り替える といったことができるようになるのであ る。 もちろん、これらのライブラリリスト の設定を行うCL プログラムを用意して おき、TCall400 コンポーネントを使用 して制御することも可能である。 また、ライブラリリストを編集する際 にCHGLIB コマンドを使用する場合は、 すでに設定されているライブラリがリス トから外されてしまう可能性があるの で、注意が必要である。 2-3.SQLからメンバを扱うためのコマンド 活用例 ファイルのメンバを利用したシステム の場合、SQL での制約が問題となる。 TTable コンポーネントでファイルを 指定する場合、TableName プロパティ に、次のように指定することができる。 ライブラリ名/ファイル名(メンバ名) しかし、TQuery コンポーネントなど、 SQL 上では次のような指定になる。 ライブラリ名/ファイル名 この場合、メンバを指定することがで きないため、扱われるメンバは必ず ファーストメンバがデフォルトになって しまう。つまり、メンバを利用したシス テムにおいて、SQL は使える範囲が限 定されてしまう。これは開発効率上、非 常に問題がある。 ではSQL で、メンバを扱うためには どうしたらよいだろうか。方法としては、 SQL 上ではメンバが指定できないので あれば、その指定をセッション上で事前 に設定を行うことで可能にするというの はどうだろう。 ここで、ネイティブコマンドを非常に 有効に使うことができる。データベース・ ファイル一時変更(OVRDBF)コマン ドを使うことで、セッション上でのファ イル名の認識をメンバを含めて制御でき るのである。 例えば、次のようなOVRDBF コマン ドを実行する。 AS4001.RemoteCmd(‘OVRDBF FILE(ファイルA) TOFILE(ライブラリA/ ファイルA) MBR(メンバB) OVRSCOPE(*JOB)’); こうすると、セッション上でファイル A を扱うと、ファイルA(メンバB) を扱うことができるようになる。これに よって、SQL 内でメンバが指定できな くとも、実際には特定のメンバに対して 処理を行うことができる。【図3】 なお、ここではコマンドでOVRSCOPE を指定しているが、これは、セッション 上でOVRDBF を有効にするためであ る。これを指定しておかないと、実際に SQL で処理をする際に有効とならない ので注意が必要である。 2-4.Queryを扱うためのコマンド活用例 IBM i のユーザーは、Query(ここで はDelphi/400 のTQuery コンポーネン トではなくIBM i 上のオブジェクト) を、データ抽出や集計といった業務で使 用していることが非常に多い。【図4】 もちろんDelphi/400 から、同じよう なSQL などを実行すれば、データを取 得・集計することはできる。だが、 Query と同じ内容のものを、SQL とし てプログラムを新規に作成する必要があ る。しかし、同じ内容のプログラムであ れば、すでにIBM i 上に存在している Query をそのまま利用できるほうがよ いだろう。 実は、これもネイティブコマンドを応 用活用することで実現することができる。 ただし、Delphi/400 から直接Query を利用するには、1 つの課題がある。そ れは、Query が対話型ジョブで利用す る機能であるという点だ。Delphi/400 は対話型CPW 値を使用しないバッチ型 のジョブであるため、対話型の処理を行 うことができない。 では、どうやってDelphi/400 から Query を使用するか。RUNQRY という ネイティブコマンドが利用できるのである。 通常、Query は5250 画面上において RUNQRY を実行すると、結果が表示さ れる。これは対話型で画面情報が返され ているからである。しかしこの画面情報 を、Delphi/400 側では受け取ることが できない。そのため、情報のアウトプッ トをファイルで出力できるように、 RUNQRY コマンドのオプションで指定 する必要がある。 例えば、Query を実行した結果を Qtemp 上に結果ファイルとして出力す る場合、次のようなRUNQRY コマン ドを実行する。 AS4001.RemoteCmd(‘RUNQRY QRY(ライブラリ名/Query名) OUTTYPE(*OUTFILE) OUTFILE(QTEMP/出力ファイル名 *FIRST *RPLFILE)’); この後に、Delphi/400 のTTable コ |