2

私はこれにかなり慣れていません。Excel からストアド プロシージャを実行し、レコード セットを返すプロシージャを VBA で記述しようとしています。現在、スプレッドシート 2 のストアド プロシージャの結果が返されますが、SQL コードにパラメーターをハード コードする必要がありました。これは、他のオンライン フォーラムから拾ってきたものです。

Option Explicit

Public Sub OpenConnection()

'Set the variables
Dim conn As ADODB.Connection
Dim str As String
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
Dim fld
Dim i As Integer

'Error handler
On Error GoTo errlbl

'Open database connection
Set conn = New ADODB.Connection

'First, construct the connection string.

'ODBC CONNECTION YOU'VE ALREADY SET UP:
conn.ConnectionString = "DSN=PC_Tool_Coding"

conn.Open       'Here's where the connection is opened.

Debug.Print conn.ConnectionString  'This can be very handy to help debug!

'Recordset
Set rs = New ADODB.Recordset

str = "exec Select_account_info"

'recordset is opened here
rs.Open str, conn, adOpenStatic, adLockReadOnly

If Not IsEmptyRecordset(rs) Then
    rs.MoveFirst

    'Populate the first row of the sheet with recordset’s field names
    i = 0
    For Each fld In rs.Fields
        Sheet2.Cells(1, i + 1).Value = rs.Fields.Item(i).Name
        i = i + 1
    Next fld
    'Populate the sheet with the data from the recordset
    Sheet2.Range("A2").CopyFromRecordset rs


Else
    MsgBox "Unable to open recordset, or unable to connect to database.", _
       vbCritical, "Can't get requested records"

End If

'Cleanup
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing

exitlbl:
  Debug.Print "Error: " & Err.Number
  If Err.Number = 0 Then
    MsgBox "Done", vbOKOnly, "All Done."
  End If
  Exit Sub
errlbl:
   MsgBox "Error #: " & Err.Number & ", Description:  " & Err.Description, vbCritical, "Error in OpenConnection()"
Exit Sub
'Resume exitlbl
End Sub

パラメータを使用して動作させる方法を調べましたが、そこにたどり着けないようです。使用するパラメーターは、SQL では @accgrpnum と呼ばれます。12文字の文字列です。

事前に助けてくれてありがとう。

4

1 に答える 1

1

bonCodigo のリンクまたは

複数のステートメントを送信することで(SQL Server 2008で)これを行うこともできましたが、次のようなSQLステートメントで区切られています

str = "SET @accgrpnum = 'my_account'; exec Select_account_info;"
于 2013-02-08T21:42:19.320 に答える