ユーザーがキャンセルした場合に新しく作成されたレコードを削除するようにコードを取得しようとしています。何らかの理由で、テーブル内に存在する一意のIDをクエリが確実にフィルタリングしていても、アクセスはレコードを削除しません。アクセスはエラーを投げていません。CurrentDb.Execute delete query VBAから実行されたときに何も削除しない
PG_IDは両方のテーブルの一意の識別子です。これは長い整数です。
以下に、私のコードのサンプル部分を含めました。助けてください!
Dim var_PGID As String
Dim Delete_PG_Data, Delete_PG_Upld As String
Dim db As Database
Set db = CurrentDb
var_PGID = TempVars![var_PG_ID_NEW]
Delete_PG_Data = "DELETE * " & _
"FROM tbl_CapEx_Projects_Group " & _
"WHERE PG_ID=" & var_PGID
Delete_PG_Upld = "DELETE * " & _
"FROM tbl_CapEx_Projects_Group_Attachements " & _
"WHERE PG_ID=" & var_PGID
Debug.Print Delete_PG_Data
Debug.Print Delete_PG_Upld
db.Execute Delete_PG_Data, dbFailOnError
db.Execute Delete_PG_Upld, dbFailOnError
私はmsgboxをDebug.Printに切り替えました。以下は、アクセスクエリに置かれたときに正しく動作するdebug.print出力です。
タイミングの問題でした。トランザクションをコミットしてから削除クエリを実行することで修正しました。あなたのご意見ありがとうございました!
Private Sub cmd_Cancel_Click()
On Error Resume Next
DoCmd.SetWarnings False
If TempVars![var_NewRecord] = True Then
Do While Not Me.Recordset.EOF
Me.Recordset.Update
Me.Recordset.MoveNext
Loop
DBEngine.CommitTrans
Me.Recordset.Close
Dim var_PGID As String
Dim Delete_PG_Data, Delete_PG_Upld As String
Dim db As Database
Set db = CurrentDb
var_PGID = TempVars![var_PG_ID_NEW]
Delete_PG_Data = "DELETE * " & _
"FROM tbl_CapEx_Projects_Group " & _
"WHERE PG_ID=" & var_PGID
Delete_PG_Upld = "DELETE * " & _
"FROM tbl_CapEx_Projects_Group_Attachements " & _
"WHERE PG_ID=" & var_PGID
Debug.Print Delete_PG_Data
Debug.Print Delete_PG_Upld
db.Execute Delete_PG_Data, dbFailOnError
db.Execute Delete_PG_Upld, dbFailOnError
''Me.Recordset.Delete
''DBEngine.BeginTrans
''DBEngine.CommitTrans
Else
If Me.Saved Then
DBEngine.Rollback
Else
If Me.Dirtied Then DBEngine.Rollback
End If
End If
DoCmd.Close ObjectType:=acForm, ObjectName:=Me.Name
Form_frm_CapEx_Edit_Project_Groups_Cont.Requery
DoCmd.SetWarnings True
End Sub
PG_IDが本当に長いintであればうまくいくようです。 'MsgBox'を' Debug.Print'で置き換えて、イミディエイトウィンドウの出力をあなたの質問に追加してください(Ctrl + Gはあなたをそこに連れて行きます)。 - 参照:[動的SQLをVBAでデバッグする方法](0120-18753-03) – Andre
アクセスにエラーが発生する可能性がありますが、 dbFailOnError'パラメータをdb.Executeに設定します。 Delete_PG_DataおよびDelete_PG_Upld変数の値をクエリビルダにコピーして実行してください。 –
TempVars![var_PG_ID_NEW]変数に正しい値が含まれていますか? –