
テーブルを、たとえそれが存在しなくてもメッセージが出ないで、削除したい。
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCELVBAでシートを他のブックにコピーする命令を出すと毎回存在しないシート名の問合わせがある 2 2022/05/07 17:16
- その他(IT・Webサービス) EXCELVBAでシートを他のブックにコピーする命令を出すと毎回存在しないシート名の問合わせがある 1 2022/05/07 15:12
- JavaScript javascriptでテーブルに追加した項目のid追加してローカルストレージを操作したい 5 2023/01/01 15:52
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Access(アクセス) AccessVBAで任意の複数リンクテーブルをAccessVBAを動かす際に削除したいと考えておりま 1 2022/11/17 15:45
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Access(アクセス) アクセス 削除するレコードを含んだテーブルを指定してくださいのエラー対処方法 1 2022/11/24 15:01
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- SQL Server SQL Oracle serverにって質問です。 会社テーブルがあり、そのテーブルから 社員名、給 4 2022/05/21 12:22
- SQL Server AccessのInsertクエリのあとつづけてDeleteクエリを行いたいがSQLでどう書いたらいい 3 2023/05/27 14:12
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessレコードの追加や変更が...
-
Accessでテーブルからテーブル...
-
Accessでテーブル名やクエリ名...
-
データ型の変更
-
SQLServer2000で、行数が不一致
-
accessへのexcelデータのインポ...
-
Accessクエリでの、LIKE条件
-
2つのテーブルを比較して一致し...
-
複数のテーブルをつなげる
-
ACCESS2003単純計算方法
-
テーブルを、たとえそれが存在...
-
こんなクエリできるでしょうか
-
同一形式のアクセスMDBを一...
-
一時的なワークスペースのよう...
-
MS-ACCESSで、レコードセットを...
-
SQLServerのデータをMDBファイ...
-
Access2000で、選択後にレコー...
-
ファイルメーカ 検索実行せず...
-
エクセルのFIND関数の複数セル...
-
FileMakerで2テーブルを(仮想的...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでテーブル名やクエリ名...
-
Accessでテーブルからテーブル...
-
Accessレコードの追加や変更が...
-
Accessでvlookupみたいなことは...
-
ACCESSのSQLで数値型に変換する...
-
デザインビューで、連結式 を...
-
Accessクエリでの、LIKE条件
-
2つのテーブルを比較して一致し...
-
access テーブル内のレコード...
-
テーブル作成クエリで主キーを設定
-
SQLで条件指定結合をしたいがNU...
-
3つの表を1つに縦に連結する
-
ACCESSに同時アクセス(編集)を...
-
Accessの追加クエリで既存のテ...
-
ファイルメーカ 検索実行せず...
-
リンクテーブルを CopyObject ...
-
DAOのTableDefs("TblName").Con...
-
INSERT時にデータ登録とmaxの発...
-
ODBCで接続するとDBに変更/追加...
-
SQLで日付を条件に削除したい
おすすめ情報