2012-02-15 6 views
1

Iseries ODBCドライバを使用するときに、「プログラム名」を呼び出す方法を定義する方法はありますか? Iseries Access ODBCドライバーを使用してAS400に対してコマンドを実行すると、as400の呼び出しスタック内の呼び出しプログラムはプログラム名を空白として表示します。私は誰が呼び出し元であるかを知る必要があるトリガを持っているため、1つを定義したいと思います。Iseries ODBCを使用するときに呼び出しプログラムを定義する方法は?

答えて

3

ODBC接続はQZDASOINITジョブによってプロキシされます。私はトリガーを発した特定の接続(またはプログラム)を特定する方法があるとは思わない。

+2

ジェームズの答えに追加するには、サーバー/クライアントインターフェイスがあるときはいつでも、それぞれの側面が他の知識なしで動作することを慎重に検討します。 Windows上で動作するJavaプログラムを想像してみてください。それはcom.mycompany.orderEntry.inventory.GetQuantityかもしれません。 ODBC/JDBCを使用してDB2 for iにアクセスします。 IBM iがスタックを呼び出すと、更新を開始したJavaプログラムの正確な名前はどのようにわかりますか? ODBCドライバは、イニシエータの名前をサーバーに渡しません。 –

+0

追加の考え。どのように接続を設定したかによって、アプリケーションごとに異なる汎用ユーザーを使用すると、 'WRKACTJOB'でオプション2を使用して、ログインしているユーザーが何であるかを確認できます。 –

2

JamesAが指摘しているように、すべてのODBC要求はQZDASOINITジョブを通過するので、呼び出しスタックを変更して呼び出し元を判断することはできません。

この問題を回避するために、DB2 for iには、ODBCドライバーによって自動的に設定されるクライアント特殊レジスター(必要に応じてオーバーライドできる)が組み込まれています。詳細については、http://ibmsystemsmag.blogs.com/i_can/2009/10/i-can-use-client-special-registers.html

0

i 6.1以降で公開されている可能性があります。使用例については、私ナビでこのステートメントを実行する「ファイル名を指定して実行SQLスクリプト...」:

select CURRENT CLIENT_APPLNAME, CURRENT CLIENT_PROGRAMID, CURRENT CLIENT_WRKSTNNAME from sysibm.sysdummy1 

サポートは、JDBC、OLE DB、CLI、または.NETデータプロバイダを使用して、アプリケーション開発者に提供されています。特別なストアドプロシージャを呼び出すことによっても設定できます。例えばIBMDASQLを使用して

、接続文字列が含まれる場合があります:

conn.Open "Provider=IBMDASQL; Data Source=MyAS400;" & _ 
"Client User ID=MYWINUSRID; Client WorkStation Name=MYWINPC; " & _ 
"Client Program ID=somepc.exe; Application Name=Sample for Audit" 

SQLリファレンスは、新たな "特殊レジスタ" を論じています。

関連する問題