• ベストアンサー

VBのソース上からAccessのmdbファイルのクエリを呼び出す

Accessのmdbファイルにクエリを登録したのですが、これをVB側から呼び出すやり方がわかりません。どなたか教えてもらえないでしょうか? あと、引数がついた場合もお教え願いないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.1

参照設定でMicrosoft DAO3.5 ObjectLibraryを設定して Private Sub cmd1_Click() Dim db As DAO.Database Dim qd As DAO.QueryDef Dim rs As DAO.Recordset Set db = DBEngine.OpenDatabase("フルパス\ファイル名.mdb") 'DBに接続する。 Set qd = db.QueryDefs("クエリ名") 'クエリーを呼び出す   qd.Parameters("パラメタ名").Value = 値 'パラメータ名を指定して値を設定 Set rs = qd.OpenRecordset 'クエリの結果のレコードセットを得る End Sub これで良いと思いますが。

saimon296
質問者

補足

Set qd = db.QueryDefs("クエリ名") の箇所がVB上で認識されてないみたいなんですが? ちなみに言い忘れましたがDAOを使っています。 それとまた質問で申し訳ないんですが、引数のあるクエリの書き方ってどういう風に書くんでしょうか?パラメータの引き渡しの方法が見たことないのでよくわかりません。 以下は私の今現在、使えそうだなと思ったコードを順序立ててみました(これはDBへの書き込みを想定しています)しかしこれにはクエリ名を指定するコードが抜けているので悩んでいます。 Dim db As dao.Database Dim qd As dao.QueryDef Set db = OpenDatabase(cststrDBPath) Set db = DBEngine.Workspaces(0).Databases(0) Set qd = qd.Execute(dbDenyWrite)   ↑あるいは↓(この文は自分でもよくわかっていません) Set qd = qd.OpenRecordset(dbOpenDynaset, dbSeeChanges) db.Close: Set db = Nothing

その他の回答 (1)

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

DAOでSet qd = db.QueryDefs("クエリ名")でクエリを呼び出せるはずなのですが・・。 qd = db.QueryDefsでクエリを呼び出しパラメタが必要で聞いてきた時にqd.Parametersで値を設定してあげれば良いはずなのですが。 DatabaseオブジェクトのOpenRecordsetメソッドをSQL文を引数として実行すればその結果がレコードセットとして取得できます。 参照設定でADOのままDAOを開こうとしてませんか? ADOの設定Microsoft ActiveX Data Object ?.?Libraryをはずして試してみては?

saimon296
質問者

お礼

Set qd = db.QueryDefs("クエリ名")でクエリ名の指定はできました。ありがとうございます。 さっきの質問の続きですが、Access側で登録されている追加クエリの記述で、引数がパラメータとして渡されるコードが必要なのかと思っていましたが(SQLServerのストアドみたいに)、クエリ側がVBからパラメータを受け取るのに、別に特に何もコードを記述しなくていいことがわかりました。VB側からは必要みたいでしたが。 Accessのクエリはこんな記述でいいんですね。 クエリ内SQL: INSERT INTO DATA_TABLE ( CODE, MONEY, [KEY] ) VALUES (P1, P2, P3); ついでにVB側コード上での呼び出し(一部省略): Set qd = db.QueryDefs("INSERT_QUERY") qd.Parameters("P1") = Text1.text qd.Parameters("P2") = Text2.text qd.Parameters("P3") = Text3.text qd.Execute (dbDenyWrite) とりあえずアクセスに登録されているクエリをVBのコード上から実行することに成功しました。ありがとうございます。 ところで全く別の質問なんですが、 Set db = DBEngine.Workspaces(0).Databases(0) これってあってもなくてもコンパイルが通ったのですが必要なものなんでしょうか?

関連するQ&A