- ベストアンサー
ACCESSでのデータ削除について
XP&ACCESS2003 メインフォーム/サブフォーム形式のフォームで、受注番号で連結しています。 メインフォームが受注、サブフォームが受注明細です。(1対多) サブフォームに削除ボタンをつけて、受注明細のレコードを1件削除するようにしています。以下が削除ボタンのクリック時のプロシージャーです。 DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70 DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70 クリックした段階で、クエリーで見てみると確かに削除されています。 ただ、フォームを再度開くと空のデータが追加されています。(=削除前とレコード件数は同じ) このサブフォームでは、レコード追加時にフィールド「行」に行ナンバーを入力させるために、隠しで [行NO]テキストボックスを持たせて、自動的に行NOをいれています。 サブフォームの挿入前処理は以下です。 [行NO] = Val(DMax("[行NO]", "Q_受注_工程_明細_行NO") & ".0") + 1 削除してもこの行NOが自動的に別のレコードを追加しているようです。 何か、よい方法をご存知の方、よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
ゴミレコードは、他にもある筈です。 ですから、一番手っ取り早いのは、フォームを閉じる時に掃除をすることです。 メッセージを出すかどうかは好みの問題です。 Private Sub Form_Close() Dim intCount As Integer Dim strWhere As String strWhere = "年月日 is null OR コード is null Or (借方金額=0 AND 貸方金額=0 AND コード>99)" intCount = DCount("*", "現金出納帳", strWhere) If intCount > 0 Then Message intCount & " 件の入力未了レコードを削除します。" QDFExecute "入力未了レコードの削除", "DELETE FROM 現金出納帳 WHERE " & strWhere End If End Sub Public Function QDFExecute(ByVal QDFName As String, ByVal SQLText As String) As Boolean On Error GoTo Err_QDFExecute Dim isOK As Boolean Dim dbs As DAO.Database isOK = True Set dbs = CurrentDb dbs.Execute SQLText Exit_QDFExecute: QDFExecute = isOK Exit Function Err_QDFExecute: isOK = False ErrorMsg Err.Description & "(QDFExecute:" & QDFName & ")" Resume Exit_QDFExecute End Function
その他の回答 (1)
- O_cyan
- ベストアンサー率59% (745/1260)
>フォームを再度開くと空のデータが追加されています。 再度開くとは新たにフォームを開くと行Noのみのレコードが表示され受注明細のテーブルに追加されたまま という事なのでしょうか。 通常はこんな感じで行Noをふるのですが Private Sub Form_BeforeInsert(Cancel As Integer) If DCount("[行NO]", "受注明細", "受注番号 = " & Forms!メインフォーム名!サブフォーム名!受注番号) = 0 Then Me![行NO] = 1 Else Me![行NO] = DMax("[異動No,]", "受注明細", "受注番号 = " & Forms!メインフォーム名!サブフォーム名!受注番号) + 1 End If End Sub 普通に削除できるはずなのですが・・。 クエリを使って行Noを取得してさらに.01のようにしているようですが [行NO] = Val(DMax("[行NO]", "Q_受注_工程_明細_行NO") & ".0") + 1 ほぼ一緒ですよね。 削除ボタンの記述の後にサブフォームをRequeryさせるとどうなりますか?