• ベストアンサー

ACCESSで別DBにあるクエリを実行する

こんにちは。 いつも良い回答ありがとうございます。 MS-ACCESSで別DBにあるクエリを実行する方法を教えて下さい。 メインDB.MDB <-- サーバー上にあります サブDB.MDB <-- ローカルドライブにあります サブDB.MDB内にあるクエリをメインDBから実行する方法がありましたら教えて下さい。

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

  • ベストアンサー
回答No.1

念のため、 A) Server-A 上には "メインDB.mdb" がある。 B) PC-A 上には "サブDB.mdb" があり、"サブDB.mdb" 内にはクエリ "q01" がある。 C) "q01" は "サブDB.mdb" に保存されているデータだけを操作対象としている。 D) ユーザーは PC-A にインストールされている Access から Server-A 上の "メインDB.mdb" を開いて作業を行う。 E) (D) の作業の中で "メインDB.mdb" は "サブDB.mdb" を開いて "q01" を実行する。 (C) の所、ご確認ください。 ADO を使って相手の DB のデータを登録・編集・削除しgたり、ADO のレコードセットとして選択結果を受け取る程度であれば DSN を定義すればできます。 PC-A [コントロール パネル]-[パフォーマンスとメンテナンス]-[管理ツール]-[データ ソース(ODBC)] を開く。 [システム DSN] タブを選択。 [追加] ボタンをクリック。 ドライバ一覧から「Microsoft Access Driver (*.mdb)」を選択して [完了] をクリック。 [データ ソース名] に適当な名前を入力。(例として subDbAccess とします) [選択] をクリックして "サブDB.mdb" を選択。 [OK] をクリックして <ODBC Microsoft Access セットアップ> ダイアログを閉じる。 [OK] をクリックして <ODBC データ ソース アドミニストレータ> ウィンドウを閉じる。 サブDB.mdb には "q01" という名前の選択クエリがすでにあるものとします。 以下、メインDB.mdb の適当な場所に記述 Dim con As New ADODB.Connection con.ConnectionString = "DSN=subDBAccess;" con.Open Dim cmd As New ADODB.Command cmd.ActiveConnection = con cmd.CommandText = "q01" cmde.CommandType = adCmdStoredProc Dim rst As New ADODB.Recordset rst.CursorType = adOpenForwardOnly rst.LockType = adLockOptimistic Set rst = cmd.Execute Do While Not rst.EOF  Debug.Print rst.Fields("ID").Value  Debug.Print rst.Fields("firstName").Value  Debug.Print rst.Fields("lastName").Value  rst.Movenext Loop rst.Close con.Close Set rst = Nothing Set cmd = Nothing Set con = Nothing クエリ q01 を実行した結果が rst に ADO のレコードセット オブジェクトとして格納されています。 結果が不要で、実行させっぱなしなクエリな場合は 単に cmd.Execute だけでもいけます。

kunisada
質問者

お礼

丁寧な回答ありがとうございます。 教えていただいた内容に沿ってまずはやってみます。

関連するQ&A

  • 各DBのaccessマクロを1回で実行したい

    教えてください・・・ 3つのDBでそれぞれマクロを作成しました。 マクロは「クエリの実行」を指定しているだけのものです。 これを1回の実行で流れるように連結させたいのですが、 どのようにすればよいのでしょうか? VBSでもVBAでも実行方法は問いません。 そしてmdbではなくaccdbです。 さっぱりわからなくなってきてしまいました・・・。スランプです(><) すみませんが、初心者レベルのご教示をお願いします・・・

  • アクセスVBAでの別アクセス呼び出しの記述について

    作成したいテーブルが大きすぎて、2Gをあっという間に超えてしまいます。 なので、別のアクセスMDBも併用しつつ処理を実行しようかと思うのですが、 下記のように書いています。すると、まず、一つ目のDB(VBAを書いているほうのDB)でのtestクエリは実施され、TEST1DBが呼び出されるところまではいくのですが、TEST1DBにのっているtest2というクエリはうごきません。 どのように記述すればよいのでしょうか??ど素人でもうしわけありませんが、 どうぞよろしくお願いします。 Option Compare Database Sub test() DoCmd.OpenQuery "test" fl_name = "MSAccess C:\xx\test1.mdb" Call Shell(fl_name, 1) DoCmd.OpenQuery "test2" End Sub また、あわせて質問なのですが、 テーブル作成クエリなので、「テーブルが削除されます」とかがでます。 自動バッチにしたいので、いちいち確認しないでサクサクと次へ進んでほしいのですが 解決策はあるのでしょうか? よろしくお願いします あと、いつも迷うのですが、、アクセスのフォームとかを書くときに使っているVBAは、 カテゴリー選択にないので、、VisualBasicを選んでいいんでしょうか??

  • エクセルVBAでアクセスの更新クエリを実行

    エクセルVBAでアクセスの更新クエリを実行する方法はありますか? アクセスもエクセルも常に起動している状態です。 エクセルからアクセスの更新クエリを実行するコードを教えてください。 アクセスで実行するとしたら Sub test1() DoCmd.OpenQuery "更新クエリ" End Sub というコードになります。 できれば、ADODBを使ったやり方がいいのですが、 エクセルからアクセスのプロシージャーのtest1を呼ぶしかないのでしょうか?

  • アクセス2000でVBAを使ってクエリを実行したいのです

    Access2000でVBAを使っています。 Docmdでクエリを実行させたいのですが、 DoCmd.OpenQuery stDocName1, acNormal, acHidden とするとクエリの実行結果が表示されます。 クエリだけ実行されて実行結果を非表示にする方法は ありますでしょうか? Form1のコマンドボタンを押下後、クエリが実行されて 別のFormにデータ表示させたいので、なるべくクエリの実行結果を表示させたくないのです。 よろしくお願いいたします

  • Excel から Accessクエリーを実行したい

    下記のようなマクロを組んでMS Accessのクエリー結果をExcelに出力したいのですが「レコードがない」というエラーになります。正しいコーディングを教えてください。 Sub DataFromAccess() Dim AccessApp As Object Set AccessApp = CreateObject("Access.Application") myDBName = "C:\MyAccess.mdb" '出力先フルパス xlsName = "C:\Invoice.xls" With AccessApp .Visible = True .OpenCurrentDatabase myDBName, acViewNormal .DoCmd.OutputTo acOutputQuery, "クエリー名", acFormatXLS, xlsName, True .CloseCurrentDatabase .Quit End With Set AccessApp = Nothing End Sub

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

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

  • MS-query>カレントフォルダを変更したい

    すみません。急ぎの質問でお願いします。 アクセスでデータを作成して、エクセルのピボットテーブルで分析しようとしています。 1つのフォルダに3つファイルがあり、1:DB用MDBファイル 2:入力用MDBファイル 3:分析用XLSファイルとなっています。 いろいろな種類があり、それをフォルダごとに管理しています。 『原本』と呼ばれるフォルダがあり、新しい種類が出来るごとにフォルダをコピーして データを入力しています。 -+-原本フォルダ DB用MDB 入力用MDB 分析用XLS | +-Aフォルダ   DB用MDB 入力用MDB 分析用XLS | +-Bフォルダ   DB用MDB 入力用MDB 分析用XLS | +-Cフォルダ   DB用MDB 入力用MDB 分析用XLS アクセスは、起動時にマクロを入れて開いたフォルダからDB用MDBファイルに再リンクするようにしています。 エクセルはODBCで接続しており、MS-Queryを利用してピボットテーブルにて分析しています。 ここで、接続文字列がフォルダ毎に名称が変わるので、それをうまく指定できません。 開いたフォルダのDB用MDBにつなぐだけなのでエクセルのオプションにあるカレントフォルダを空白にしたのですが、MS-Queryには反映しませんでした。 すみませんが、『開いたフォルダのDB用MDBファイルにMS-Queryが接続する』良い方法を教えてください。よろしくお願い致します。

  • エクセルからアクセスの更新クエリを実行するコード

    アクセスなら 自身のデータベースの更新クエリを実行する場合は DoCmd.OpenQuery "Q更新クエリ" で出来ますが、 エクセルから、 D:\Access.mdbの"Q更新クエリ"を実行するには どうすればいいのでしょうか? ADOを使うのでしょうか? ヴァージョンは2003です。 よろしくお願いします。

  • MSアクセスのクエリで結果がおかしい

    アクセス2000で追加クエリを作成していますが、 クエリのデータシートビューで確認したレコードと 追加されたテーブルで確認したレコードが異なり、テーブルのデータが少なくなってしまっています。 条件としては、 クエリの参照元 SQLサーバからのリンクテーブル(レコード数で13万件程度) 追加先のテーブルはローカルのmdb内です たまたまかもしれませんが、今テストしているデータは、 クエリ上では、19件あるものの、実行しても9件しか追加されません。 原因としてありそうなものがわかる方がいれば、よろしくお願いします。

  • VBSでクエリを実行→クエリでテーブルが作れない

    いつも大変お世話になっております。 VBSで、 cn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=C:\Users\test1.mdb;" rs.Open "test1", cn こんなかんじでtest1クエリを実施しました。 test1クエリ内では、 select user into sinkitable where user >1 and xxxx というように、テーブルを作っています。 これを実行すると、select, update,insert,xxxしか使えません といったエラーがでます。 クエリでテーブルを作成すると、VBSでは実行できないのでしょうか? 初歩的で申し訳ありませんが、教えてください

専門家に質問してみよう