• ベストアンサー

Access 更新キャンセルするには?

Access2000で作成しています。 フォーム上でデータを書き換え後、更新をしない場合はどうしたらよいのでしょうか? 【希望する流れ】  1.データを変更  2.「更新」ボタンクリック     「データの更新をします。よろしいですか?」のメッセージ   (1)更新する場合:データを更新     「データが更新されました」のメッセージ   (2)更新しない場合:データを変更前に戻す     「データの更新がキャンセルされました」のメッセージ  3.フォームを閉じる  4.別のフォームを開く この動作をフォーム上にある「更新」ボタンのクリック時イベントにすることはできますか? とりあえず、現在は以下のようなものが作ってあります。 「VBA」  Private Sub Form_BeforeUpdate(Cancel As Integer)  '更新前確認   If MsgBox("更新します。よろしいですか?", vbYesNo, "更新確認") = vbNo Then   Cancel = True   Me.Undo   End If  End Sub 「更新」ボタンクリック時(こちらはマクロです)  ・フォームを閉じる  ・別のフォームを開く 今の状況では、更新する場合は問題ないのですが、更新しない場合、 「このレコードを保存することができません。  レコードを保存する時にエラーが発生しました。  ・・・・・・・・・・・」 というメッセージが出てきてしまいます。 どのようにVBAを作ればよいでしょうか? 説明不足の場合、補足いたします。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • arara0123
  • ベストアンサー率47% (8/17)
回答No.2

Private Sub Form_BeforeUpdate(Cancel As Integer)  '更新前確認   If MsgBox("更新します。よろしいですか?", vbYesNo, "更新確認") = vbNo Then Me.Undo MsgBox "データの更新がキャンセルされました"   End If End Sub でどうでしょう?

meganekko
質問者

お礼

回答ありがとうございます。お世話になります。 Cancel = Trueをとり、MsgBox追加した所・・・できました! 「Cancel = True」が何故必要ないのでしょう?(勉強します…) このデータベースを作るのが、初Access挑戦で、Accessのことも VBAのことも全くわからず、、、 本当にありがとうございました。助かりました。

その他の回答 (1)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 1つのやり方ですが。 フォームをテーブルと非連結で作ります。フォーム上の入力用テキストボックスなども全部自分で置きます。 フォームの下のほうにあるレコード移動関連のボタンも非表示にし、自分でコマンドボタンを作り、処理を書きます。 それで、データはレコードセットを作成してその都度表示させます。 そして、更新ボタンのイベントにレコードセットの更新処理を書きます。 全部自分で作るのが面倒ですが。 では。

meganekko
質問者

お礼

ご回答ありがとうございました。 まだまだ勉強不足でわからない事だらけです。 今後教えていただいた方法もできるように頑張りたいと思います。

meganekko
質問者

補足

こんにちは。お世話になります。 回答いただいた方法なのですが、一応、もう一つフォームを作り、 試したものがあるのですが、下記のようなことでよいのでしょうか? (更新のフォームを開くためにフィルタをかけています) Private Sub 更新_Click() On Error GoTo Err_更新_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "F_データ更新" stLinkCriteria = "[更新先]=" & "'" & Me![更新先名] & "'" DoCmd.OpenForm stDocName, , , stLinkCriteria Dim rec As New ADODB.Recordset rec.Open "Q_情報", CurrentProject.Connection, adOpenKeyset フォームのテキストボックスの名前 = rec.Fields.Item("フィールド名")     ・・・(テキストボックス分)    rec.Close ・・・(エラー時処理等) End Sub としたものを作ってあるのですが、 「指定した式で参照されている"|"フィールドが見つかりません」 というエラーが出てきてしまいます。 全くの初心者なのでHPや本を見ながら試しているのですが、 そもそも…が良くわかっていないのでどこがどう違うのか 見当がつきません。 やはり、質問の方法ではできないのでしょうか?