• ベストアンサー

Access+VB ふたつのフォーム

Access+VBAでフォームです。 ふたつのフォーム [A]と[B]があります。 どちらも同一のクエリをレコードソースとし、[A]も[B]も開かれて表示されています。 [A]を更新した時、[B]も更新されるようにしたいのですが、「データの競合」「他のユーザーを反映・・・」とメッセージが出ます。 どのようにしたら、スムースに更新、追加できるのでしょうか?

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

  • ベストアンサー
noname#22222
noname#22222
回答No.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ではないのでしょう! ※そういう推測で回答しています。

situmonnsya
質問者

お礼

ありがとうございます。 スムースに動いてます。 他が原因で多少不穏なうごきですが、解決できそうです。 また、よろしくお願いします。

その他の回答 (5)

  • takkunnet
  • ベストアンサー率74% (32/43)
回答No.5

#3です。 RequeryよりもRefreshの方が良いかもしれません。 両方試してみてください。

  • takkunnet
  • ベストアンサー率74% (32/43)
回答No.4

#3です。 RequeryよりもRefreshの方が良いかもしれません。 両方試してみてください。

  • takkunnet
  • ベストアンサー率74% (32/43)
回答No.3

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 と記入してやります。

situmonnsya
質問者

お礼

Versionは2000です。(古い?!!) Refreshで片方も更新できました。 ありがとうございました。

noname#22222
noname#22222
回答No.2

なお、[A]の列の一つひとつが更新されると同時に [A]保存->[B]再表示を行うには Form_KeyDownイベントで{Enter}を{Shift}{Enter}に置換し、[B]を再表示するという手があります。

situmonnsya
質問者

補足

VBAのコードでは、どのように記述したらよろしいですか?

noname#22222
noname#22222
回答No.1

1、[A]の更新作業。 2、[A]の更新内容を表に保存。 3、[A]から[B]の再表示を行う。

situmonnsya
質問者

補足

コードの記述の仕方を教えて下さい。

関連するQ&A

専門家に質問してみよう