• ベストアンサー

クエリーの有る無し判定

VBAでクエリーを作成するときに、特定の名前のクエリーの有無を判定する方法は有るのでしょうか。 また、既存と同名のクエリーを作成したときに、エラーを表示させずに上書きする方法が有れば併せてご教示下さい。 ちなみにメッセージを非表示にしても、やっぱりエラーが表示されます。また、エラー処理では、複数のパターンに対応できないので、エラー処理以外の方法を教えてください。

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

  • ベストアンサー
  • komet163
  • ベストアンサー率51% (22/43)
回答No.1

こんにちは。わたしの独学の範疇で書きます。 前提条件は、Excel2000、Access2000、ADOでコネクションを作成します。 参照設定は以下で、*.* はバージョンです。 'Microsoft ActiveX Data Object *.* Library 'Microsoft ADO Ext. *.* for DDL and Security Sub test() Dim adoCN As ADODB.Connection Dim cat As ADOX.Catalog Dim tbl As ADOX.Table Dim proc As ADOX.Procedure Set adoCN = New ADODB.Connection With adoCN .CursorLocation = adUseClient .ConnectionString = "/*接続文字列*/" .Open End With Set cat = New ADOX.Catalog Set cat.ActiveConnection = adoCN ’アクセスで作成したクエリから探す For Each tbl In cat.Tables With tbl Select Case .Type Case "TABLE" Case "LINK" Case "VIEW" If .Name = "/*クエリ名*/" Then '/*発見処理*/ MsgBox "Hit" Exit For End If End Select End With Next ’コードで作成したクエリから探す For Each proc In cat.Procedures With proc If .Name = "/*クエリ名*/" Then '/*発見処理*/ MsgBox "Hit" Exit For End If End With Next Set cat = Nothing adoCN.Close Set adoCN = Nothing End Sub 検索が2段構えになってます。SQL文で作成したクエリが、 1段目で拾えなかったので2段目を追加してます。 既存と同名のクエリは作成できないと思います。 上記の発見処理に削除を追加して、新規に同名で作成してみては?

miwaharu
質問者

お礼

早速の回答ありがとうございました。 ADOは使ったことがないのですが、同名クエリーを 見つけて削除するという流れはDAOでも同じですよね。 早速試してみます。

その他の回答 (1)

回答No.2

昔、使っていたやつです 参照設定でDAOが必要です '------------------------------------------------------------- 'クエリ更新 ' '------------------------------------------------------------- Public Sub UpdateQuery(strQueryName As String, strSQL As String)   Dim Dbs As DAO.Database   Dim Qdf As DAO.QueryDef      'データベース設定   Set Dbs = CurrentDb      'QueryDefs コレクションを更新する   Dbs.QueryDefs.Refresh      'クエリが存在する場合は、削除する   For Each Qdf In Dbs.QueryDefs     If Qdf.Name = strQueryName Then       Dbs.QueryDefs.Delete Qdf.Name     End If   Next Qdf      'クエリ作成   Set Qdf = Dbs.CreateQueryDef(strQueryName, strSQL)      Set Dbs = Nothing    End Sub

miwaharu
質問者

お礼

回答ありがとうございます。 DAOのほうが使い慣れているので、 身近に感じました。 肝の部分は、FOR NEXTで検索するところですよね。#1と併せて参考にさせていただきます。

関連するQ&A

  • Access VBA 全クエリ 繰り返し

    Access VBAについてお尋ねさせていただきます。 Access VBAを利用して、以下の繰り返し処理を実行したいです。 (1):レコードの有無にかかわらず、すべてのクエリの名称だけを配列に取得する繰り返し処理 (2):レコードの有無にかかわらず、すべてのクエリを開き、各クエリのレコード件数を配列に取得する処理 どのように記述すればよろしいでしょうか?

  • 【アクセス】IIf複数条件の記載方法

    アクセスのIIf複数条件の記載方法をお伺いできれば助かります。 3つのクエリがあります。 商品ごとにクエリを分けていますが、既存顧客かどうかの判定をつけたいのです。 Q1・2・3 ともに「商品購入有無」というフィールドがあります。 商品購入が無い方は空白にしています。 Q1に判定フィールドを作成し、Q1では商品購入が無いが、Q2・Q3で商品購入がある方を既存と判定したいです。 Q2,Q3は別商品の商品購入有無のリストです。 初心者で大変困っております。何か良い方法はありますでしょうか。

  • Accessのクエリ画面のリクエリーの仕方について

    Access2003です。宜しくお願いします。 VBAでクエリを作成・削除しているのですが、 作成するとデータベースにはまだ表示されず、 F5(ファンクションキー)を押してリロードさせると表示されます。 (削除はVBAで処理するだけでデータベースからも消えています) 作成した時もVBAのみでちゃんと表示されるように リフレッシュ?リクエリー?させたいのですがやり方がわかりません。 ご存知の方宜しくお願いします。

  • accessで作成したクエリーをエクセルに出力する時の問題

    アクセスで作成したクエリーをエクセルに出力します。フォームに作成したコマンドボタンを押すと、マクロが起動して、マクロで指定してあるフォルダにエクセルが出力されます。出力先にすでに同名のブックがある場合、「すでファイルが存在しています。上書きしますか。」と、いうメッセージが表示されますが、このメッセージを表示せずに無条件ですでに存在するファイルに上書きをしたいと思います。 メッセージを表示しない方法はありますか。一番いいのは,マクロ内でこのメッセージの非表示を指定できるのがいいのですが。 よろしくお願いします。

  • Access クエリの結果が0件だった場合、エラーを表示させる方法

    選択クエリやパラメータクエリを実行し、その結果が0レコードだった場合、エラーを表示させ、クエリの実行を中止させる方法はありますか? VBAで作成可能な場合、どのような構文を書いたらよいのか、教えていただけると助かります!!

  • ExcelからAccessのクエリを呼び出したい

    約20,000レコードほどのデータを一気にExcelのVBA上の選択SQLでEditとUpdateで処理しようと思ったのですが、一気に処理できるレコード数に制約があるようでエラーになりました。 Access内のクエリだとOKみたいですがExcelからAccessのクエリを呼び出す方法がわかりません。 どうしたらいいのでしょうか? よろしくお願いします。 バージョンは2002です。

  • テーブル作成クエリを実行した時に出るメッセージを表示させたくない

    Access97を使用しています。  テーブル:T実績  テーブル作成クエリ:Q実績(←実行後は、T実績に上書きされる) Q実績(テーブル作成クエリ)を実行すると「既存の"T実績'テーブル'は、実行しようとすると削除されます。よいですか?」というメッセージが出ます。 そして、ここは常に「はい」を選択します。 そこで質問です。 この時に、このメッセージを表示させたくありません。 このメッセージを表示せずに、常に「はい」を選択して処理をする事はできないのでしょうか? マクロでいろいろ探してみたのですが、うまくいきません。 ご存知の方がいらしたら、教えてください!! 宜しくお願い致します。

  • VBAからADOを使ってクエリのクエリを作成したい

    VBAからADOを使ってクエリのクエリを作成したい ADO初心者です。 VBA側で入力された引数を元に、ADOを使ってあるmdbファイルにあるクエリ(1)の抽出条件を変更した上で(抽出条件はVBA側の引数によって毎回変わります)、クエリ(1)の中から重複したレコードを抽出するクエリ(2)を作成したいと考えています。クエリ(1)並びにクエリ(2)をそれぞれ単独で作成する事は出来たのですが、クエリ(1)の結果を反映したクエリ(2)を作成する方法が分かりません。 なお、クエリ(1)の抽出条件変更は、RecordsetオブジェクトのOpenメソッドを使って行っています。何となくこれはレコードの更新は出来てもクエリの更新は出来ないような気がしており、それが原因のような気がしているのですが、クエリの更新をしたい場合はどうすればよろしいでしょうか?

  • ACCESSのクエリの中でのクエリ指定

    ACCESSのクエリで複数テーブルを結合させ明細表示させました。 その明細作成クエリーを更にそのクエリをテーブルと指定して 合計のクエリを作成して結果を確認すると合計が違っていました。 確認の為、集計を取りその明細クエリーをクエリー上でテーブル 指定してみたところ、元の明細クエリーのみの場合とレコード数 がかわっって表示されまました。 クエリーのテーブルにクエリを指定するのはNGなのでしょうか。 何方かなぜそうなるのか、また、正しい方法があれば教えてください。 宜しくお願いします。

  • VBAで選択クエリを実行したらデータシートが表示されてしまう。

    お世話になってます。 VBA初心者なのですが・・・。 Accessで選択クエリを作成してVBAモジュール内で その選択クエリを呼び出したところ、選択クエリの実行結果 (データシート?)が表示されてしまうのですが、 それを表示したくないのですが、何か方法はあるのでしょうか? 調べているのですがいまひとつ、調べ方がよく分からず ここで質問させて頂きました。 よろしくお願い致します。

専門家に質問してみよう