У меня есть большая программа VB, которая подключается к базе данных Oracle.
strCn = "Driver={Microsoft ODBC for Oracle};" & _
"SERVER=PSPROD;"
Set Cn = New ADODB.Connection
Cn.ConnectionString = strCn
Cn.CursorLocation = adUseNone
Cn.Open
В моей программе много пользователей, поэтому у меня есть таблица, в которой содержится логин каждого пользователя и его права доступа к различным таблицам. Когда я запускаю программу, я создаю набор записей для всех пользователей, а затем выбираю USERNAME и GRANTED_ROLE из набора записей, где находятся USERNAME и PASSWORD. Я использую «Установить роль« GRANTED_ROLE », идентифицируемую паролем» и оператором Cn.Execute, чтобы установить права доступа пользователя. Все это делается в модуле.
В форме я хочу вызвать хранимую процедуру, которая будет ВЫБРАТЬ, ВСТАВЛЯТЬ и ОБНОВЛЯТЬ информацию в таблицы другой схемы. Я могу вызвать и запустить хранимую процедуру, когда создаю новое соединение с базой данных с этим кодом:
Dim cmd5040 As ADODB.Command
Dim conn5040 As ADODB.Connection
Dim param5040 As ADODB.Parameter
Set conn5040 = Новый ADODB.Connection
conn5040 = "Драйвер = {Microsoft ODBC для Oracle};" & _
«SERVER = PSPROD; UID = XXXXXXX; PWD = XXXXXXXX»
conn5040.Open
Set cmd5040 = Новая команда ADODB.Command
С cmd5040
.ActiveConnection = conn5040
.CommandType = adCmdStoredProc
.CommandText = "S4115040_IMPORT_NEWBIDITEMSPES.S4115040_CheckTime"
.Parameters.Append .CreateParameter(, adInteger, adParamInputOutput, 5)
.Parameters.Append .CreateParameter(, adVarChar, adParamInputOutput, 400)
Окончание
cmd5040 (0) = 0
cmd5040 (1) = ""
cmd5040.CommandTimeout = 300
cmd5040.Execute
conn5040.Close
Однако я получаю сообщение об ошибке «-2147217900 [Microsoft] [драйвер ODCB для Oracle] Синтаксическая ошибка или нарушение доступа», когда я пытаюсь использовать то же соединение («Cn») при первом запуске программы. Мой код:
Dim cmd5040 As ADODB.Command
Dim param5040 As ADODB.Parameter
Set cmd5040 = Новая команда ADODB.Command
с cmd5040
.ActiveConnection = Cn
.CommandType = adCmdStoredProc
.CommandText = "S4115040_IMPORT_NEWBIDITEMSPES.S4115040_CheckTime"
.Parameters.Append .CreateParameter(, adInteger, adParamInputOutput, 5)
.Parameters.Append .CreateParameter(, adVarChar, adParamInputOutput, 400)
Конец
cmd5040 (0) = 0
cmd5040 (1) = ""
cmd5040.Execute
Я работал с моим администратором базы данных. Она дала мне прямые права и привилегии прямого исполнения, и я все еще получаю сообщение об ошибке.
Что я делаю не так? Можно ли использовать исходное соединение для запуска хранимой процедуры? Или я должен создать второе соединение?