- ベストアンサー
Requeryは保存もするのか?
クエリのデータを変更し、保存ボタンを押さずに DoCmd.Requery を実行するとデータ保存されているようですが Requery は保存もするのでしょうか? というのは いろいろなコート゛が書かれていて 保存はRequeryの所為なのか、 他のコート゛の所為なのか 正確に知ることが困難です。 よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> Requery > は保存もするのでしょうか? レコードは保存されます。 これは恐らくですが、Accessでは、 編集中のレコードから他のレコードに移動するだけで保存される 先頭以外のレコードを選択中Requeryをすると先頭以外に移動する ことから、 Requeryの実行→レコードの再読み込み(=画面裏でのレコード移動?) →レコードの自動保存 といったことが発生しているのではないか、と思っています。 > 保存はRequeryの所為なのか、 > 他のコート゛の所為なのか > 正確に知ることが困難です。 レコードの編集を「クエリのデータシートビュー」で行っているのだと、私は 確認方法を知りませんが(汗)、「クエリがレコードソースのフォーム」での 編集ということでしたら、レコードが保存されるタイミングを確認することは 可能です。 これには、Formの「Dirty」プロパティを使用します。 このプロパティは、レコードが編集中ならTrueを、保存済みならFalseを 返します。 従って、VBA内の適当な箇所で、MsgBoxやDebug.Printを使用して その値を確認することで、「TrueからFalseに変化したところ=保存が 実行された場所」とわかります。 ※Debug.Printを使用した場合は、Ctrl+Gを押すと開く、イミディエイト ウィンドウで結果を確認できます。 <例> Private Sub 保存_Click() Debug.Print "1 " & Me.Dirty '→イミディエイト ウィンドウで確認 'MsgBox "1 " & Me.Dirty '→MsgBoxで確認 If MsgBox("保存します。", vbOkCancel, "確認") = vbCancel Then Exit Sub Debug.Print "2 " & Me.Dirty 'MsgBox "2 " & Me.Dirty Me.ID = DMax("ID", Me.RecordSource) + 1 Debug.Print "3 " & Me.Dirty 'MsgBox "3 " & Me.Dirty DoCmd.Requery Debug.Print "4 " & Me.Dirty 'MsgBox "4 " & Me.Dirty DoCmd.GotoRecord acForm, Me.Name, acNewRec Debug.Print "5 " & 'MsgBox "5 " & Me.Dirty End Sub <イミディエイト ウィンドウでの結果> 1 True 2 True 3 True 4 False 5 False →「3」と「4」の間(=Requery)で保存されているとわかる。 【注意】 帳票フォームなどで、ヘッダやフッタにコントロールを設置した場合、詳細 領域(→レコードの表示領域)からヘッダ/フッタに移動した時点でレコード は保存されています。 そのため、これらのコントロールに割り当てたVBA内でDirtyを確認すると、 最初から「False」が返されることになります。 (=コード実行前に保存済みで、保存タイミングが不明のまま、と)
その他の回答 (1)
- tag1701
- ベストアンサー率54% (67/123)
何をどう動かしているのかが分かりませんが、>DoCmd.Requeryは 再クエリ実行という意味です。 ですので選択クエリであれば条件に合ったものを再度sqlして 表示することでしょうし、更新クエリを指定しているのであれば それを再実行することになります。 まずは保存ボタンのクリック時のイベントプロシージャの記述が なんとなっているか、DoCmd.Requeryがどのイベントに記述されているか 見てみるとわかってくるのではないでしょうか?
お礼
詳しいご説明有難うございました。 難しいですね。 私が作ったシステムではないのでどこがどうなってるのかよくわからないです。 再クエリというのは たとえばクエリのチェックボックスにチェックを入れる→再クエリ→閉じる→開くとチェックを入っている(再クエリで保存されている) ということになりますか?
お礼
「Dirty」プロパティ試してみます。 ご丁寧な解説有難うございました。