excel vba で postdata.mdbのpostレコードから条件に合うデータを抽出しようとしています。
数日間、いろいろ調べていますが分かりません。
おそらく、SQLの部分だと思うのですが・・・
adoは初めて使う素人なので教えていただけないでしょうか。
On Error GoTo ErrGyo
Set cn = New ADODB.Connection
cn.Provider = "Microsoft.Jet.OLEDB.4.0"
cn.Open ThisWorkbook.Path & "\postdata.mdb"
Dim Rs As ADODB.Recordset
Dim SQL As String
Dim T_ken As String
Dim T_si As String
Dim T_mati As String
Dim i As Long
T_ken = TextBox1.Value ’フォームにテキストボックス
T_si = TextBox2.Value
T_mati = TextBox3.Value
SQL = "SELECT * FROM post WHERE ken like '" & T_ken & "' and si LIKE '" & T_si & "' and mati LIKE '" & T_mati & "'"
Set Rs = New ADODB.Recordset
Rs.Open SQL, cn, adOpenForwardOnly, adLockReadOnly
MsgBox Rs.RecordCount ’ここでチェックすると -1 となる???
If Rs.RecordCount = 0 Then
MsgBox "該当するレコードは見つかりませんでした。", vbInformation
Else
For i = 1 To Rs.RecordCount
Cells(i, 1) = Rs!num
Cells(i, 2) = Rs!ken
Cells(i, 3) = Rs!si
Cells(i, 4) = Rs!mati
Rs.MoveNext
Next
End If
Rs.Close: Set Rs = Nothing
cn.Close: Set cn = Nothing
Exit Sub
ErrGyo:
MsgBox "postdataへの接続に失敗しました", vbCritical
>adOpenForwardOnly
このモードではバッファリングしないので、
RecordCountは信用できません。というか、
RecordCountは使うべきではありません。
全レコードを読み込むまで正確ではないからです。
Rs.EOFを参照しましょう。
レコードセットを開き、直後にEOFならレコード無しです。
If Rs.EOF Then
MsgBox "該当するレコードは見つかりませんでした。", vbInformation
Else
i = 0
Do Until Rs.EOF
i = i + 1
Cells(i, 1) = Rs!num
以下略
Loop
End If
Rs.Close
質問者
お礼
ありがとうございました。
ken like '" & T_ken & "%" & "'
でOKでした。
質問者
補足
早速の回答ありがとうございました。
SQLの部分は誤っていなかったのですね。
上記で上手く動きました。
ただ、完全一致のデータのみの出力となってしまいました。
ワイルドカード%を使用すれば良いのでしょうが、
ken like '" & T_ken% & "' ではダメでした。
よろしかったら、教えてもらえませんか?
基本的なことで申し訳ないですが、よろしくお願いします。
お礼
ありがとうございました。 ken like '" & T_ken & "%" & "' でOKでした。
補足
早速の回答ありがとうございました。 SQLの部分は誤っていなかったのですね。 上記で上手く動きました。 ただ、完全一致のデータのみの出力となってしまいました。 ワイルドカード%を使用すれば良いのでしょうが、 ken like '" & T_ken% & "' ではダメでした。 よろしかったら、教えてもらえませんか? 基本的なことで申し訳ないですが、よろしくお願いします。