• ベストアンサー

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

  • ネットワーク上のmdbファイルへのアクセスについて

    WINXP、VB2008でデータベースソフトを作成しています。 VB2008で作成したソフトからネットワーク上のデータベース(マイクロソフトACCESSのMDBファイル)にアクセスし、ソフトのデータグリッドビューに表示するのですが、毎回ネットワーク上のMDBファイルにアクセスしているため、データグリッドビューへの表示が遅れます。 こういった場合、どの様に作れば表示が遅れないようになるでしょうか?

  • Access2002 MDBファイルがどうしても開けない

    お世話になります。大変困ってしまいました。 いつも使用しているMDBファイルが、開くことも最適化も修復もエクスポートもできなくなってしまいました。 (WinXP Professional Version2002 SP2、Access2002 SP3です) このファイルは何日か使用しているとすぐ2G近い容量になってしまうので、こまめに最適化をしていたつもりだったのですが、今日最適化時に「引数が無効です」という表示が出て、一応最適化は最後までいったものの、それ以降は前述のような状態です。 以前にも同じような状態になったことがあり、空のMDBを作成してそこへインポートする、という手段で対応できたのですが、今回はインポートしようにもそのファイルを選択してもインポートウィザードすら開かない有様です。 この状態から、テーブルの復旧、それがかなわなければせめてクエリだけでも復旧させたいのですが、どなた様かぜひともご教授くださいませ。

  • VB.NET配布時のmdb・accdbのライセンス

    VB.NET(VS2010)で開発しています。 配布時にmdb又はaccdbも一緒に配布したいのですがライセンスは大丈夫でしょうか? mdbは大丈夫そうなのですが・・・・。 配布先のPCにはAccessはインストールしません。 ランタイムもインストールしません。 また配布できる場合、最適化とか更新クエリとかVB側から可能でしょうか?

  • VBからサーバ上のAccess mdbにアクセスする方式について

    クライアントのVBアプリからサーバ上のAccess mdbにアクセスしたいのですが、 データベースがAccessの場合、データを丸ごとクライアント側に持ってきて、クライアント処理になってしまうと聞きました。 サーバ上でデータセットを作成してクライアントに渡す方法があれば教えてください。 よろしくお願いします。

  • アクセスMDBファイルが壊れた

    アクセスMDBファイル(access2000)が壊れたようでテーブルを開こうとすると下記のようなメッセージが出ます。(これは、このデータベースからデータを拾っているaspファイルの一部のようです。)そのままOKを押すと開けることもあれば、開けないこともあります。 #テーブルをコピーしてもだめ #「修復」をしてもだめ #MDBファイル全体をコピーしてもだめ #あとの手を思いつきません。 ----ここからメッセージ---- クエリ式 'szObject = wszTableName OR szReferencedObject = wszTableName' の 構文エラー

  • VBからACCESSクエリーの呼びかた

    こんにちは、VB(2003)とACCESS2000でプログラムを作成しております。 ACCESSの知識は少しあるのですが、VBが苦手です。 VBからACCESSのクエリを呼ぶにはどのようにしたら良いでしょうか? また、ACCESSのクアリの検索条件に[質問を聞く]とか入力すると ACCESSのクエリの検索条件を自分で指定できますが、VBからこの [質問を聞く]の部分は入力できるのでしょうか? この辺が、できなくて困っております。 経験がおありのかたが いらっしゃいましたら、 教えていただけると、ありがたいです。 よろしく、おねがいします。

  • Accessのクエリを、別のmdbファイルとして書き出す方法

    今日は。いつも助けて頂いております。 Accessの選択クエリで、必要なデータを抽出し、 それを別のフォルダに、新規のmdbファイルとして 書き出したいと思っています。 たぶん、作成した選択クエリを、エクスポートするときに保存形式と保存する場所を指定すれば手動でできるのだと思いますが、 これを自動化する方法はありますか?

  • Access内の任意のクエリを指定して起動する

    「ツール」→「起動時の設定」をしておくと、Accessを起動するときに、開くフォームやクエリを指定できますが、 そうではなく、任意のクエリを指定してAccessを起動させることはできないでしょうか? 目的としては、 sample.mdbのなかに ・ユーザ一覧を出すクエリ ・本日の新規登録者を出すクエリ ・今月の新規登録者を出すクエリ があります。 すでにあるホームページからリンクを張って、これらのクエリの結果がそのまま見られたらいいなと思うのです。 イメージとしては file://C:\sample.mdb とするときの引数を変えたら 指定したクエリが起動するといいな、という感じです。 ご存知の方いらっしゃいましたらご教授ください。 よろしくお願い致します。

  • ACCESSのmdbファイルが壊れました・・・

    アクセスでmdbファイルを起動中にPCがフリーズしてしまい,再起動をさせました。 その後,mdbファイルを起動させようとしたところ, 「修復が必要であるか,データベースファイルではありません。データベースを開いているときに,いずれかのユーザーがACCESSを終了しました。修復しますか?」 というエラーメッセージが出ます。 当然修復を選択したのですが,すると修復中にAccessが強制終了してしまいます。 なお,そのmdbファイルと同一フォルダー上にmdbファイルと同一名のaccess.lockfile.9という形式のファイルが1つ存在します。 このような状況の場合,修復は可能なのでしょうか? ファイルの一部分でも復活させたいのですが・・・。 よろしくお願いします。 なお,OSはwin2000 pro,ACCESSは2000です。 よろしくお願いします。

  • vb2005でmdbを読み込みmdbに書き出したい

    よろしくお願いします。windowsxp,access2003,vb2005express エディションを使用して、現在、勉強中です。 早速質問ですが、ADO・NETを使ってA_MDBをvb2005に読み込んで,その内容をB_MDBに書き込みたいのですがその方法が分かりません 例えば、A_MDBのA_TABLEには単価と数量が有ります。仮に10レコードがあるとします、このA_TABLEを読み込んで、単価と数量を 掛けて金額を計算し、B_MDBのB_TABLEに単価、数量、金額の各項目を書き込むという感じです。A,B両MDBは作成済です。あまり上手く 表現できませんがよろしくお願いいたします。

専門家に質問してみよう