Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


【Delphi/400】1つのEXE内でジョブを分割する方法

Delphi/400でIBM i に接続する通常の業務アプリケーション作成時は、
ネイティブ接続とそれ以外(FireDACやdbExpress等)を
同一ジョブで動作するように接続時の設定を行っていることが多いかと思います。
(※Configurationで「Multiple Channel」をオンにしている場合は全て分かれるため除く)
(※IntraWebは通信時のみセッションを使用するためサーバーの「Multiple Channel」がオンの想定)

しかし、以下のような場合にジョブを意図的に分けたい場合もあるかと思います。

  • ジャーナルが有効なマスターやトランザクションファイルへのSQL更新と、
    ジャーナル不使用のワークファイルへのSQL更新でジョブを分けたい場合
    (前者はトランザクション有効、後者は無効のジョブを使用したい場合)
  • IntraWebのように毎回ジョブを分割したいシステムがあるが、
    そうでない他システムと競合するため「Multiple Channel」はオフにしておきたい場合

今回はその設定方法を紹介します。
 

方法1:エリアスを分ける(接続方式共通)

Delphi/400のConfigurationで、
エリアス(IBM i への接続設定)を別名で2つ作成します。
(今回は名前以外は同値にしておきます。)

エリアス名(AS/400 NAME)は8桁以内なら任意ですが、
複数台のIBM i を保有されている環境においては、
・「他方のIBM i のローカル名」
・「hostsファイルで定義された他方のIBM iの別名」
を指定するとそちらが優先され、想定しない他方のIBM i へ接続が試行されますのでご注意ください。

 

クライアント側では、以下のように接続用コンポーネントを
エリアスごとに配置・設定します。
(今回の例ではFireDAC接続ですが、dbExpress接続やBDE接続でも同様です。)

 
接続ロジックではそれぞれのTFDConnectionの「Database」パラメータに
それぞれのエリアス名を指定することで、別々のセッションで接続できます。

エリアスの指定(黄色部分)のみを別名で接続する

 

方法2:接続パラメータで指定(32bit dbExpress/BDE接続)

古いアーキテクチャを使用している場合は、
接続時のパラメータ設定でセッションを分けることが可能です。

それぞれ、接続時のパラメータに以下を設定することで、
以後のセッションがすべて別々のジョブになります。
(同一EXE内では元に戻す手段は無いため、ご注意ください。)

// dbExpress接続では、TSQLConnectionの接続ロジックに以下を追加
  SQLConnection2.Params.Values['Decimal Separator'] := 'Y'; // セッションを他と分ける

// BDE接続では、TDatabaseの接続ロジックに以下を追加
  Database2.Params.Values['MULTISESSION'] := 'TRUE';        // セッションを他と分ける