• ベストアンサー
  • 困ってます

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

AccessDBへのInsertとSelectタイミングについて 現在.NET Framework 3.5にて業務アプリを開発しています。 主にデータベース編集を目的としたアプリです。(DBはAccess2000) Insert/Deleteについては、データソース接続し、TableAdapterのクエリを利用しています。 Selectについては、Microsoft.Jet.OLEDB.4.0経由で取得しています。 このような条件で、Insert/Delete処理を行った直後にSelect処理でデータを取得 すると、Insert/Deleteが反映されていないデータが取得されてしまいます。 これを回避する方法を教えてください。 (非常に低レベルな質問かと思いますが、何卒よろしくお願い致します。)

共感・応援の気持ちを伝えよう!

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

  • ベストアンサー
  • 回答No.3

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

その他の回答 (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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

  • 回答No.1

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • 「SELECTして取得できない場合、INSERT」の不完全さの改善

    はじめまして。 ユニークキー設定しているカラムに、 SELECTして取得できない場合、INSERTの処理をすると 違うセッションでタイミングによってINSERTがエラーになってしまうと思います。(以下参照) -------------------------------------- 時間  SESSION1     SESSION2 ↓    SELECT→× ↓                SELECT→× ↓    INSERT→○ ↓                INSERT→× -------------------------------------- この様な場合、SESSION2を生かすには、その後SELECTを再度実行すればよいと思うのですが、他によい方法はないのでしょうか? 何かございましたら、ご教授お願いいたします。 各バージョン MySQL5.0 (PHP5.1)

  • インサート処理のスピード

    n件のデータを (1)SELECT INSERTで処理するのと、 (2)SELECT文をカーソルループにして1件ずつINSERTするのでは 処理時間は結構違うのでしょうか? 手元に実行環境がないためご存知の方がいらっしゃったらご教授下さい。 (SQLSERVERかORACLEかなどは問いませんので)

  • AUTO_INCREMENT の値をINSERT前に知りたい

    PHP(PEAR)+MYSQLでWEBアプリを作成しているのですが、AUTO_INCREMENTを設定した値をデータのINSERTを行う前に取得したいのですが、どのようにすればいいのでしょうか?INSERT後であればLAST_INSERT_ID()やmysql_insert_id()で取得できるのは分かっているのですが…。ちなみに現在のテーブル型はInnoDBです。MySQLもしくはPearの命令でお分かりになる方お教えください。よろしくお願いします。

  • SELECT実行中にINSERTしたい

    テーブルTに対し、データ抽出に数分かかるようなSELECT文を実行しているとして、 そのSELECT文の実行中にInsertしたらどのような挙動になるでしょうか。 (INSERTした瞬間にエラーが発生する?) また、SELECT文の実行中にInsertしたら、 「SELECT文が実行終了するまで待って、そのあとにINSERTする」 という動きにしたい場合、どのように設定(or SQLを書けば?)すればよいでしょうか。

    • ベストアンサー
    • MySQL
  • DBへのinsert後のid(auto_increment)の取得

    お世話になってます。質問ばかりで恐縮ですが、お知恵をお借りしたく投函させて頂きます。 mysql_connect('localhost','root','******'); mysql_select_db('test'); $hiduke = date("y-m-d"); $sql = "insert into test_tb values(0, '$hiduke', …)";//0はフィールド名id(auto_increment属性) mysql_query($sql); 上記のようなコードにて、MySQLへデータをinsertしているのですが、このとき、auto_increment属性を持ったフィールド名(id)の番号を取得するには、どのようなコードになるのでしょうか? http://dev.mysql.com/doc/refman/4.1/ja/odbc-and-last-insert-id.html 上記マニュアルに、SELECT LAST_INSERT_ID()を使うと説明がありますが、実際のコード(PHPスクリプト)にするところまで結びつける事が出来ません。 id番号を取得し、その番号をセッションに代入させたいのです。 初歩的な質問ばかりと、お恥ずかしい限りですが、アドバイスのほど宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • バルクINSERT直後に、最後のIncremet値は取得できますか?

    PHPからMySQLへトランザクションを使わずに、 INSERT INTO test (id,count) VALUES (5,5),(6,6) のようにINSERTした直後に、SELECT LAST_INSERT_ID(); としても、5が返却されてしまいます。 これはMySQLの仕様でしょうか? 又、 SELECT LAST_INSERT_ID() ではなく、 SELECT LAST_INSERT_ID() FROM test; のようにテーブル名を指定する方法は何か意味があるのでしょうか? テーブル名を指定すると、テーブルにあるレコード数分 データが返却されてしまいました。。

    • ベストアンサー
    • MySQL
  • [ADO.NET]Accessの日付型にデータをInsertするには?

    言語はVB.NETでDBはAccess2003、OleDbで接続をしています。 テーブルに日付型のフィールドがあるのですが、 SQL文でInsertしようとすると、 System.Data.OleDb.OleDbException: 更新可能なクエリであることが必要です。 という例外がスローされます。 SQL文としては、 INSERT INTO TEST_TABLE (name,updatetime) VALUES ('テスト',DateValue('2006/12/11 18:00:00')); というような構文になっています。 初歩的な不明点ですが、ご教授お願いします。

  • select→OK insert→NG

    ASP(VBSCRIPT)で、ACCESSに接続するプログラムを作成しています。Microsoft JET Database Engine を利用してACCESSに接続したいのですが、SQL文のinsert及びupdateの時は、以下エラーメッセージがでてうまくいきません。但し、SELECT及びDELETEはうまくいきます。 セキュリティの問題だと思うのですが、何か分かれば教えてください。 環境  IIS4.0  WINNT4.0 SP6     MSG  Microsoft JET Database Engine エラー '80040e14' UPDATE ステートメントの構文エラーです。

  • delete⇒insert

    web開発の現場にて、 既存データの更新処理を行うとき、 (1)update (2)delete⇒insert というように2パターンを見かけます。 (1)と(2)の違いあるのでしょうか、 また、どのような場面においてどちらを使用したほうがいい など教えてください。

    • ベストアンサー
    • MySQL
  • ORACLEでINSERT処理が遅い

    WINDOWS2000SERVER+ORACLE8.1.7で在庫管理ソフトを使用しています 。システム会社が作ったソフトなのですが、登録処理 (INSERT文のみで作られていると言っていました)が非常に遅くなって います。 10レコードのデータを登録するのに2分かかりました。 INSERT処理が遅くなる要因などご存知の方 いましたら、ご教示下さい。 (SELECT文は登録処理では使用していないとの事) ●システム会社の指示で「データをEXPORT/INPORTするバッチファイルを送りますので実行して下さい」との事で(EXPORT/INPORT実行すると早くなると言われました) 対象のテーブルをEXPORT/INPORTし、サーバ再起動しましたが、まだまだ遅いです。(10秒程早くなりました) システム会社の対応が非常に不安なのでここで質問させて頂きました。