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

VBAでクエリーを作成するときに、特定の名前のクエリーの有無を判定する方法は有るのでしょうか。
また、既存と同名のクエリーを作成したときに、エラーを表示させずに上書きする方法が有れば併せてご教示下さい。

ちなみにメッセージを非表示にしても、やっぱりエラーが表示されます。また、エラー処理では、複数のパターンに対応できないので、エラー処理以外の方法を教えてください。

A 回答 (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
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
DAOのほうが使い慣れているので、
身近に感じました。

肝の部分は、FOR NEXTで検索するところですよね。#1と併せて参考にさせていただきます。

お礼日時:2005/03/29 17:39

こんにちは。

わたしの独学の範疇で書きます。
前提条件は、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段目を追加してます。

既存と同名のクエリは作成できないと思います。
上記の発見処理に削除を追加して、新規に同名で作成してみては?
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/03/29 17:34

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