Share via


既存のクエリを使用して Recordset オブジェクトを開く

Microsoft Office 2000/Visual Basic プログラマーズ ガイド   

Access データベースのレコードを返す既存のクエリはパラメータ (パラメータ クエリ) がある場合とない (Access 選択クエリ) 場合があります。次のトピックでは、ADO Recordset オブジェクトを使用して各種既存のクエリを使用する方法を説明します。

パラメータを持たず、レコードを返すクエリを開く

レコードを返し、パラメータを持たない既存のクエリを使用して Recordset オブジェクトを開くには、次の例で示すようにクエリの名前を source 引数として Recordset オブジェクトの Open メソッドへ渡します。

  Sub RunSavedQuery(strDBPath As String _
                  strQryName As String)
   Dim cnn As New ADODB.Connection
   Dim rst As New ADODB.Recordset
   Dim fld As ADODB.Field

   ' 接続を開きます。
   Set cnn = New ADODB.Connection
   With cnn
      .Provider = "Microsoft.Jet.OLEDB.4.0"
      .Open strDBPath
   End With

   Set rst = New ADODB.Recordset
   With rst
      ' 前方スクロール、読み取り専用 Recordset オブジェクトを使ってクエリを開きます。
      .Open Source:= strQryName, _
         ActiveConnection:= cnn, _
         CursorType:=adOpenForwardOnly, _
         LockType:=adLockReadOnly

      ' [デバッグ] ウィンドウにレコードを表示します。
      Do While Not .EOF
         For Each fld In .Fields
            Debug.Print fld.Value & ";";
         Next
         Debug.Print
         .MoveNext
      Loop

      ' Recordset オブジェクトを閉じます。
      .Close
   End With
   
   ' 接続を閉じ、オブジェクト変数を破棄します。
   cnn.Close
   Set rst = Nothing
   Set cnn = Nothing
End Sub

たとえば、Recordset オブジェクトを使用して Northwind データベースの Products Above Average Price クエリを開くには、以下のコードを使用します。

  RunSavedQuery _
   "c:\Program Files\Microsoft Office\Office\Samples\Nwind.mdb", _
   "[Products Above Average Price]"

ADO では、クエリの名前にスペースが含まれている場合、角かっこ ([ ]) または右下がりのアポストロフィー (`)でその名前を括ります。RunSavedQuery プロシージャは、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH14 サブフォルダに収録されている DataAccess.mdb サンプル ファイルのOpenRecordset モジュールにあります。

パラメータを持つクエリを開く

パラメータを持つクエリ (または "パラメータ クエリ") を実行する方法の 1 つに、ADOX コードを使用してクエリをデータベースの Procedures コレクションから Command オブジェクトとして取得する方法があります。その後、Command オブジェクトの Parameters コレクションを使用してパラメータを指定します。次のプロシージャではこの方法を示します。

  Sub RunParamQuery(strDBPath As String, _
                  strQryName As String, _
                  strParamName1 As String, _
                  varParamValue1 As Variant, _
                  strParamName2 As String, _
                  varParamValue2 As Variant)
   Dim cnn As ADODB.Connection
   Dim cat As ADOX.Catalog
   Dim cmd As ADODB.Command
   Dim rst As New ADODB.Recordset
   Dim fld As ADODB.Field

   ' 接続を開きます。
   Set cnn = New ADODB.Connection
   With cnn
      .Provider = "Microsoft.Jet.OLEDB.4.0"
      .Open strDBPath
   End With

   ' カタログを開きます。
   Set cat = New ADOX.Catalog
   cat.ActiveConnection = cnn

   ' Procedures コレクションから Command オブジェクトを取得します。
   Set cmd = New ADODB.Command
   Set cmd = cat.Procedures(strQryName).Command

   ' パラメータ値を指定します。
   With cmd
      .Parameters(strParamName1) = varParamValue1
      .Parameters(strParamName2) = varParamValue2
   End With

   Set rst = New ADODB.Recordset
   With rst
      ' 前方スクロール、読み取り専用 Recordset オブジェクトを使用して Command を開きます。
      .Open Source:= cmd, _
         CursorType:=adOpenForwardOnly, _
         LockType:=adLockReadOnly

      ' [デバッグ] ウィンドウにレコードを表示します。
      Do While Not .EOF
         For Each fld In rst.Fields
            Debug.Print fld.Value & ";";
         Next
         Debug.Print
         .MoveNext
      Loop

      ' Recordset オブジェクトを閉じます。
      .Close
   End With

   ' 接続を閉じ、オブジェクト変数を破棄します。
   cnn.Close
   Set rst = Nothing
   Set cnn = Nothing
End Sub

たとえば、Recordset オブジェクトを使用して Northwind データベースの Country クエリで Employee Sales を開き、パラメータ値を渡すには以下のコードを使用します。

  RunParamQuery "c:\Program Files\Microsoft Office\Office\Samples\Nwind.mdb", _
   "Employee Sales by Country","[Beginning Date]",#8/1/96#,"[Ending Date]",#8/31/96#

RunParamQuery プロシージャは、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH14 サブフォルダに収録されている DataAccess.mdb サンプル ファイルのOpenRecordset モジュールにあります。

Command オブジェクトの Execute メソッドの Parameters 引数でパラメータ値を指定することによってコードの行数を少なくすることが可能です。

  ' パラメータ値を指定します。
With cmd
   .Parameters(strParamName1) = varParamValue1
   .Parameters(strParamName2) = varParamValue2
End With

Set rst = New ADODB.Recordset
With rst
   ' 前方スクロール、読み取り専用 Recordset オブジェクトを使用して Command を開きます。
   .Open Source:= cmd, _
      CursorType:=adOpenForwardOnly, _
      LockType:=adLockReadOnly

これは、以下の行に置き換えることが可能です。

  Set rst = New ADODB.Recordset
' Command を実行し、パラメータに値を渡します。
Set rst = cmd.Execute Parameters:=Array(varParamValue1, varParamValue2)

ADOX コードを使用しなくても Command オブジェクトをデータベースに接続し、その CommandText プロパティをクエリの名前に設定してパラメータ クエリを実行することもできます。この場合、Microsoft Jet 4.0 OLE DB プロバイダのプロバイダ別の Jet OLEDB:Stored Query プロパティを True に設定し、コマンド テキストがストアド クエリの名前であることを示す必要があります。既定では、Microsoft Jet 4.0 OLE DB プロバイダは CommandText を SQL 文字列であると認識します。ADOX コードを使用する前の例では、Procedures または Views コレクションからクエリが取得されると自動的にストアド クエリと認識されるので、この設定は必要ありません。次のプロシージャは ADOX コードを使用せずにパラメータ クエリを実行する方法の例です。

  Sub RunParamQueryNoADOX(strDBPath As String, _
                        strQryName As String, _
                        varParamValue1 As Variant, _
                        varParamValue2 As Variant)
   Dim cnn As ADODB.Connection
   Dim cmd As ADODB.Command
   Dim rst As ADODB.Recordset
   Dim fld As ADODB.Field
   
   ' 接続を開きます。
   Set cnn = New ADODB.Connection
   With cnn
      .Provider = "Microsoft.Jet.OLEDB.4.0"
      .Open strDBPath
   End With

   ' コマンドを作成します。
   Set cmd = New ADODB.Command
   Set cmd.ActiveConnection = cnn
   With cmd
      .Properties("Jet OLEDB:Stored Query") = True
      .CommandText = strQryName
   End With
   
   ' コマンドを実行し、パラメータに値を渡します。
   Set rst = New ADODB.Recordset
   Set rst = cmd.Execute(Parameters:=Array(varParamValue1, varParamValue2))
      
   With rst
      ' [イミディエイト] ウィンドウにレコードを表示します。
      Do While Not rst.EOF
         For Each fld In .Fields
            Debug.Print fld.Value & ";";
         Next
         Debug.Print
         .MoveNext
      Loop
   
      ' Recordset オブジェクトを閉じます。
      .Close
   End With
   
   ' 接続を閉じ、オブジェクト変数を破棄します。
   cnn.Close
   Set rst = Nothing
   Set cnn = Nothing
End Sub

このプロシージャを使用して Northwind データベースの Country クエリで Employee Sales を開くには、パラメータ名に渡す必要はありません。パラメータ値にのみ以下のように渡します。

  RunParamQueryNoADOX _
   "c:\Program Files\Microsoft Office\Office\Samples\Nwind.mdb", _
   "Employee Sales by Country",#8/1/96#,#8/31/96#

RunParamQueryNoADOX プロシージャは、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH14 サブフォルダに収録されている DataAccess.mdb サンプル ファイルの OpenRecordset モジュールにあります。