Oracle データベースに接続する大規模な VB プログラムがあります。
strCn = "Driver={Microsoft ODBC for Oracle};" & _
"SERVER=PSPROD;"
Set Cn = New ADODB.Connection
Cn.ConnectionString = strCn
Cn.CursorLocation = adUseNone
Cn.Open
私のプログラムには多くのユーザーがいるので、各ユーザーのログイン名とさまざまなテーブルへのアクセス権を含むテーブルがあります。プログラムの起動時にすべてのユーザーのレコードセットを作成し、USERNAME と PASSWORD が含まれているレコード セットから USERNAME と GRANTED_ROLE を選択します。「'password' で識別されるロール 'GRANTED_ROLE' を設定する」ステートメントと Cn.Execute ステートメントを使用して、ユーザーのアクセス権を設定します。これはすべてモジュールで行われます。
フォーム上で、SELECT、INSERT、および UPDATE 情報を別のスキーマのテーブルに格納するストアド プロシージャを呼び出したいと考えています。次のコードを使用してデータベースへの新しい接続を作成すると、ストアド プロシージャを呼び出して実行できます。
Dim cmd5040 As ADODB.Command Dim conn5040 As ADODB.Connection Dim param5040 As ADODB.Parameter
conn5040 = New ADODB.Connection conn5040 = "Driver={Microsoft ODBC for Oracle};" を設定します。& _ "サーバー=PSPROD; UID=XXXXXXX; PWD=XXXXXXXX" conn5040.Open
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.conn5040.Close を実行
ただし、プログラムの最初の起動時に同じ接続 ('Cn') を使用しようとすると、「-2147217900 [Microsoft][ODCB driver for Oracle]Syntax error or access violation」というエラー メッセージが表示されます。私のコードは次のとおりです。
Dim cmd5040 As ADODB.Command Dim param5040 As ADODB.Parameter
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
私はDBAと協力してきました。彼女は私に直接許可と直接実行権限を与えてくれましたが、まだエラー メッセージが表示されます。
私は何を間違っていますか?元の接続を使用してストアド プロシージャを実行できるようにする必要がありますか? または、2 つ目の接続を作成する必要がありますか?