閲覧ありがとうございます。
別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
ご指摘、ヒント等頂ければと思います。
※開発初心者ですので、文章の中に不適切な表現があるかもしれませんが、ご容赦ください
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/09 05:47