Access 2010ユーザーフロントエンドとMicrosoft SQL Server 2008バックエンドを使用しています。
AccessのテーブルはすべてSQLサーバーデータベースにリンクされています。
(パラメーターによって提供される)新しい値をテーブルに挿入するストアドプロシージャがあります。
私は以前に同様の質問をして、良い答えを得ました VBAのアクセスモジュールからパラメーターを渡すときにストアドプロシージャを呼び出す
接続文字列を作成するために必要な情報を見つける方法がわかりません(例:プロバイダー/サーバー名/サーバーアドレスがわかりません)。
「SQL Serverデータベースを指すAccessリンクテーブルが既にある場合、DAO.QueryDefオブジェクトでその_.Connect
_文字列を使用して、ストアドプロシージャを実行できます」-- Access for SQL Serverストアドプロシージャを呼び出すための接続文字列
私はこのコードを実装しようとしました。パラメータを渡すために、前の例を使用してみました。
エラーが発生しました
呼び出しに失敗しました
Set rst = qdf.OpenRecordset(dbOpenSnapshot)
の行(私のパラメーターの渡しは言うまでもなく、コードはおそらくかなりずれています)。
_Set qdf = CurrentDb.CreateQueryDef("")
qdf.Connect = CurrentDb.TableDefs("tblInstrumentInterfaceLog").Connect
qdf.sql = "EXEC dbo.upInsertToInstrumentInterfaceLog"
qdf.ReturnsRecords = True
Set rst = qdf.OpenRecordset(dbOpenSnapshot)
qdf.Parameters.Append qdf.CreateParameter("@BatchID", adVarChar, adParamInput, 60, BatchID)
qdf.Parameters.Append qdf.CreateParameter("@InstrumentName", adVarChar, adParamInput, 60, InstrumentName)
qdf.Parameters.Append qdf.CreateParameter("@FileName", adVarChar, adParamInput, 60, FileName)
qdf.Parameters.Append qdf.CreateParameter("@QueueId", adVarChar, adParamInput, 60, QuenueId)
rst.Close
Set rst = Nothing
Set qdf = Nothing
_
誰かが私のコードの何が問題になっているのか、なぜこのエラーが発生するのかを教えてもらえますか?
ビクトリア、
以下のように、ADOを使用してストアドプロシージャを実行できます...
Set mobjConn = New ADODB.Connection
mobjConn.Open "your connection string"
Set mobjCmd = New ADODB.Command
With mobjCmd
.ActiveConnection = Me.Connection
.CommandText = "your stored procedure"
.CommandType = adCmdStoredProc
.CommandTimeout = 0
.Parameters.Append .CreateParameter("your parameter name", adInteger, adParamInput, , your parameter value)
' repeat as many times as you have parameters
.Execute
End With
接続文字列を取得するには、次の行を使用できます
Debug.Print CurrentDb.TableDefs("tblInstrumentInterfaceLog").Connect
イミディエイトウィンドウに表示され、使用できる接続文字列が表示されます。
試してみて、何か問題があれば教えてください。
灰
Selectステートメントとして結果セットを返すストアドプロシージャコールを作成することもできます。
この例のように:
Sub Macro2()
'
' Macro1 Macro
'
'Declare variables'
Dim mySql As String
Set objMyConn = New ADODB.Connection
objMyConn.CommandTimeout = 0
Set objMyCmd = New ADODB.Command
objMyCmd.CommandTimeout = 0
Set objMyRecordset = New ADODB.Recordset
objMyConn.ConnectionString = CStr(Range("ADOConnectString").Value)
objMyConn.Open
Set objMyRecordset.ActiveConnection = objMyConn
Set objMyCmd.ActiveConnection = objMyConn
' call dbo.TotalLHCLoadingRate Range("TotalLHCLoadingRate")
mySql = "select dbo.TotalLHCLoadingRate ( " _
+ CStr(Range("MemberNo").Value) _
+ ", getdate() ) "
MsgBox "TotalLHCLoadingRate SQL : " + mySql
objMyCmd.CommandText = mySql
objMyCmd.CommandType = adCmdText
objMyCmd.Execute
objMyRecordset.Open objMyCmd
Range("TotalLHCLoadingRate ").Value = ""
Range("TotalLHCLoadingRate ").CopyFromRecordset (objMyRecordset)
Range("TotalLHCLoadingRate ").Interior.ColorIndex = 37
MsgBox "TotalLHCLoadingRate : " + CStr(Range("TotalLHCLoadingRate ").Value)
objMyRecordset.Close
End Sub