2017-05-16 15 views
0

アクセス2007-2010のレコードが別のフォームに追加された後、サブフォームをリフレッシュする際に問題が発生します。それは非常に簡単かもしれないが、私はどこに失敗しているのかわからない。レコードが別のフォームに追加された後のサブフォームのリフレッシュ

は、私は3つの形式があります

main_userと呼ばれるメインユーザーフォームです
  • 一つ、
  • ユーザーがtb_requirements
  • と呼ばれる購買要件とにリンクされている別のものを作成し、別の1 tb_requirementsはtb_recordsと呼ばれます。

このシステムの主な考え方は、tb_requirementsに添付ファイル付きの一般購買要件を作成し、一般要件フォーム(tb_records)にいくつかの詳細要件を追加することです。

この機能は既に動作していますが、開いている要件と新しい要件のすべてを更新してメインユーザーの画面(main_user)に戻そうとすると、機能しません。主なユーザーフォームは、テーブルtb_requirementsのサブフォームを使用しています。だから、main_userのVBAで、私は次のコードを書いた:

Private Sub Form_Load() 

    Dim sSQL as String 

    sSQL = 'with the query I want to show in the screen 

    Me.tb_requirements.Forms.RecordSource = sSQL 

    Me.tb_requirements.Forms.Requery 

End sub 

私も.Refresh.Recalcを試み、それが機能していません。助けてもらえますか?

+0

Form_Loadは、フォームが最初に読み込まれるときに一度だけ実行されます。あなたの説明は、main_userフォームがすでに** **ロードされていることを意味し、ロードされている間に別のフォームにレコードが追加され、すでにロードされているmain_userに最新のものを訂正しますか?その場合、Form_Loadは再び実行されません。 –

+0

あなたの迅速なフィードバックのために@CPerkinsに感謝します。はい、それは私がしようとしているものですが、Form_Loadイベントが再び実行されないので、Form_OpenとForm_Currentで試していますが、新しい追加レコードで結果をリフレッシュしていません。フォームを再クエリーする前に実行する必要がある他の操作はありますか? – JHin84

+0

これは 'Form_Activate'です。 – Gustav

答えて

0

activateが必要な場合があります。メインフォーム上にフォーカスを戻すようなものです(IIRC)。

別のアプローチは、ダイアログモードで「セカンダリ」フォームを開くことです。 擬似コード:

- start working in main_user 
- open purchasing requirements -- but open it in *dialog mode*. 
    -> code in main_user stops 
     - work in purchasing requirements 
     - close purchasing requirements 
    -> code in main_user starts *from where it stopped*. 
    -> refresh the subform now - me.sfrmName.form.requery 

2行で入力できます。

1. on button click, open purchasing requirements in dialog mode; 
2. refresh subform. 

1から2の間では、購入要件に取り組んでいます。

0

こんにちは!私はすでにそれを理解した。私が欠けていたのは、新しいレコードを追加した後にフォームとテーブルを閉じることでした。

DoCmd.Close acForm, "tb_requirements", acSaveYes 
DoCmd.Close acTable, "tb_requirements", acSaveYes 

これをやってしまえば、.Requeryは機能します。それ以外の場合は同じデータが残っています。本当にありがとうございました。

関連する問題