• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:AccessDBへのInsertとSelectタイミングについて)

AccessDBへのInsertとSelectタイミングについて

このQ&Aのポイント
  • 現在.NET Framework 3.5にて業務アプリを開発しています。主にデータベース編集を目的としたアプリです。(DBはAccess2000)Insert/Deleteについては、データソース接続し、TableAdapterのクエリを利用しています。Selectについては、Microsoft.Jet.OLEDB.4.0経由で取得しています。このような条件で、Insert/Delete処理を行った直後にSelect処理でデータを取得すると、Insert/Deleteが反映されていないデータが取得されてしまいます。
  • InsertとSelectのタイミングに関する問題です。現在、.NET Framework 3.5で開発している業務アプリでは、データベース編集が主な目的です。使用しているデータベースはAccess2000です。Insert/Delete処理では、データソースに接続し、TableAdapterのクエリを使用しています。一方、Select処理では、Microsoft.Jet.OLEDB.4.0を経由してデータを取得しています。しかし、Insert/Delete処理の直後にSelect処理を行うと、反映されていないデータが取得されてしまいます。
  • AccessDBへのInsertとSelectのタイミングに関する問題です。私は現在.NET Framework 3.5を使用して業務アプリを開発しています。このアプリケーションは主にデータベース編集を目的としており、データベースはAccess2000を使用しています。Insert/Delete処理では、データソースに接続し、TableAdapterのクエリを使用しています。一方、Select処理では、Microsoft.Jet.OLEDB.4.0を通じてデータを取得しています。しかし、Insert/Delete処理後に直ちにSelect処理を行うと、反映されていないデータが取得されてしまいます。これを回避する方法はありますか?

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

>Insert/DeleteもTableAdpterのCommand経由ではなく、 >OLEDBのCommandで >行ってみては?という内容で間違いないでしょうか? そうです。本来はこういう場合はトランザクション処理 をして、データの出し入れに矛盾をきたさないように するのですが。あまり、その場しのぎはよくないのでは。 トランザクション処理となると少しプログラムが追加 になりますが、 >かなり改修規模が大きくなってしまうので ということであれば、あれもこれもとお勧めするのは 躊躇します。

5dogs_fuji
質問者

お礼

回答ありがとうございます。 やはりトランザクション処理はすべきですね。 まずはプロトタイプリリースを優先させるべく、一度接続を解除する方法で 回避しました。 正式リリース時には根本解決の為、トランザクション処理を追加して行きます。 的確なアドバイスありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

次の2つの方法でお試しください. (1)Insert/Delete処理を行った直後 ... connForInsert.Close(); connForInsert = null; //新しい接続Forクエリ connForSelect = new System.Data.OleDb.OleDbConnection(strConn); ... (2)Insert/Delete処理を行った直後 .... //insert処理 System.Threading.Thread.Sleep(500); .... //Select処理 ご参照ください。

参考URL:
http://www.werunsoft.com/tips.aspx?db=access&id=80
5dogs_fuji
質問者

お礼

ご回答ありがとうございます。 いろいろなサイトを調べたところ、OLEDB接続を一度閉じ再度オープンし対応している方がいました。 両方試しまして、結果を報告したいと思います。

すると、全ての回答が全文表示されます。
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

Commndオブジェクトを使って、SQL文(Insert/Delete)を 指定して、Executeした後、Select処理したらどうなりますか。

5dogs_fuji
質問者

お礼

早速の回答ありがとうございます。 Insert/DeleteもTableAdpterのCommand経由ではなく、OLEDBのCommandで 行ってみては?という内容で間違いないでしょうか? かなり改修規模が大きくなってしまうので、確認でき次第報告します。

すると、全ての回答が全文表示されます。
このQ&Aのポイント
  • CanoScan LIDE400を購入したが、開封時にロックスイッチが閉まっているのに原稿台カバーが固定されておらず、仕様か不良か疑問。
  • ロックスイッチの固定・解除方法についても知りたい。
  • キヤノン製品に関する質問。
回答を見る