- ベストアンサー
Access+VB ふたつのフォーム
Access+VBAでフォームです。 ふたつのフォーム [A]と[B]があります。 どちらも同一のクエリをレコードソースとし、[A]も[B]も開かれて表示されています。 [A]を更新した時、[B]も更新されるようにしたいのですが、「データの競合」「他のユーザーを反映・・・」とメッセージが出ます。 どのようにしたら、スムースに更新、追加できるのでしょうか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) On Error Resume Next If KeyCode = vbKeyReturn Then DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 Forms("商品一覧2").Requery End If End Sub ※データの競合が発生しているからmdbではないのでしょう! ※そういう推測で回答しています。
その他の回答 (5)
- takkunnet
- ベストアンサー率74% (32/43)
#3です。 RequeryよりもRefreshの方が良いかもしれません。 両方試してみてください。
- takkunnet
- ベストアンサー率74% (32/43)
#3です。 RequeryよりもRefreshの方が良いかもしれません。 両方試してみてください。
- takkunnet
- ベストアンサー率74% (32/43)
AccessのVersionは何ですか? ちなみに当方は 2002 なのですが、situmonnsyaさんのように同一クエリーをレコードソースとしたフォーム[A]と[B]を両方開いた状態で[A]を更新すると自動的に[B]の表示も変わってしまいます。。。 そのため、おそらくそれよりも古いバージョンという前提で記入します。 (それより新しい場合は他の原因が考えられるため) フォーム[A]の「更新後処理」に「プロシージャ」を追加します。 その処理で「[B]の表示を更新する」としてやります。 具体的には Private Sub Form_AfterUpdate() Forms("B").Requery End Sub となります。 逆に[B]には Private Sub Form_AfterUpdate() Forms("A").Requery End Sub と記入してやります。
お礼
Versionは2000です。(古い?!!) Refreshで片方も更新できました。 ありがとうございました。
なお、[A]の列の一つひとつが更新されると同時に [A]保存->[B]再表示を行うには Form_KeyDownイベントで{Enter}を{Shift}{Enter}に置換し、[B]を再表示するという手があります。
補足
VBAのコードでは、どのように記述したらよろしいですか?
1、[A]の更新作業。 2、[A]の更新内容を表に保存。 3、[A]から[B]の再表示を行う。
補足
コードの記述の仕方を教えて下さい。
お礼
ありがとうございます。 スムースに動いてます。 他が原因で多少不穏なうごきですが、解決できそうです。 また、よろしくお願いします。