こんばんは。
アクセス2003です。
「Filter」を使うか「WHERE」を使うかべきかわからないので教えてください。
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Sub test1()
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & アクセスファイル名
rs.Open "SELECT * FROM Tテーブル WHERE 'フィールド1'='りんご", cn, adOpenKeyset, adLockOptimistic
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
End Sub
Sub test2()
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & アクセスファイル名
rs.Open "SELECT * FROM Tテーブル", cn, adOpenKeyset, adLockOptimistic
rs.Filter = "フィールド1 = " & "'" & "りんご" & "'"
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
End Sub
以上のふたつのステートメントは
Tテーブルのフィールド1にりんごの文字が入力されているレコート゛を抽出します。
いくつかこのような動作をするプログラムを書くのですが
どちらのほうがコート゛として適していますか?
WHEREを使うtest1の方がコート゛が短くなるからいいのでしょうか?
というのもいつかこのファイルを引き継ぐので他人が見てもわかりやすくしたいです。
よろしくお願い致します。
どちらでも結果は同じではないですか。
一端SELECTしたレコードをそれを対象にFilterをかけるのでしょうか。
処理時間を気にしてるのですか。それは私では判りませんが。
ーー
後者Filterに関して、私がテストしてみました。いま社員2.mdbを開いていて、社員3テーブルを対象にFilterしました。
>rs.Open "SELECT * FROM Tテーブル", cn, adOpenKeyset, の部分adLockOptimisticの"SELECT * FROM Tテーブル", は不要ではないですか。
私のテスト例
Sub test09()
Dim moji As String
Dim URL As String
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = CurrentProject.Connection
Set rs = New ADODB.Recordset
rs.Open "社員3", cn, adOpenStatic, adLockPessimistic
rs.Filter = "国語点数 <= 20"
'---------
If rs.RecordCount = 0 Then
MsgBox "該当するレコードは存在しません"
Else
Do
MsgBox rs.Fields("国語点数") & "ーー" & rs.Fields("氏名")
rs.MoveNext
Loop Until rs.EOF
End If
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
End Sub
お礼
わざわざテストありがとうございます。 どちらもかわらないのですね。 参考になりました。