• ベストアンサー

AccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。 Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。 Repaintは、VBAでキャプションなどを変更したとき使っています。 でも、よくわかっていません。 どんなときにどんなメソッドを使えばいいのでしょうか? 詳しい方、よろしくお願いいたします。

  • tiga-
  • お礼率77% (170/219)

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

  • ベストアンサー
  • gadd3
  • ベストアンサー率46% (211/451)
回答No.2

たびたびすみません。 調べてたらこんなのがでてきました。 http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:
http://www.nurs.or.jp/~ppoy/access/access/acF007.html
tiga-
質問者

お礼

ありがとうございます。 なかなかHelpを見ても、専門用語が多くて、今一わからないのが悲しいところです。 何となく、表形式で表示しているときは、Requeryで、単票形式で表示しているときはRefreshを使うといいような気がします。(単票形式でRequeryを使うと、レコードの途中を表示していたのに、Requeryしたとたん、先頭レコードに移動してしまった気がします) ネットワーク上で使用していると、他のユーザーの変更を反映させるのに苦労します。 お陰さまで少しは、理解できた気がします。

その他の回答 (1)

  • gadd3
  • ベストアンサー率46% (211/451)
回答No.1

僕も良くわからないのですみませんが・・・ ヘルプの質問タブに「Requery」と入力して、「"Requery/再クエリ" アクション」を表示させ、「関連項目」から「RepaintObject、ShowAllRecords、Requery、および Refresh アクション/メソッドの比較」というのを選ぶといろいろと書いてありました。 そのまま貼り付けます。 ●"RepaintObject/オブジェクトの再描画" アクション ●DoCmd.RepaintObjectRepaint メソッド 指定したオブジェクトのコントロールを再描画します。これらを実行しても、データベースの再クエリは行われず、新しいレコードも表示しません。 (※…僕はループ処理の関係で、テキストボックスに代入したテキストが表示されないときに使っています。) ●"ShowAllRecords/全レコードの表示" アクション ●ShowAllRecords メソッド 再クエリを行い、最新のレコードを表示し、フィルタを解除します。"Requery/再クエリ" アクションではこのような処理を行いません。 ●"Requery/再クエリ" アクション ●DoCmd.Requery メソッド オブジェクトまたはそのコントロールのソースを再クエリします。"Requery/再クエリ" アクションまたは Requery メソッドは、次のいずれかの処理を行います。 指定したコントロールやオブジェクトの基になるクエリの再実行。 指定したコントロールやオブジェクトの基になるテーブルのレコードに行われた追加、変更、削除内容の反映。 ●Refresh メソッド 指定したフォームまたはデータシートに含まれるレコードを更新して、データへの変更を反映します。この変更には、マルチ ユーザー環境での他のユーザーによる変更も含まれます。Refresh メソッドが表示するのは、カレント レコードセットに加えられた変更だけです。レコード ソースへのレコードの追加や削除は反映しません。 ●Requery メソッド 新しいレコード、または最後に再クエリしたときにレコード ソースから削除されたレコードを反映し、フォームまたはコントロールの基になるデータを更新します。 アクティブ オブジェクトにないコントロールを再クエリする場合は、このメソッドを使います。"Requery/再クエリ" アクションやそれに対応した DoCmd オブジェクトのRequery メソッドは使いません。 ※…Refreshはレコードの局所的な変更を確定・反映するもので、Requeryは完全なすべての変更を確定・反映するものなんでしょうか?そういう感じに読めますね…。 識者の回答を待った方がいいですね。すみません。

関連するQ&A

  • Accessで表をRequeryすると…

    こんにちは。 Accessでサブフォームを持っているフォームがあり、サブフォーム側では Aというテーブルがレコードソースになっていて帳票形式で表示しています。 メインフォームで単票形式で表示してます。 サブフォームで表示された表の中から1レコードを選ぶと、メインのフォーム にコピーし編集が出来るようにしています。 そしてメインフォームで変更された内容をAテーブルに書き出し、サブフォーム の内容も最新の内容に書き換わっている、という事をしているのですが、 サブフォームをRequeryすると、表示順序やレコードセレクタの位置が変わって しまうのです。 サブフォームを、レコードを選択した時の位置のままで、内容は最新の状態で 表示できるようにするにはどうしたらいいのでしょうか? よろしくお願いします。

  • Requeryしても並べ替えはされないのでしょうか

    【条件】*************************** (テーブル1) フィールド1 1 2 3 4 5 (クエリ1) SELECT テーブル1.フィールド1 FROM テーブル1 ORDER BY テーブル1.フィールド1; (フォーム1) レコードソース:クエリ1 既定のビュー:帳票フォーム コマンド3:コマンドボタン Private Sub コマンド3_Click() Me.Requery End Sub ************************************ 上記の条件で、3レコード目の「3」を「10」に変更し、 コマンド3を押下しても、10は3レコード目のままです。 フォーム1をバツボタンで閉じて、フォーム1を開きなおすと10は一番下に来ます。 Requeryで更新しているのに、なぜ並び替えがされないのでしょうか?

  • サブフォームに対してGoToRecordするには?

    フォームに対してRequeryすると先頭のレコードへ移動してしまうので Requeryする前のレコードの番号を取得して Requery後にそのレコード番号へ移動したいのですが Sub test() i = Forms("Form").Controls("SubForm").Form.CurrentRecord Forms("Form").Controls("SubForm").Requery DoCmd.GoToRecord acActiveDataObject, Forms("Form").Controls("SubForm"), acGoTo, i End Sub これをすると、実行時エラー2498 指定した式は、いずれかの引数とデータ型が対応していません。 になりますが、 どこがおかしいのでしょうか?

  • Access のフォームで新しい行を挿入する方法

    アクセスの表形式でフォームを作成した時、データの先頭を右クリックすると ボックスが表示され、切り取り、コピー、貼り付け と表示されますが、ここに 挿入 がありません。  そこで、ここでダブルクリックをする事により、行挿入を行おうと思いました。 実際やってみるとテーブルの中には新しいレコードが挿入されているのですが、フォームを再表示(Repaintメゾッドを使用)しても、作成されたレコードが表示されません。 この時、レコード件数も増えているのに、以前のままの表示です。追加した後の枝No.は変更されて表示されています。  レコードには、キー項目と枝No.があります。  最初、レコード件数は2件とします。 1件目と2件目の間に新しいレコードを挿入したいので、2件目をダブルクリックして、新しく枝No.「2」のレコードを作成し、元の枝No.「2」のレコードは「3」に変更している事はテーブルを開けてみて確認しています。  この時、フォームでも枝No.は Repaint 実行後、変更されて表示されています。  どのようにすれば、新しいレコードが表示する事が出来るでしょうか。 実際には、この表形式はサブフォームにしており、メインフォームから、この挿入イベントを実行したいのです。 メインフォームでイベントを実行後、新たにサブフォームだけ開けてみると、ちゃんと新しいレコードが表示され、レコード件数も3件になっています。  よろしくお願いいたします。

  • Accessのフォームで…

    Access 2010のフォームのリストボックスで、あるテーブルのフィールドの値を選択した場合に、同じテーブルの同じレコードにある違うフィールドの値を、テキストボックスに読み込みたいのですが、どうすれば出来ますでしょうか? VBAのサンプルソース等でも構いません。回答お願いしますm(_ _)m

  • Access レポートのレコードソースについて

    Access レポートのレコードソースについて Access2000を使っています。 VBAでテーブル一覧や構造を Debug.Print に出力する方法が、あるWebサイトで紹介されて いたのですが、Debug.Print ではなく、レポートに出力することは可能でしょうか・・? 一般的には、レポートのレコードソースには、クエリやテーブルを使うと思いますが・・・。 よろしくお願いします。

  • Access アクセスについて

    Accessでデータベースを作っています。 テーブル、クエリは下記のようになっており、リレーションシップで紐付けしてあります。 クエリからフォームを作成し、商品番号を入力することでマスタテーブルに登録されていれば自動で商品名等の情報が表示されるようになっています。(フォーム1) 商品番号を入力しカーソルが移動した時、マスタテーブルに該当する項目がなかった場合、マスタテーブルから作成した新規追加用のフォームが表示されるようになっています。(サブフォームではありません) 新規追加用フォームに商品名を入力し、閉じてもフォーム1の商品名の欄に反映されません。新規追加用フォームを閉じる時にVBAで”Requery”,”Refresh”もやってみましたがダメでした。商品番号を入力し直すと表示されます。 どうすれば自動で商品名が表示されるようになるか教えてください。 テーブル1(入力用) 1.ID(主キー) 2.商品番号 3.etc. テーブル2(マスタテーブル) 1.商品番号(主キー) 2.商品名 3.etc. クエリ 1.ID(テーブル1) 2.商品番号(テーブル1) 3.商品名(テーブル2) 4.etc.(テーブル2) 5.etc.(テーブル1)

  • Access2000で困ってます

    お世話になります Access2000で困っています あるデータベース(A)でVBAをさわっていたら おかしくなってしまいました そこで一週間ほど前にBackupのつもりで ファイル名を変えて保存した同じデータベース(B)を 使おうと思うのですがこの一週間であるテーブルのデータを 変更しています どのレコードのどのフィールドを変更したのかわかりません そこでデータベース(A)のテーブルとデータベース(B)のテーブルを 比較照合したいのですがどうすればうまくできるでしょうか? アドバイスお願いします

  • Access2000のレコード削除について

    Access2000のVBAにより、フォームに配置したコマンドボタンを押すことで、テーブルの全レコードを一度に削除したいのですが、どの様にすればよいのですか? 構文で教えて頂けると助かります。とても困っています。よろしくお願いします。

  • Access2003はチューニングは可能ですか?

    以下のように、レコード1件ずつ処理させるVBAをAccess2003で書いているのですが、処理が遅いです。(1件ずつなので当たり前ですが・・・) AccessやWindows2000をチューニングして、早くすることは可能でしょうか? 基本的にCPUやメモリの増設は金欠のため考えておりません。 あと、開始から終了までミリ単位で計測するVBAの書き方も知りたいです。   '開始 '先頭のレコードに移動する DoCmd.GoToRecord , , acFirst Do '処理 ' ... '次のレコード DoCmd.GoToRecord , , acNext Loop While Me.NewRecord = False   '終了

専門家に質問してみよう