質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

2860閲覧

Accessで条件を基にした削除のVBAの記述について

oze

総合スコア14

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2018/10/09 04:04

閲覧ありがとうございます。

別DBの2つのテーブルをリンクテーブルでAccessと繋いでいます。
3つのカラム条件とし、テキストボックスに値を入力してその値を基に削除を行うフォームを作成しております。
また、3つのカラムの条件を基に2つのテーブルのレコードを1つのボタンで削除を行わなければいけません。

現状のソースコードでは、エラーは発生しないものの削除結果が0件となり、削除が行えていません。
デバッグを行った結果、変数にテキストボックスの値は格納されてはいます。
<現状のソースコード>

VBA

1Private Sub 削除ボタン_Click() 2 3 4'検索条件が一つでも未入力の場合は削除処理をしない 5If IsNull(Me.txtA) Or IsNull(Me.txtB) Or IsNull(Me.txtC) Then 6MsgBox "削除条件をすべて入力してください" 7Exit Sub 8End If 9 10'Table_1用のSQL、変数 11Dim SQL_Tb1 As String 12Dim rc_Tb1 As Integer 13 14Dim dbs As Database 15Set dbs = CurrentDb 16 17'Table_1のDELETE文の作成 18SQL_Tb1 = "DELETE * FROM Table_1_query WHERE ""A"" = '" & txtA & "' And ""B"" = '" & txtB & "' And ""C"" = '" & txtC & "' ;" 19 20dbs.Execute SQL_Tb1, dbFailOnError 21rc_Tb1 = dbs.RecordsAffected 22 23 24'Table_2用のSQL、変数 25Dim SQL_Tb2 As String 26Dim rc_Tb2 As Integer 27 28 29'Table_2のDELETE文の作成 30SQL_Tb2 = "DELETE * FROM Table_1_query WHERE ""A"" = '" & txtA & "' And ""B"" = '" & txtB & "' And ""C"" = '" & txtC & "' ;" 31 32dbs.Execute SQL_Tb2, dbFaileOnError 33rc_Tb2 = dbs.RecordsAffected 34 35'削除結果を出力 36MsgBox "Table_1:" & rc_Tb1 & "件, Table_2:" & rc_Tb2 & "件を削除" 37 38End Sub

また、SQLに問題があると思い
別のソースコードを作成した結果削除は行えるのですが
FindFirstメソッドを使用しているので条件の中の最新の1件のみの削除しか行えません。(いろいろ調べましたが全件のレコードの中で条件に該当するレコードすべてを調べるメソッドがわからなかったです。)
またこちらのソースコードでは2つのテーブルを同時に削除する記述がよくわかりませんでした。。。
<削除に成功したVBA>

VBA

1Private Sub 削除_Click() 2 3 4'検索条件が一つでも未入力の場合は削除処理をしない 5If IsNull(Me.txtA) Or IsNull(Me.txtB) Or IsNull(Me.txtC) Then 6MsgBox "削除条件をすべて入力してください" 7Exit Sub 8End If 9 10Dim DB As DAO.Database 11Dim RS As DAO.Recordset 12 13Set DB = CurrentDb 14Set RS = DB.OpenRecordset("Table_1_query") 15 16RS.FindFirst "A" = "' & txtA & '" And "B" = "' & txtB & '" And "C" = "' & txtC & '" 17RS.Delete 18 19RS.Close: Set RS = Nothing 20DB.Close: Set DB = Nothing 21 22End Sub

ご指摘、ヒント等頂ければと思います。

※開発初心者ですので、文章の中に不適切な表現があるかもしれませんが、ご容赦ください

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

条件自体が、Table_1_queryの項目に対する条件には見えず、フォーム項目の値をチェックしているだけに見えます。

クエリーやテーブルの項目を指定する際に"で括るとそれは単なる文字列になります。
以下のような記述に変更して下さい。

VBA

1"A ='" & txtA & "' And B = '" & txtB & "' And C = '" & txtC & "'"

それから、Table_1_queryが更新可能なクエリーかどうかが気になりますので、手動でクエリーを作るなりして確認してみて下さい。

2番目のコードで削除できているみたいなので、更新可能なクエリーですね。

投稿2018/10/09 04:32

編集2018/10/09 04:34
sazi

総合スコア25184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oze

2018/10/09 05:47

回答ありがとうございます。 ご指摘頂いた点、修正したところ削除を行うことができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問