Report_Load イベントで、レポート (またはフォーム) のレコードセットを動的に呼び出される MySQL ストアド プロシージャの結果に変更しようとしています。具体的には、接続をどのようにセットアップしますか?
Bind Access form to the results from a Stored ProcedureとHow to bind Microsoft Access forms to ADO recordsetsを見てきました。Calling Stored Procedures and other SQL statement from MS Access 2003 (Pass Through)で詳しく説明されているように、パススルー クエリでハードコードされた値を使用してストアド プロシージャに既に正常に接続しています。
バインド アクセス フォームからストアド プロシージャの結果へのコード例を次に示します。SQL Server の代わりに MySQL を使用するように接続をセットアップします。
With cn
.Provider = "Microsoft.Access.OLEDB.10.0"
.Properties("Data Provider").Value = "SQLOLEDB"
.Properties("Data Source").Value = "Server"
.Properties("Integrated Security").Value = "SSPI"
.Properties("Initial Catalog").Value = "Test"
.Open
End With
アクセス2007を使用しています。
興味深いことに、sp 呼び出しを変更するために使用していたコードを次に示します。「32585 この機能は ADP でのみ使用できます」というエラーが表示されます。実際のクエリを変更するという Gord Thompson の提案は機能するので、それを使用しています。
If Not CurrentProject.AllForms("foo_frm").IsLoaded Then
'use hard-coded query (stored procedure) for dev work
Exit Sub
End If
Dim action, startdate, enddate As String
action = Forms![foo_frm].txtAction
If action = "cmdDaily" Then
startdate = Forms![foo_frm].txtYesterday
enddate = Forms![foo_frm].txtToday
Else
startdate = Forms![foo_frm].cboStartDate
enddate = Forms![foo_frm].cboEndDate
End If
Dim cn As New ADODB.Connection
Dim strConnection As String
strConnection = "ODBC;DSN=Foo01;UID=root;PWD=Secret;DATABASE=bar"
With cn
.Provider = "MSDASQL"
.Properties("Data Source").Value = strConnection
.Open
End With
Dim prmStartDate, prmEndDate As New ADODB.Parameter
Dim cmd As New ADODB.Command
Set prmStartDate = cmd.CreateParameter("startdate", adDate, adParamInput)
prmStartDate.Value = CDate(startdate)
cmd.Parameters.Append (prmStartDate)
Set prmEndDate = cmd.CreateParameter("enddate", adDate, adParamInput)
prmEndDate.Value = CDate(enddate)
cmd.Parameters.Append (prmEndDate)
With cmd
.ActiveConnection = cn
.CommandText = "qux_sp"
.CommandType = adCmdStoredProc
Set Me.Recordset = .Execute
End With