2

Report_Load イベントで、レポート (またはフォーム) のレコードセットを動的に呼び出される MySQL ストアド プロシージャの結果に変更しようとしています。具体的には、接続をどのようにセットアップしますか?

Bind Access form to the results from a Stored ProcedureHow 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
4

1 に答える 1