Как определить вызывающую программу при использовании Iseries ODBC? - PullRequest
1 голос
/ 15 февраля 2012

Есть ли способ определения вызывающего «имени программы» при использовании драйвера ODBC Iseries? Когда я запускаю команду для нашего AS400 с помощью драйвера ODBC Iseries Access, вызывающая программа в стеке вызовов as400 отображает имя программы пустым. Я хотел бы определить один, потому что у нас есть триггер, который должен знать, кто звонит.

Ответы [ 3 ]

3 голосов
/ 15 февраля 2012

Соединение ODBC проксируется с помощью задания QZDASOINIT. Я не верю, что есть способ идентифицировать конкретное соединение (или программу), которая сработала триггер.

2 голосов
/ 28 января 2014

Как указывает JamesA, все запросы ODBC проходят через задание QZDASOINIT, поэтому вы не можете изменить стек вызовов для определения вызывающего абонента.

Чтобы обойти эту проблему, в DB2 for i включен клиентспециальные регистры, которые автоматически устанавливаются драйвером ODBC (который вы можете переопределить, если хотите), и ваш триггер может затем использовать.Для получения дополнительной информации см .: http://ibmsystemsmag.blogs.com/i_can/2009/10/i-can-use-client-special-registers.html

0 голосов
/ 05 апреля 2014

Это было возможно в течение некоторого времени, выставлено только начиная с i 6.1. Для примера использования, запустите этот оператор в i Nav 'Run SQL Scripts ...':

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 обсуждаются новые "специальные регистры".

...