

Excel VBA で、ADOを用いてAccess のデータを検索するにはどうしたらいいですか。
やりたいこと
検索結果を、Excel のセルにコピーすること。
ソースコード
'MDBファイルに接続します
Set db = New ADODB.Connection
db.Provider = "Microsoft.Jet.OLEDB.4.0"
db.Open "C:\Database\test.mdb"
'レコードセットを開きます
Set rs = New ADODB.Recordset
'テーブルを開きます
rs.Open "PT_MST", db, adOpenForwardOnly, adLockReadOnly
findName = ws.Cells(i, 1) & ws.Cells(i, 2)
Do
' rs.Find "[S_NUM]='" & findName & "'"
rs.Find rs.Fields(1).name & " Like '20k%'" ← ここで、サポートしていない旨のエラーが出る。
If Not (rs.EOF) Then
Debug.Print rs.Fields(1).Value
Else
Exit Do
End If
rs.MoveNext
Loop Until rs.EOF
'閉じる
rs.Close
db.Close
'終了処理
Set rs = Nothing
Set db = Nothing
どう直したら、検出結果を取得できますか。
ご教示下さい。
No.1ベストアンサー
- 回答日時:
よくわかんないけど、オイラだったら、
findName = ws.Cells(i, 1) & ws.Cells(i, 2)
strSQL = "SELECT * FROM PT_MST WHERE S_NUM ='" & findName & "' and FieldName** like '20k%'"
rs.Open "SELECT * FROM PT_MST WHERE S_NUM ='" ", db, adOpenForwardOnly, adLockReadOnly
do
if rs.eof then exit do
debug.print rs.Fields(1).Value
rst.movenext
Loop
のように、対象レコードでレコードセットを作るかな。
FieldName** は実際のフィールドネームを使ってください。
ありがとうございます。
結果として次のコードにしました。
'テーブルを開きます
findName = ws.Cells(i, 1) & ws.Cells(i, 3)
strSQL = "SELECT * FROM PT_MST WHERE S_NUM ='" & findName & "'"
rs.Open strSQL, db, adOpenForwardOnly, adLockReadOnly
Do
If rs.EOF Then Exit Do
Debug.Print rs.Fields(1).Value
rs.MoveNext
Loop
No.4
- 回答日時:
より引用。
<引用1>
注意 Find メソッドを呼び出す前にカレント行の位置が設定されていない場合は、エラーが発生します。Find メソッドを呼び出す前に、MoveFirst などの、行の位置を設定するメソッドを呼び出す必要があります。
<引用2>
比較演算子に "like" を使用する場合、文字列値にアスタリスク (*) を含めると、1 つまたは複数の文字または部分文字列を検索することができます。
<引用おわり>
まず、<引用1>に対応できていません。
Do loopの処理をする前に
rs.MoveFirst
するとどうなりますか?
また、<引用2>を参照してほしいのですが、
rs.Find rs.Fields(1).name & " Like '20k%'"
は、%がエラーになっているか、「20k%」という文字列を探すだけになります。
(ADOのFILTERと違って、ADOのFINDでは、%は、部分文字列を検索する意図では使えないはず。)
rs.Open "PT_MST", ・・・
は、JETでaccessのデータベースを参照しているので
select * from PT_MST
と同じ動きをしたと思います。
## なんで、Findを使おうとしているか分りませんので、あえてお薦めはしませんが、
## Find使うよりFilter使ったほうが、それより、
## rs.Open でselect文を書いたほうがより使いやすいと思いますが。
No.3
- 回答日時:
>rs.Open "PT_MST", db, adOpenForwardOnly, adLockReadOnly
の"PT_MST"の部分には SQL が入るべきなので、この文がエラーしていそう。
なので、 rs オブジェクトが作成されてないと思われる。
その結果
>rs.Find rs.Fields(1).name & " Like '20k%'"
の rs.Fields(1).name が無効と言われているのではないかな?
他の回答にもあるように
do_loop の前に select を投げて、
そのあと、do_loop の中で結果を順に読んでいく様にすべきですね。
ありがとうございます。
>do_loop の前に select を投げて、
>そのあと、do_loop の中で結果を順に読んでいく様にすべきですね。
知らなかった。
勉強になりました。 (゜゜)(。。)ペコッ
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックスに入れた内容...
-
PDOで取得される値がすべて文字...
-
エラー3011
-
SQL文の実行に失敗しました???
-
VBAをつかってクエリの情報を抽...
-
php複数キーワード検索
-
mysqlのinsert文について、ご指...
-
MySQLでデータベースにデータin...
-
mysql_queryが動かなくて困って...
-
stringaddslashes 半角¥が消える
-
PHP+MySQLでの検索結果の横並び...
-
C#でDBの特定列をUpdate
-
<select> の<option value>が指...
-
Pro*Cの構文エラー
-
大変困っております。PHP ...
-
insert1つの処理でもトランザ...
-
クエリObjectをforeachで回す時...
-
MySQLでのUNIQUE制約の削除
-
WHILE中で前と重複したら間引く...
-
Q&Aサイトを作成していてURLの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー3131 FROM 句の構...
-
テキストボックスに入れた内容...
-
VBAをつかってクエリの情報を抽...
-
SQL文が実行できません
-
Accessのテーブルへ複数の主キ...
-
エラー3011
-
時刻型にNULLでセットしたい
-
codeigniter 複数モデルでトラ...
-
PEAR でprepareメソッドがエラーに
-
データフォームウィザードで追...
-
LocalのNotesメールDBをVBAで参...
-
ASPでRecordCountが使用でき...
-
VB.NET
-
ADOを使いDBへ読み書きしたい
-
array_mapを使ったエスケープ処理
-
単純ですが、意外と穴?なデー...
-
PHPからMySQLを操作
-
ユーザー定義関数の意味
-
このエラーの意味は?
-
SQL文の実行に失敗しました???
おすすめ情報