Access 2007 で、コンボボックスを含むフォームから、DAO による INSERTができないことがある

現象

Microsoft Access 2007 や Access 2010で、コンボボックスが配置されたフォームを利用した際、DAO の Execute メソッドにてSQL Server のリンクテーブルへデータを追加することができない現象が発生する場合があります。

原因

この現象は、コンボボックスの値集合ソースに設定された SQL Server のリンクテーブルを用いたクエリが非同期で実行されることを起因として発生します。

コンボボックスの値集合ソースに設定された SQL Server へのクエリと、データを追加する SQL Server への INSERT のクエリが、同じトランザクション ID により実行されることがあります。

この場合、INSERT がコミット待ちの状態となり、フォームを閉じることで Rollback されます。
このため、データが追加されない現象が発生します。

回避策

コンボボックスにフォーカスが移動する前のコントロールの AfterUpdate イベント等に、DoEvents を追加します。
DoEvents が実行されることにより、コンボボックスのソースに指定されたクエリが実行されるタイミングが変わり、現象の発生を抑制することができます。

なお、マイクロソフトではこの問題に関しての修正予定はありません。

状況

マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
プロパティ

文書番号:2703865 - 最終更新日: 2016/09/29 - リビジョン: 1

Microsoft Office Access 2007, Microsoft Access 2010

フィードバック