2012-02-15 28 views
1

有沒有辦法使用的iSeries ODBC驅動程序時確定調用「程序名」?當我使用Iseries Access ODBC驅動程序針對AS400運行命令時,as400調用堆棧中的調用程序顯示程序名稱爲空白。我想定義一個,因爲我們有一個觸發器,需要知道誰是調用者。如何在使用Iseries ODBC時定義調用程序?

回答

3

的ODBC連接是通過QZDASOINIT工作代理。我不相信有一種方法可以確定觸發觸發器的特定連接(或程序)。

+2

要添加到詹姆斯的回答,任何時候有一個服務器/客戶端界面,這是故意的,每一方沒有其他的知識進行操作。想象一下在Windows上運行的Java程序。它可能是com.mycompany.orderEntry.inventory.GetQuantity;它使用ODBC/JDBC來訪問DB2 for i。 IBM i如何調用堆棧知道啓動更新的Java程序的確切名稱? ODBC驅動程序不會將啓動程序的名稱傳遞給服務器。 – 2012-02-15 18:11:05

+0

另一個想法。根據您如何設置連接,如果您爲每個應用程序使用不同的通用用戶,則可以通過使用'WRKACTJOB'上的選項2來查看登錄用戶的內容。 – 2012-02-15 18:15:55

2

由於JamesA指出,所有的ODBC請求經過QZDASOINIT工作,所以你不能改變調用堆棧,以確定呼叫者。

爲了解決這個問題,DB2爲我包括由ODBC驅動程序(它如果你願意,你可以忽略),然後你的觸發器可以使用自動設置客戶端特殊寄存器。欲瞭解更多信息,請參閱:http://ibmsystemsmag.blogs.com/i_can/2009/10/i-can-use-client-special-registers.html

0

這是可能的一段時間,只有從6.1暴露。舉一個例子使用,請在我的Nav這一說法「運行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 Reference中討論了新的 「特殊寄存器」。

相關問題