• ベストアンサー

Requeryは保存もするのか?

クエリのデータを変更し、保存ボタンを押さずに DoCmd.Requery を実行するとデータ保存されているようですが Requery は保存もするのでしょうか? というのは いろいろなコート゛が書かれていて 保存はRequeryの所為なのか、 他のコート゛の所為なのか 正確に知ることが困難です。 よろしくお願い致します。

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.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」が返されることになります。 (=コード実行前に保存済みで、保存タイミングが不明のまま、と)

1hdthd
質問者

お礼

「Dirty」プロパティ試してみます。 ご丁寧な解説有難うございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • tag1701
  • ベストアンサー率54% (67/123)
回答No.1

何をどう動かしているのかが分かりませんが、>DoCmd.Requeryは 再クエリ実行という意味です。 ですので選択クエリであれば条件に合ったものを再度sqlして 表示することでしょうし、更新クエリを指定しているのであれば それを再実行することになります。 まずは保存ボタンのクリック時のイベントプロシージャの記述が なんとなっているか、DoCmd.Requeryがどのイベントに記述されているか 見てみるとわかってくるのではないでしょうか?

1hdthd
質問者

お礼

詳しいご説明有難うございました。 難しいですね。 私が作ったシステムではないのでどこがどうなってるのかよくわからないです。 再クエリというのは たとえばクエリのチェックボックスにチェックを入れる→再クエリ→閉じる→開くとチェックを入っている(再クエリで保存されている) ということになりますか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • この場合どちらのクエリが実行されるのか?

    クエリ1とクエリ2が開いている状態で DoCmd.Requery を実行した場合、 どちらが実行されるのでしょうか? 実験してみたのですがイマイチよくわからなかったです。

  • アクセスのメインフォームのみRequeryしたい

    アクセスでフォームを作製しています。 シンプルに「メインフォームの中にサブフォームがある」形で作製し各フォームにはクエリをレコードソースとして指定しています。検索したいデータのコードを入力してそのデータを表示させる・・・という一般的なフォームなのですが、メインフォームのみRequeryさせたいのですができますか? [Forms].[メインフォーム].requery とするとサブフォームまで再計算されてしまいますが、ここでサブフォームは再計算させないで、メインフォームだけ再計算させたいのです。宜しくお願いします。

  • 実行時エラー2118

    アクセス2010です。 アクセスVBAのコードで Forms("フォーム1").Controls("サブフォーム").Requery を実行しようとすると 実行時エラー2118 ”Requery/再クエリ”アクションを実行する前に、 カレントフィールドを保存する必要があります。 となります。 VBA実行中に、手作業でデータを修正した事により発生したエラーなのですが そもそもVBA実行中にデータをいじる事は可能なのでしょうか? 出来る時とできない時があります。 更に、上記のエラーが発生しているときは、 VBAが中断の状態で、 そのデータを保存することができません。 データの保存が出来ないと、コードが進まないのですが こういう時はどうすればいいのでしょうか? VBAを停止して、手作業で修正したデータを保存するしかないのでしょうか?

  • Access レイアウト変更したサブフォーム内のクエリを保存しないようにするには?

    OS:WindowsXP Access Version:Access2003 メインフォームにチェックボックスを配置、非連結のサブフォームにクエリを表示させています。 チェックボックスラベルにはクエリのフィールド名を表示させており、チェックボックスをオン/オフにすることでクエリのフィールドを表示/非表示に切り換えております。 ※切り替え方法はColumnWidthで操作しています。 ところで、表示/非表示と切り替え操作をしてメインフォームを閉じるコマンドボタンをクリックして閉じようとすると、 「”○○○(クエリ名)”のレイアウトが変更されています。保存しますか?」 という内容のメッセージが表示されてしまいます。 ここでレイアウトの変更は保存したくないのです。 そこで、私のした処置とは、 (1)メインフォームを閉じるコマンドボタンに DoCmd.Close acForm "○○○(フォーム名)" DoCmd.Close acQuery "○○○(クエリ名)",acSaveNo と記述しました。 acSaveNoのヘルプを見ると、 メッセージを表示せずに保存しないで閉じる、 とあったのですがこれでもメッセージが表示されてしまいました。 そこで、 (2) DoCmd.SetWarning False DoCmd.Close acForm "○○○(フォーム名)" DoCmd.Close acQuery "○○○(クエリ名)",acSaveNo DoCmd.SetWarninf True と記述したところ、メッセージを表示させなくすることには成功したのですが、無条件でレイアウトしたクエリが保存されてしまいました。 どのように記述すればメッセージを表示させず、かつレイアウト変更したクエリを保存せずに閉じることができますか? 初心者のため、誤字脱字があると思いますがすみません。 丁寧に教えていただければ幸いです。よろしくお願いいたします。

  • 実行時エラー’2118’

    アクセスvbaで いつも問題なく動いているコードなのですが 「実行時エラー’2118’ ”Requery/再クエリ”アクションを実行する前に、カレントフィールドを保存する必要があります。」 というエラーが出ます。 エラーが発生するコードは Forms("フォーム1").Controls("SF").Requery です。 中断中のvbe画面でctrl+sで保存をしてみたのですが 変わりません。

  • アクセス2000でVBAを使ってクエリを実行したいのです

    Access2000でVBAを使っています。 Docmdでクエリを実行させたいのですが、 DoCmd.OpenQuery stDocName1, acNormal, acHidden とするとクエリの実行結果が表示されます。 クエリだけ実行されて実行結果を非表示にする方法は ありますでしょうか? Form1のコマンドボタンを押下後、クエリが実行されて 別のFormにデータ表示させたいので、なるべくクエリの実行結果を表示させたくないのです。 よろしくお願いいたします

  • Accessでのデータ更新のキャンセルと再クエリについて。

    初心者で申し訳ありません。 (1)Accessで、フォームを作り簡単なデータを管理しています。そこで、入力フォームを開き、データを追加し ているときにキャンセルをしたいと思った場合はどの ようなイベントを記述すればよろしいでしょうか。  (入力したデータを更新したくない) docmd.cancel..を記述しても、結局テーブルに追加 されてしまっているのですが・・・。 (2) ★docmd.requery "○○○"    ★Forms![フォーム名].requery ・・・上記のような再クエリの方法を目にしてるのですが、上と下の違いはあるのでしょうか?この場合はこう・・・とかあるのでしょうか? よきアドバイスお願いいたします。

  • Access VBA Me.Requery レコードは削除されています エラー

    Me.Requery すると「レコードは削除されています」エラー 予約テーブル → 確定テーブルにデータ移し、予約テーブルのレコードは削除 という処理をしています。 予約詳細というクエリを作り、フォームで開きました。 [確定]ボタンを設置し、フォームの値を確定テーブルに追加できるようにしました。 確定済みの予約レコードは、削除します。 ここまでは成功したのですが、フォームには、確定済みの予約レコードが表示されたままです。 Me.Requery というコードを追加しましたが、エラーになります。 「レコードは削除されています」エラーです。 単純に[削除]ボタンで1レコード削除した後、 Me.Requery した場合には、問題なく、きれいに再表示されます。 -------------------------------- Private Sub 削除ボタン_Click() Dim ADOcmd As ADODB.Command Set ADOcmd = New ADODB.Command ADOcmd.ActiveConnection = CurrentProject.Connection ADOcmd.CommandText = "Delete from 予約 where 予約ID=" & me.予約ID ADOcmd.Execute Set ADOcmd = Nothing Me.Requery ' <<<< これは成功します。gannersさん感謝<(_ _)> End Sub -------------------------------- 途中で何かのプロパティが変化しているからでしょうか? 解決方法わかる方いらっしゃいますか?

  • Accessのフォームについて

    データ1、データ2というテーブルがあり データ2の中身を データ1に追加するという 「追加クエリ」を作りました。 それで、この「追加クエリ」を フォームのボタンをクリックしたときに実行させるようにしたいのですが どのようにすればいいのでしょうか。 (ボタンクリックで作成した「追加クエリ」自体を実行させることができるのか、 それとも追加クエリと同じ動作をさせるコードを記述して更新するようにしないとダメなのか) Accessを始めたばかりであまり詳しくないので 申し訳ないのですが ボタンクリックで作成した「追加クエリ」を実行出きるというのであれば(前者) コードとその説明を簡単でいいので 教えていただけないでしょうか。 よろしくお願いいたします。

  • Access のクエリの一時保存

    Access でテーブルから様々な処理をしてクエリを作成しているのですけれども、 クエリが終了するまで時間がかかってしまいます。 普段、そのクエリに対して、データの取得等をすることが多いので、 毎回、クエリが実行されるのは非効率です。 もともとテーブル自体、それほど更新するわけではないので、 クエリを行った結果をどこかに保存しておいて、テーブルが変更されたときのみ、 クエリが実行されるというようなことは、Access ではできないのでしょうか? また、ほかの DB では、そのような機能があるものなのでしょうか? あまりデータベースに対して詳しくないので、教えていただければと存じます。

専門家に質問してみよう