【DO!BOOK・ページリンク】
2009_migaro_techreport_001   60 / 80

BOOKをみる

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 コ