Microsoft Access 掲示板

表示位置の件について

7 コメント
views
4 フォロー

現在メインフォームから、「削除ボタン」を押すとサブフォームのカレントレコードを削除できるようにしています。
その際、削除すると画面がヘッダーのすぐ下にサブフォームの頭が来ます。
実際は、メインフォームの上の部分を表示したいです。(デフォルト画面)
タブストップは確認しましたが、上に配置されたのものから順に並んでいました。

「Me.txtID.SetFocus」
として、なんとか上の方を表示するようにしているのですが
それでも少し下にずれていて気になります。
どうしたら、詳細部分の一番上(デフォルト状態)で開くことができますでしょうか。

nankyoku
作成: 2020/10/29 (木) 15:13:39
通報 ...
1
hiroton 2020/10/29 (木) 16:29:45 16ef8@f966d

フォームの一番上を表示する

DoCmd.GoToPage 1, 0, 0

そもそも表示位置が変わるような削除処理をしない

Me!サブフォーム.Form.Recordset.Delete
2
nankyoku 2020/10/29 (木) 17:51:21 0029a@1c915 >> 1

ネットで検索したコードで削除処理しておりましたが、教えていただいたコードで解決しました。ありがとうございます。

3
nankyoku 2020/10/29 (木) 18:34:59 0029a@1c915 >> 2
Me!サブフォーム.Form.Recordset.Delete

このコードで続けざまにサブフォームのレコードを選択して(どこかのテキストボックスにカーソルを置いて)削除を実行していると、時々「カレントレコードが存在しません」というデバッグエラーが発生します。
何か解決方法はありますでしょうか。

6
hiroton 2020/10/30 (金) 08:20:58 c36bc@f966d >> 1

カレントレコードとは現在選択中のレコードです
DAO レコードセットからレコードを削除する
カレントレコードを削除した状態で再度(カレントレコードを)削除しようとすれば当然「カレントレコードが存在しません」となります。時々ということは他の処理の影響でカレントレコードが移動しているのでしょう(エラーが出ないほうがたまたまうまく動いているというだけです)

リンク先にある通り

Me!サブフォーム.Form.Recordset.Delete
Me!サブフォーム.Form.Recordset.MoveNext

のようにカレントレコードを移す処理を入れてあげればエラーは出ないと思います

4
hatena 2020/10/29 (木) 20:36:55 修正

時々「カレントレコードが存在しません」というデバッグエラーが発生します。

下記で回避できそうな気がします。

On Error Resume Next
Me!サブフォーム.Form.Recordset.Delete

しかし、

現在メインフォームから、「削除ボタン」を押すとサブフォームのカレントレコードを削除できるようにしています。

そもそも、この仕様が無理があるように気がします。
サブフォームのレコードを削除するならサブフォームに削除ボタンを置いた方が自然ではないですか?

メインフォームに削除ボタンがあるとメインフォームのレコードごと削除されそうな気がしてクリックするのがちょっと怖いです。
マウス移動も大きくになりますし。

5
nankyoku 2020/10/30 (金) 07:47:36 f1ed8@73413

ありがとうございます。
昨日書いたあとも削除を何度も試していて、動きが不安定なので(ちょいちょいエラーになる)この機能は取り外そうかと悩んでいました。
最新のレコードから順に消すとエラーが出ない気がしたんですが…エラーが出る法則まではわかりませんでした。

サブフォームがデータシートビューのものと、帳票だけどヘッダーがフィールドタイトルの罫線区切りで埋まってるものの2種類があり、それについては削除ボタンの配置をメインフォームにしていました。

〉ちょっと怖い
危険性があるなら外そうと思います!
チェックボックスをつけて削除クエリで処理するようにしたいと思います。
アドバイスありがとうございました!

7

「ちょっと怖い」というのはコード自体に危険性があるということではなく感覚的にメインフォームのレコードが削除されてしまうという誤解をしかねないという意味です。

サブフォームがデータシートビューの時はメインフォームに配置するしかないと思います。その場合はコマンドボタンのキャプションをサブフォームのデータの削除だと明確に分かるようにしておくといいでしょう。

帳票フォームなら詳細セクションに削除ボタンを配置するがいいのではと思います。どのレコードを削除するのか明確になりますので。

データシートビューの場合も、非連結のテキストボックスを配置して、コントロールソースに ="削除" と設定して、クリック時(またはダブルクリック時)のイベントプロシージャにレコード削除のコードを記述すれば可能です。