テーブルを、たとえそれが存在しなくてもメッセージが出ないで、削除したい。
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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
デザインビューで、連結式 を...
-
Access 複数テーブルのレコー...
-
時間の足し算
-
SQLServerのデータをMDBファイ...
-
ACCESSに同時アクセス(編集)を...
-
Accessでテーブル名やクエリ名...
-
Accessクエリでの、LIKE条件
-
ACCESSで指定されたテーブルか...
-
2つのテーブルを比較して一致し...
-
アクセスのメインフォームとサ...
-
Accessの追加クエリで既存のテ...
-
SQLで条件指定結合をしたいがNU...
-
パススルークエリをテーブル作...
-
ACCESSのSQLで数値型に変換する...
-
SQLで日付を条件に削除したい
-
3つの表を1つに縦に連結する
-
アクセスのテーブル間で同じ値...
-
Accessデータベースで測定デー...
-
Accessでのテーブルのコピー
-
ACCESS VBA 並び替え 列 カウ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでテーブル名やクエリ名...
-
access テーブル内のレコード...
-
Accessレコードの追加や変更が...
-
Accessクエリでの、LIKE条件
-
Accessの追加クエリで既存のテ...
-
Accessでvlookupみたいなことは...
-
3つの表を1つに縦に連結する
-
ACCESSに同時アクセス(編集)を...
-
デザインビューで、連結式 を...
-
ACCESSで指定されたテーブルか...
-
Accessでテーブルからテーブル...
-
2つのテーブルを比較して一致し...
-
ツリー構造をRDBで表現するには?
-
SQLで条件指定結合をしたいがNU...
-
リンクテーブルを CopyObject ...
-
パススルークエリをテーブル作...
-
Accessでテーブルにパスワード...
-
SQL: SELECT UNIONすると文字数...
-
時間の足し算
-
INSERT時にデータ登録とmaxの発...
おすすめ情報