EXCELをSQL文を使って検索しようとしているのですが実行時エラー3061、パラメータが少なすぎます1を指定してくださいと出ます。自分のコードのどこかがおかしいと思うのですが分かる方いましたら教えてくださいよろしくお願いします。環境はXPでVB6です。検索しようとしているのはIDで、K41B000のようなデータを検索しようとしています。
Dim ws As DAO.Workspace
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strXLSName As String
Dim strSQL As String
strXLSName = App.Path & "\test.xls"
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase(strXLSName, False, False, "EXCEL 8.0;HDR=YES;")
LabelCondition.Caption = searchNum
strSQL = "SELECT * FROM [Sheet1$] WHERE [ID] = " & searchNum
Debug.Print strSQL
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)
ただ単にSQLがおかしいのでは?
WHERE文を要チェキ!だと思います
searchNumが数値か文字列かを要確認!
その後記述方法要確認!(デバッグプリントしてるから見てみるべし)
早速の返信どうもありがとうございます。searchNumは数字とアルファベットの文字列です。デバッグプリントではstrSQLの値が
SELECT * FROM [Sheet1$] WHERE [ID] = K41B000
となっています。Where文がおかしいとの事なのですが、SQL文自体がおかしいという事でしょうか?
普通文字列を検索する時は
''や場合によっては""等でくくりませんか?
K41B000が項目名として取られてしまい
値がないよ!=パラメータがないよ!
と怒られていると思うのですが
>普通文字列を検索する時は
>''や場合によっては""等でくくりませんか?
ちょっと分かりにくい(『''(シングルクオーテーション2つ)』が『"(ダブルクオーテーション)』に見える)
ので補足ですが、SQL文で、どこからどこまでが『データとしての文字列』
を表すか?を指定するには『'(シングルクオーテーション)』を使います。
SELECT * FROM [Sheet1$] WHERE [ID] = 'K41B000'
となるように文字列編集してみてください。
葉月さんありがとうございます。
試しにstrSQL = "SELECT * FROM [Sheet1$] WHERE [ID] ='K41B000'"
と入れるとエラーもなく大丈夫なのですが、問題が一つありまして、それはこの''の中に変数であるsearchNumをどう入れるかという事なんですがどうすればいいのでしょうか?よろしくお願いします。
特攻隊長まるるうさん、補足ありがとうございます。
WHERE [ID] = 'K41B000'のシングルクオートの中に変数を代入すれば動く所までできました。シングルクオートの中に変数をどうにかして入れたいのですが方法をご存知でしょうか?よろしくお願いします。
要領は
strSQL = "SELECT * FROM [Sheet1$] WHERE [ID] = " & searchNum
と一緒です
strSQL = "SELECT * FROM [Sheet1$] WHERE [ID] = '" & searchNum & "'"
としてしまえばいいのです
シングルコーテーションも所詮は文字列なので連結処理するだけです
葉月さん、特攻隊長まるるうさん最後までありがとうございます。無事プログラムが出来ました。私はもっと勉強が必要ですね、将来ここでアドバイスできるようにもっと頑張ります。
ツイート | ![]() |