既存のクエリを使用して 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 モジュールにあります。