こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

AccessアプリでSQL Serverデータベースを更新しています。
データベースをODBCデータソースとして登録して、AccessdeそのODBCデータソースへのリンクテーブルを作っています。

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

Windows 7、SQL Server 2008 R2 Express です。

投稿日時 - 2014-10-24 11:45:24

QNo.8801377

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

12人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(4)

ANo.4

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

投稿日時 - 2014-10-25 09:41:33

お礼

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

投稿日時 - 2014-10-25 16:02:43

ANo.3

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

投稿日時 - 2014-10-24 18:54:56

補足

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

投稿日時 - 2014-10-24 19:24:41

ANo.2

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

投稿日時 - 2014-10-24 12:27:23

補足

回答ありがとうございます。

データベースが壊れたと判断したのは、以下の理由からです。
・Management Studioのオブジェクトエクスプローラで、問題のデータベースを右クリックしても、すべてのメニューがDISABLEになっている。
・Management Studioのオブジェクトエクスプローラで、問題のデータベースのツリーを展開できない。
・バックアップファイルを使ってリストアすると、アクセスできるようになる。

> クエリ発行後に障害が発生するのであれば、クエリに問題がある可能性はあります。
これだと、どの環境でも発生するような気がしませんか?

投稿日時 - 2014-10-24 12:39:35

ANo.1

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

投稿日時 - 2014-10-24 12:23:33

お礼

回答ありがとうございます。

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

投稿日時 - 2014-10-24 12:41:35

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-