メインフォームのリフレッシュについて

このQ&Aのポイント
  • Access2003にて、メインフォームのリフレッシュを行いたいがうまくいかない。別フォームでデータを更新後、メインフォームに変更内容を反映させたい。
  • 試した方法として、別フォームのデータ更新が終了した後、Forms![メインフォーム名].requeryを試したが変化なし。また、サブフォーム内ロジックでのrequeryも試してみたが同様の結果。
  • メインフォームにはフォームロード時と同じように処理を走らせたいが、現在の方法では実現できない。サブフォームを含めたメインフォーム全体のリフレッシュ方法を知りたい。
回答を見る
  • ベストアンサー

Access メインフォームのリフレッシュについて

Access2003 にて、下記の手順で処理するプログラムを作成しています。 メインフォーム(埋め込みサブフォーム ※データシートビュー 一覧表) →埋め込みサブフォームの対象のレコードセレクタをダブルクリック。 →別フォームを起動し、データ入力更新。別フォームを閉じる。 →メインフォームのリフレッシュ し別フォームで変更した内容を反映させたい。 メインフォームのリフレッシュを行いたいのですが、うまくいきません。 ■試してみたこと メインフォーム、サブフォーム、別フォームとあり、 1. 別フォームのデータ更新が終了したあと、 別フォームを閉じる直前にForms![メインフォーム名].requery をしてみた メインフォームは別フォームを開く前の状態と、変化なし 2. 別フォームのデータ更新が終了したあと、別フォームを閉じ サブフォーム内ロジックで、Forms![メインフォーム名].requery をしてみた メインフォームは別フォームを開く前の状態と、変化なし 3. 別フォームのデータ更新が終了したあと、別フォームを閉じ サブフォーム内ロジックで、Me.requery をしてみた メインフォームは別フォームを開く前の状態と、変化なし ----- いずれもメインフォームには変化はありませんでした。 出来れば、メインフォームにはForm_Loadした時と同じように 処理を走らせたい(メインフォームを閉じることなくフォームロードから処理を再開させたい) と考えています。 サブフォームを含め、メインフォームごとリフレッシュするような処理はないでしょうか。 ご存知のかた宜しくお願いいたします。

  • -0-y
  • お礼率75% (59/78)

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

  • ベストアンサー
  • MAXIMAX
  • ベストアンサー率60% (50/83)
回答No.2

#1 です。余談ですが、DAO と ADO の選択の目安としては、Access オンリーの設計としていいか、汎用性を持った設計にしたいか、みたいなところではないでしょうか。 DAO は完全に Jet に特化したオブジェクトなので、Jet に対する速度や細かな操作が得意です。 ADO は OLE DB を経由するため、速度に若干ムラがあり、かゆいところに手が届きにくいところがありますが、OLE DB プロバイダを変更すれば、接続するデータベースの変更が容易という利点があります。 Access でクローズされたアプリには DAO のほうが合ってるのかもしれませんね。でも、私はDAO はあまり使ったことがありません。 この紛らわしい省略単語、なんとかならんもんですかね・・・・・・・。

-0-y
質問者

お礼

ありがとうございます

-0-y
質問者

補足

勉強になります。感謝いたします。 DAOを使ってみようかと思案中です。 昔、DAOを使ってAccessでプログラムを組んでいた人がいましたが このような理由だったんですね。 たしかに呼び方も、DAOとADOは紛らわしいですね(笑 丁寧な回答、大変助かりました。 また機会がありましたら、宜しくお願いいたします。

その他の回答 (1)

  • MAXIMAX
  • ベストアンサー率60% (50/83)
回答No.1

別フォームでの更新処理をどういった方式で実装されているのかがちょっとわからないのですが、ADO 使われている場合は、アプリケーションで独自に ADO のコネクションを作ると、そこにキャッシュバッファが作られて、Access 本体の処理との同期に遅れが出る、とうことが発生することがあったように思います。その場合、ちょっと詳細がわかりませんが、Access 本体が使っている ADO のコネクションを取得することができたかと思います。 ちなみにサブフォームはきちんと反映されている、ということでしょうか?サブフォームにも Requery 送ってみるのはどうでしょう??

-0-y
質問者

お礼

ありがとうございました

-0-y
質問者

補足

回答ありがとうございます。 キャッシュバッファですか、同期に遅れが、、、たしかに心当たりがあります(汗 Googleでコネクション関連で調べてみると、 「リクエリが効かない?」など色々な情報が出てきましたね。 http://www.accessclub.jp/bbs5/0009/vba2399-2.html <だめだった時> Dim objConn as ADODB.Connection Set objConn = New ADODB.Connection objConn.Open = CurrentProject.Connection  ↓ <OK> Dim objConn as ADODB.Connection Set objConn = CurrentProject.Connection とすると良いようですね。 大変良いヒントになりました。これで解決できそうです。 今からDAOにすべきか、ADOにすべきか、 これもADOの特性を理解しておく、いい機会とするか難しいとこですが(笑 Accessで使用する場合は、DAOの方が良いのでしょうかね? 頑張ってみます、ありがとうございました

関連するQ&A

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

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

  • Accessのメインフォームとサブフォームの使い方について

    Accessにてメインフォーム(単票形式)+サブフォーム(帳票形式)を使って進捗管理をするデータベースを作っており、新規にメインフォームで入力し、サブフォームで入力したデータを表示させてます。 サブフォームで更新したいレコードをクリックしたときにメインフォームでそのレコードを表示させるにはどのようにすればよろしいのでしょうか?

  • Access メインフォーム サブフォームにて

    お世話になります。 Accessにて メインフォームにコマンドボタンを置いて、クリックするとサブフォームのレコードが 次に行くようにしたいのですが、 コマンドボタン クリック Forms![メインフォーム]![サブフォーム名].Form!フィールド名.SetFocus DoCmd.GoToRecord , , acNext メインフォームとサブフォームのレコードが次に行ってしまいます。 サブフォームだけ次のレコードに行くには、どのようにすれば良いのでしょうか。 分かる方教えて下さい。 宜しくお願いします。

  • Access2000 フォーム/サブフォームについて

    質問させていただきます。 フォーム/サブフォーム形式で画面を作っています。サブフォームは帳票形式で、複数のレコードを表示しており、各行の左にコマンドボタンを用意し、それをクリックすると、更新クエリー、削除クエリーが動くようにしています。 しかし、更新、削除クエリーとも ”0件のレコード”で処理が正しく動作しません。 ちなみに、両クエリの抽出条件は・・・ [Forms]![メインフォーム]![サブフォーム]![商品コード] しかし、フォームを使わずクエリーから実行する(パラメータに条件を手入力する)と正しく動作します。 記述ミスがないか何度も見返したのですが・・・。 「サブフォームの目的の行の商品コードと一致するデータを処理する」としたいのですが・・・。

  • ACCESSの絞込み操作

    説明不足になると思いますが その場合補足します、のでよろしくお願いします フォームのコンボを設け、ここに分類コードを 入れると該当データが表示されました これをサブフォームを利用するように変更しました ロジック的には このサブフォームはクエリで分類コードによって より分けています つまり、抽出条件に [forms]![フォーム名]![コンボ2] と入れています。 これは見ると、きちんとパラメータがわたされて データを選択されています さて、 サブフォームに分割しない前はコンボの プロパティで更新後の処理に DoCmd.requryを入れています サブフォームにした場合、これに変わる処理 として、何を実行していいか、教えてください

  • Accessでサブフォームの合計をメインフォームに

    Access2007で開発しています。 メインフォームにサブフォームを貼り付けており、 サブフォームに入力した「数量」「単価」から「金額」を計算して表示し、 その合計金額をメインフォームのテキストボックス(非連結)に表示しようと しています。 サブフォームは行単位で追加、削除が可能です。 サブフォームの更新結果が正しくメインフォームに表示されずに困っています。 おわかりの方、おられましたらお教え頂きたく、よろしくお願い致します。 【サブフォーム】   ・レコードソース:T_明細   ・[詳細]項目:数量・・・レコードソース=T_明細・数量        単価・・・    〃    =T_明細・単価        金額・・・数量および単価のAfterUpdateで計算して表示。    [フォームフッター]項目:金額計・・・コントロールソース=Sum([金額])   ・Vbaコード:   Private Sub Form_AfterUpdate()   Forms![メインフォーム].合計計算   End Sub   Private Sub Form_Delete(Cancel As Integer)   Forms![メインフォーム].合計計算   End Sub 【メインフォーム】  ・テキストボックス:「合計金額」(非連結) Public Sub 合計計算()    Me.サブフォーム.Requery   方法1: Me!合計金額 =DSum("金額", "T_明細", (キー項目指定 記述省略))   方法2: Me!合計金額 = Me![サブフォーム].[Form].[金額計] End Sub ここで、 方法1の場合:数量、単価の変更入力及び行追加は正しく動作するが、          行削除の後、メインフォームの「合計金額」が再計算されず、変更前のまま。 方法2の場合:数量、単価の変更入力及び行追加すると、「合計金額」が”0”になる。          行削除しても「合計金額」は変わらず、変更前のまま。 どちらも、サブフォオームの「金額計」は正しく表示されています。 以上、よろしくお願い致します。

  • ACCESS2000のメインフォームサブフォーム間の移動

    Access2000でメインフォームの中に詳細を確認/入力するためのサブフォームを作成しています。 メインフォームの中のコントロールを最後まで入力(enterで移動)していくと、メインフォームの最後のコントロールの次はサブフォームの最初のコントロールに移動します。(これは普通ですよね?) サブフォームはデータの詳細によっては1レコードで終わるものもありますし、複数レコードにわたるものもあります。 サブフォームの入力が終了したときに、キー操作でメインフォームの次のレコードの頭のコントロールに移動する事はできますか? マクロをAccessの方から設定するくらいならできるのですが、自分でSQLをうんぬんする知識はありません。 よい方法があったら教えてください。

  • ACCESSで、メインフォームとサブフォームがあるとき・・・

    Accessで、メインフォームとサブフォームがあり、メ インフォームのテキストボックスで期間を指定し、再 クエリを行うマクロボタンでサブフォーム上に期間指 定したデータのみが表示されるようにしています。 また、Access起動時に開くフォームがあり、そのフォ ームに、先ほど上述したメインフォームが開くマクロ ボタンを作成したところ、パラメータの入力画面が出 てきてしまいました。 恐らく、サブフォームの抽出用のクエリに設定してあ るものだと思いますが、これが表示されないようにす ることは出来ないのでしょうか?

  • ACCESSでメインフォーム上のオプショングループに設定したマクロでサブフォームに抽出結果をだしたい

    メインフォームとサブフォームがあり、 メインフォーム上でオプショングループ(年月日の月のみ) を作成しました。 例えばオプショングループの「1月」ボタンを クリックすると、サブフォームの1月のデータが すべて抽出されるようにしたいと思うのです。 普通のフォームにおけるマクロでは、 条件に[Forms]![メインフォーム名]![指定月(オプショングループの名前です)]=1 where条件式に[月]=1 とすると、きちんと実行されるのですが、 サブフォームにおいては、これではできないのです。 どこをどうすればよいのかご回答のほどよろしくお願いいたします。

  • MS-ACCESSのフォーム切り替え表示について

    フォームA(少量データ)からフォームB(大容量データ)を呼び出して表示させる方法について 教えてください。 まず、フォームAは複数の個人名のボタンとサブフォームで全員の最新情報が表示される ものを作っています。 この個人名のボタンをクリックするとフォームBにその個人の全情報を表示させる仕組みなのですが、フォームBは情報量が多い為、表示させるのに時間がかかります。 そこで下記のようなVBAを記述し、Do~LoopでフォームBが開くまでの時間を稼ごうと思っても 次の処理が行なわれてしまい、エラーになってしまいます。 Private Sub ボタン_Click() DoCmd.OpenForm "フォームB" Do Until SysCmd(acSysCmdGetObjectState, acForm, "フォームB") = acObjStateOpen DoEvents Loop Application.Forms![フォームB].Controls![担当者名] = "担当A" Me.フォームB.Requery End Sub これでフォームBが開くまで待ってから次のステップのフォームB内の条件設定や Requery処理を行なうと思っているのですがうまくいきません。 DoEvents処理が入っているせいかと思い、はずしたのですがそれでもうまくいきません。 もともとはフォームBだけで運用していたのですがデータ量が増えて表示に時間がかかり すぎるので新たに項目は同じで件数の少ない最新情報のみのテーブルを作成し、 それをもとにフォームAを作成しています。 ですのでフォームA,Bともに同じようなサブフォームになっており、またそれぞれの サブフォームを構成するテーブルが異なる為に1つのフォームでの処理ができません。 拙い説明ですがどなたかご教授願います。

専門家に質問してみよう