
テーブルを、たとえそれが存在しなくてもメッセージが出ないで、削除したい。
Access2007を使っています。仮にテーブルAとします。テーブルAが存在している場合は、drop tableなどで簡単に消せます。が、存在しない場合は、エラーまたはメッセージが出てしまいます。やりたいことは、テーブルAが存在してもしなくても、メッセージが出ないようにして、テーブルAが存在しない状態にしたいのですが。SQLビューで(または簡単に)実現する方法はあるのでしょうか?
初心者のため、些細なことでつまづいています。
No.3ベストアンサー
- 回答日時:
#2です。
少し説明しますと、ボタンクリック時に
関数funcTableExistsでシステムに登録されている
テーブルがあるかを確認し、あればTrueを無ければ
Falseを返します。つまり、
If funcTableExists("テーブル名") Then
はテーブルがあれば、
DoCmd.OpenQuery ("削除クエリ名")
を実行、すなわち 削除クエリ名 を実行する、
ということです。少々難しい
かもしれませんが、このようにして
Accessからのメッセージを回避します。
なお、
DoCmd.SetWarnings False
はアクションクエリの実行に伴うAccessからの
確認メッセージを回避し、
DoCmd.SetWarnings True
は確認メッセージの出力を元に戻しています。
No.5
- 回答日時:
#1、#2、#3 です。
説明が足りないような気がするので少し捕捉
しておきます。
Drop Tableを実行した場合、対象となるテーブルが
無い場合、SQLの中でテーブルが無い場合に対応は
できません。したがって、Drop Tableを実行する
場合に、テーブルが無いときにエラー表示が
されないようにするにはプログラムからDrop Tableを
実行するようにしてテーブルが無ければ実行しない、
あれば実行するというプログラムを組む必要が
あるために、#2のようなプログラムを提示しました。
簡単、というわけにはいかないのですが、どちらか
というと、このような場合の常套手段のような方法です。
以上です。
piroin654さん、なんども有り難うございました。とくに、ANO.3の丁寧なご回答に感謝致します。
VBAもよく知らない初心者であることを実感しました。
SQLクエリでは無理ということも了解しました。
現実には、私の質問内容のような要請は多いと思うのですが、Accessには当初からその機能がないということに、むしろAccessの設計自体に何か本質的な弱点があるのではないかとも思いました。まあ、MSに対する逆恨みかもしれませんが…
No.4
- 回答日時:
Access2007は持ち合わせておりませんので見当違いかも知れませんが
安直な方法は
Sub AAA()
On Error Goto ErrHndl
ここで処理
Exit Sub
ErrHndl:
End Sub
等のように逃げてしまえば良いのでは?
あるいは
DCount("*","MSysObjects","name='テーブルA' and type=1")
でゼロでなかったら・・・
Access2007だとセキュリティの面でで叱られるかも
そもそもシステムテーブルにMSysObjects が無かったりして (^^ゞ
もしくはテーブル名を取得しての処理かと。
以下はADOでテーブルが存在するかの関数です。
tblExist("テーブルA") で存在しなければ、False が返ります。
適宜加工してみてください。
Function tblExist(tblName As String) As Boolean
Dim adoCn As ADODB.Connection
Dim adoRs As ADODB.Recordset
Set adoCn = CurrentProject.Connection
Set adoRs = adoCn.OpenSchema(adSchemaTables, Array(Empty, Empty, tblName, "TABLE"))
If adoRs.EOF And adoRs.BOF Then
tblExist = False
Else
tblExist = True
End If
adoRs.Close: Set adoRs = Nothing
adoCn.Close: Set adoCn = Nothing
End Function
No.2
- 回答日時:
大いなる勘違いでした。
テーブルが無い場合でしたね。
以下のようにしないとメッセージは出ます。
フォームにボタンを一つ張り付け以下のコードを
フォームのコード表に張り付けて保存してください。
コマンド0_Click()のテーブル名と削除クエリ名は
使用しているテーブル名とクエリ名を入れてください。
コマンド0のボタン名は作ったボタンの名前に合わせて
ください。
なお、DAOを使用しているので、コード表のツール→参照設定
から、Microsoft DAO xx Objectlibrary にチェックを
いれてください。なお、xxは3.6のような数字です。
また、Microsoft ActiveX Objects xx Library にチェックが
入っていたらはずしてください。
Private Function funcTableExists(ByVal strTableName As String) As Boolean
Dim db As Database
Dim tdf As TableDef
Set db = CurrentDb
For Each tdf In db.TableDefs
If (tdf.Name = strTableName) Then
funcTableExist = True
Exit Function
End If
Next tdf
Set tdf = Nothing
db.Close
Set db = Nothing
End Function
Private Sub コマンド0_Click()
If funcTableExists("テーブル名") Then
DoCmd.SetWarnings False
DoCmd.OpenQuery ("削除クエリ名")
DoCmd.SetWarnings True
End If
End Sub
No.1
- 回答日時:
以下の方法。
(1)Officeボタン→Accessのオプションのボタンをクリック
(2)Accessのオプションのダイアログ詳細設定をクリック
(3)編集の確認の項のアクションクエリのチェックをはずす。
(4)OKをクリック
あるいは、
Private Sub コマンド0_Click()
Docmd.SetWarnings False
DoCmd.OpenQuery "削除クエリ名"
Docmd.SetWarnings True
End Sub
のように、フォームのボタンクリックで
行なう方法。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
下記の事を行うSQLがわかりませ...
-
Countと受付状態の表示に...
-
Accessでテーブル名やクエリ名...
-
Accessレコードの追加や変更が...
-
Accessでテーブルからテーブル...
-
フィールドサイズの変更方法に...
-
アクセスで消し込みがしたい
-
Accessクエリでの、LIKE条件
-
Accessで、複数のテーブルで随...
-
テーブル作成クエリで主キーを設定
-
ツリー構造をRDBで表現するには?
-
Accessでvlookupみたいなことは...
-
「直需」の意味を教えてください
-
Excel 2019 のピボットテーブル...
-
ACCESS検索★ある文字を複数のフ...
-
【Access】フォームで自動計算...
-
エクセルグラフの凡例スペース
-
Accessのクエリでデータの入力...
-
日本語のテーブル名、カラム名...
-
Access クロス集計クエリについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでテーブル名やクエリ名...
-
下記の事を行うSQLがわかりませ...
-
Countと受付状態の表示に...
-
Accessレコードの追加や変更が...
-
Accessの追加クエリで既存のテ...
-
Accessでテーブルからテーブル...
-
Accessでvlookupみたいなことは...
-
2つのテーブルを比較して一致し...
-
Accessクエリでの、LIKE条件
-
access テーブル内のレコード...
-
テーブルを、たとえそれが存在...
-
ACCESSのSQLで数値型に変換する...
-
デザインビューで、連結式 を...
-
ACCESSに同時アクセス(編集)を...
-
2つのテーブルAとBをマージ...
-
accessで指定期間の曜日カウン...
-
データベースで変更の多いテー...
-
INSERT時にデータ登録とmaxの発...
-
パススルークエリをテーブル作...
-
SQLで条件指定結合をしたいがNU...
おすすめ情報