• 締切済み

SQLクエリでデータベースが壊れる?

AccessアプリでSQL Serverデータベースを更新しています。 データベースをODBCデータソースとして登録して、AccessdeそのODBCデータソースへのリンクテーブルを作っています。 データベースが何回か壊れたのですが、AccessVBAから発行したリンクテーブルへのSQLクエリでデータベースが壊れるようなことはあるんでしょうか? あるとしたら、そのクエリを発行すると必ず壊れると思うんですが・・・。 同じAccessアプリを使っても、データベースが壊れない環境もありますし・・・。 データベースが壊れた原因がわからなくて困っています。 Windows 7、SQL Server 2008 R2 Express です。

みんなの回答

  • IDii24
  • ベストアンサー率24% (1597/6506)
回答No.4

他の方も書いてるようにSQLを書かないとわかりませんよ。 >パススルークエリで、INSERT/UPDATE/DELETEするという意味です。 疑問だらけですが、これをVBAでするにはその都度CreateQueryDefでクエリをAppendする必要があると思います。なぜそんな面倒なことをするのでしょうか? 直に発行しない理由がわかりません。 さらにそれなリンクテーブルはいらないと思います。フォームなどを作るのに面倒だからという使い方はありますが、こういうことをするとリンクテーブルで開いたテーブルのロックと更新のクエリのロックがバッティングしますから当然壊れます。

real_neo
質問者

お礼

ありがとうございました。

  • IDii24
  • ベストアンサー率24% (1597/6506)
回答No.3

質問にはリンクテーブル更新と書いてあり、パススルークエリーを使ってると捕捉があると最早何をやっているのか解りません。パススルーでリンクテーブルを更新は不可能です。というか意味がないので。

real_neo
質問者

補足

説明不足ですいません。 リンクテーブル更新というのは、リンク先のテーブルに対してパススルークエリで、INSERT/UPDATE/DELETEするという意味です。

  • akubi_m
  • ベストアンサー率22% (12/54)
回答No.2

何をもって「データベースが壊れる」と表現しているのか不明ですが、クエリ発行後に障害が発生するのであれば、クエリに問題がある可能性はあります。 そのクエリも不明なので、現在の情報ではこれ以上は回答できません。

real_neo
質問者

補足

回答ありがとうございます。 データベースが壊れたと判断したのは、以下の理由からです。 ・Management Studioのオブジェクトエクスプローラで、問題のデータベースを右クリックしても、すべてのメニューがDISABLEになっている。 ・Management Studioのオブジェクトエクスプローラで、問題のデータベースのツリーを展開できない。 ・バックアップファイルを使ってリストアすると、アクセスできるようになる。 > クエリ発行後に障害が発生するのであれば、クエリに問題がある可能性はあります。 これだと、どの環境でも発生するような気がしませんか?

  • IDii24
  • ベストアンサー率24% (1597/6506)
回答No.1

あると思いますよ。リンクテーブルはあくまでもAccessの機能でクエリを発行しています。つまり制御不能です。例えばVBAでどのような更新を掛けてるかですが、大量の更新であればリンクテーブルは一件ごとに解析して、別のクエリをSQLサーバーへ投げます。このSQLはAccessが作ったものでロックの排除とか件数などの制御もしていません。どの単位で更新を掛けるかも不明です。これを大量発行した場合SQLサーバー側ではまずロックの制御やログテーブルへの書き出しなどに影響が出ます。また遅延書き込みの制御においてメモリ内での処理が追いつかない場合があります。また変なソートが絡むとTempデータベースが追いつきませんね。処理がバッティングするとそれぞれのシステムデーターベースの整合性が保てずデーターベースは壊れます。 つまりリンクテーブルに書き込むというのはやめたほうが良い処理ということになります。 ちゃんと直接SQLサーバーへADO接続して書き込むべきです。VBAであれば当然ADOを使っているはずでわざわざローカルへ書き込む理由もわかりませんけど?

real_neo
質問者

お礼

回答ありがとうございます。 > ちゃんと直接SQLサーバーへADO接続して書き込むべきです。 直接書き込んではいませんけど、パススルークエリを使っています。

関連するQ&A