次の方法で共有

レコード削除で強制終了します。回避策があれば教えてください。

Anonymous
2013-06-20T06:57:19+00:00

Access2007で、以下の条件が揃うとAccess2007そのものが強制終了します。回避策があれば教えてください。

PCはWindows7 pro SP1 32bit です。

1.[Accessのオプション]⇒[詳細設定]⇒[確認]⇒[レコードの変更]にチェックが入ってるものとします。

2.3件以上のレコードがあるテーブルをレコードソースとするフォームがあります(コントロールも非連結ではありません)。

3.フォームを開いた直後(開いた後何もしないで)メニューの[削除]の右のプルダウン[レコードの削除]をクリックし、

  システムが表示する確認画面で「いいえ」をクリックし、削除を取り消します。

4.「・・・動作を停止しました」と表示され、Access2007そのものが終了してしまう。

レコードが3件未満の場合はエラーになりません。

また、Access2010でもエラーになりません。

バグなのか仕様なのか分かりませんが回避したく、回避策があれば教えてください。

よろしくお願いします。

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2013-06-28T05:34:47+00:00

ちゃぺ猫 さん、こんにちは。返信ありがとうございます。

返信内容を読んで、前回こちらで試した方法は何か違っていたかな、という気がしたので、今回は単票フォームで試してみました。

確かに、Access が強制終了してしまいますね。。。

レコードの総数がわかってからフォームを表示するような方法を考えたのですが、良い方法が思い浮かびませんでした。

そこで、ユーザーに操作をお願いするのはちょっと心苦しいな、と思う部分を VBA に任せてみたらどうかと思い、次のコードをフォーム読み込み時のイベントに入れたところ、手元の PC では現象を回避することができました。

(Access VBA に詳しい方が見たら、突っ込みどころ満載かもしれません)

Private Sub Form_Load()

Me.Visible = False

DoCmd.RunCommand acCmdRecordsGoToLast

DoCmd.RunCommand acCmdRecordsGoToFirst

Me.Visible = True

End Sub

レコード総数が 4 件のフォームで試した方法なので、レコード件数が多くなった場合にも現象を回避できるか、というのはわからないのですが、よかったら試してみてください。

他に何か良い方法を思いついた方がいましたら、ぜひ書き込みをお願いします。

この回答は役に立ちましたか?

0 件のコメント コメントはありません

6 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2013-06-26T00:55:01+00:00

    返信ありがとうございます。

    確かに、レコードセレクタにてレコードポインタを移動させた場合には

    エラーになりませんね。確認しました。

    しかし、フォームを開いた直後、レコードポインタを移動させずに、

    そしてこれが大事なのですが、レコードセレクタに総レコード数が表示される以前に

    当該の操作を行うと、確実にエラーになります。

    WinXP(Pro,SP3)+Access2007が1台およびWin7(Pro,SP1)+Access2007が2台、合計3台の

    PCにて、動作検証用の単純なDB(1個のテーブルと1個のフォーム)で同じ現象が発生しています。

    Access備え付け(?)のメニューのレコード削除ボタンなので、メニュー(リボン)そのものを非表示に

    するくらいしか回避策が思いつけませんが、それではユーザからクレームの嵐が来そうですし、

    「レコード削除の前にレコードセレクタをクリックしてください」とユーザにお願いするのも、操作の必然性に

    欠けると云うか説得力に欠けると云うか・・・、困っています。

    でも、アドバイスありがとうございました。ヒントにさせていただきます。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2013-06-25T06:00:57+00:00

    こんにちは。

    MukkuMuku さん、いつもコメントありがとうございます。

    ちゃぺ猫 さん、マイクロソフト コミュニティ への投稿ありがとうございます。

    手元の PC (Windows Vista + Access 2007) で簡単に試した感じだと、同じような現象が起こることはありませんでした。

    < 試した手順 >

    ・ 新規に accdb ファイルを作成。簡単なテーブルを作成してレコードを 4 件入力

    ・ テーブルをもとに複数アイテム表示のフォームを作成

    ・ フォームを開いて、フォーム内のレコードセレクタをクリックしてからレコードの削除を選択

    ・ [○ 件のレコードを削除します] の画面で、[いいえ] を選択

    ※ 削除対象のレコード件数は 1 件 と 4 件 で試しました

    ひょっとすると特定のファイル、フォーム、テーブルで起きる現象かもしれないので、新規作成の accdb ファイルではどのようになるか、フォーム、テーブルを作り直すとどのようになるか、という確認をしてもよいのかな、と思います。

    同じ環境の PC が複数ある場合には、他の PC での動作も確かめてみてください。

    詳しい状況などの書き込み、お待ちしています。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2013-06-21T02:48:07+00:00

    早々の返信、ありがとうございました。

    なるほど、「なにかすれば」という発想はありませんでした。

    で、削除前確認 イベントで Screen.ActiveControl.Requery 

    をやってみました。

    結果は残念ながらダメでした。

    で、レコードポインタの問題なんだろうと思い、

    ためしに、「開く」等のイベントのタイミングで、レコードポインタの操作をやってみました。

     MoveFirst とか MoveLast とか前後に移動させるとか。

    やっぱりだめでした。

    それで分かったことですが、フォーム画面底辺のレコード数表示(移動ボタンがあるところ)の

    総レコード数(分母の部分)が表示されるまでは、Requery をやろうが レコードポインタを

    操作しようがレコード削除の取り消しで強制終了します。

    一度総レコード数が表示されてしまえば、何もしなくてもエラーにはなりませんでした。

    Access2010で出ないということは、MSでは分かっていて改修したということなのでしょうね。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Anonymous
    2013-06-20T13:04:02+00:00

    MukkuMukuです。

    さすがに仕様とは言えない。

    何もしないと発生してしまうから、何かすればよいのでは?

    コントロールの移動とかコントロールのRequeyなどでも回避できるだろうと思います。

    フォームが開いてからダイアログ表示までになにかをすればよいので、

    例えば、BeforeDelConfirm / 削除前確認 イベントで

     Screen.ActiveControl.Requery

    とするとか。フォーム設計の実際に沿う必要がありますけれども。

    根本的にどうするとかは考えていません。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません