プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (2件)

参照設定で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

これで良いと思いますが。

この回答への補足

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

補足日時:2005/05/11 15:22
    • good
    • 0

DAOでSet qd = db.QueryDefs("クエリ名")でクエリを呼び出せるはずなのですが・・。


qd = db.QueryDefsでクエリを呼び出しパラメタが必要で聞いてきた時にqd.Parametersで値を設定してあげれば良いはずなのですが。

DatabaseオブジェクトのOpenRecordsetメソッドをSQL文を引数として実行すればその結果がレコードセットとして取得できます。

参照設定でADOのままDAOを開こうとしてませんか?
ADOの設定Microsoft ActiveX Data Object ?.?Libraryをはずして試してみては?
    • good
    • 1
この回答へのお礼

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)
これってあってもなくてもコンパイルが通ったのですが必要なものなんでしょうか?

お礼日時:2005/05/12 16:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A