3

私は Access でプロジェクトに取り組んできましたが、そのプロジェクトに長く取り組んでいるほど、それを軽視しています。私は一日中グーグルで回避策を試みてきましたが、私がやろうとしていることを見つけることができません.

テーブルにリンクされたフォームがあります。フォームのレコードを新しいレコードに設定するボタンが 1 つあります。いずれかのテキスト ボックスに入力を開始すると、レコードの更新が開始されますが、この時点では実際には挿入が行われていません。ただし、オフレコをナビゲートすると、更新が呼び出されます。ユーザーが私が見つけた新しいレコードを追加したくない場合、更新が行われないようにするためにできることは何もありません。私は使用しています

 DoCmd.GoToRecord , , acNewRec

すべてのテキスト ボックスが新しいレコードに移動するようにフォームを取得するには。この時点で、いずれかのテキスト ボックスに入力を開始するとすぐに戻ることができなくなります。自動番号が増加し、自動番号をプレフィックスに連結してシリアル番号として機能させる SKU ビルダーがあります。

私がする必要があるのは、ユーザーが閉じるをクリックした場合に更新をキャンセルする方法を見つけることです。閉じるを無効にしようとしましたが、いつでもバーを右クリックして、そこから [閉じる] を選択できます。これは、処理中のレコードのコミットを閉じるようにフォームに促し、その後「afterUpdate」イベントを発生させるものと一緒です。Microsoft のドキュメントをいくつか読んだところ、「form_unload」がワークフローで最初に呼び出されましたが、挿入は常にその前に行われました。「beforeUpdate」も使用しようとしましたが、「afterUpdate」の直前ではなく、ボックスの1つに書き込もうとするとすぐに起動します

beforeUpdate と afterUpdate の間のスペースにかなり大きな穴があるようです。ここで試みているのはそれほど複雑な操作ではないと思いますが、おそらく長い間取り組んできたので、より簡単な解決策を見逃してしまったのでしょう。挿入操作をキャンセルするか、開いているレコードでフォームを閉じていることをユーザーに確認する必要があります。彼らがヒットした場合、インサートは発火しません。

また、タイムラインの関係で、ADO 用に書き直す気もありません。いくつかのフォームをすばやくまとめて、それを完了する必要があります。ADO挿入用に設定したくないフィールドもたくさんあります。それらはすべて構築されていますが、私はこの 1 つの問題に悩まされており、この解決策をすべてのフォームに適用する必要があります。

TLDR - ユーザーがテキストを入力してフォームを終了しようとした場合に、データバインドされたフォームの挿入を停止します。

解決策の編集: フォームをモーダル/ポップアップに変更し、クローズを無効にします。クローズを処理するボタンを追加します。ブールフラグを追加

 Private Sub Form_BeforeInsert(Cancel As Integer)
 NR = True
 End Sub

次に、閉じるボタンのコードを追加します。

 Private Sub cmdClose_Click()
 Dim msgRes As VbMsgBoxResult

If NR Then
     msgRes = MsgBox("Do you want to save the current new record?", vbYesNoCancel, "Closing form...")
     If msgRes = vbYes Then
         DoCmd.RunCommand acCmdSaveRecord
         DoCmd.Close
     ElseIf msgRes = vbNo Then
         Me.Undo
         DoCmd.Close
     End If
 End If
 DoCmd.Close



 End Sub
4

1 に答える 1

3

いつでもFormClose のいずれかを実行できます。それでも機能しない場合は (私は Access で多くの時間を費やしてきましたが、気難しい場合があることはわかっています)、次のことを実行できますMe.UndoDoCmd.RunCommand acCmdUndoDoCmd.RunSql ("Delete * from TableName where Id=NewID")

これを試すこともできます:

DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.Close , , acSaveNo

閉じるボタンを無効にして、レコードをキャンセルするボタンを作成して、そこにすべてのコードを配置することもできます。フォーム モードをダイアログに設定すると、右クリックして閉じることができなくなります。

于 2012-11-05T00:31:09.337 に答える