- 締切済み
EXCEL VBAで複数人でのADO接続について
環境はEXCEL2003です。 EXCELからCSVファイルを読込み、 それに対して処理を加え一覧表示するVBAを組んでいます。 CSVファイルの読込みにはADOを使用しており、 指定しているプロバイダはMicrosoft.Jet.OLEDB.4.0、 複数の人が同時に実行する可能性があるプログラムです。 ここで問題なのですが、 Dim con As New ADODB.Connection '入力ファイル接続用コネクション Dim connectionString As String 'コネクション接続用文字列 (中略) Set rs = con.Execute(SQL) とSQLを実行する際に、 複数のユーザが同時に実行すると、 一人を除いて添付のようなエラーが発生してしまいます。 調べてみたところ、 http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200401/04010032.txt こちらのエラーが近いのかと思いますが、 >JET経由でのADOでDBをオープンする場合、必ず、1ファイル >1コネクションで行って下さい。 と記載があるところを見ると、 CSV読み込みの場合も複数人での接続は無理なのかな…と思いつつあります。 ※ファイルは、読取り専用で開ければ良いのですが、 ファイルに読取り専用属性を設定したりしても効果ありませんでした。 ですが一つのデータファイルを、複数の人が利用する、 というのは普通にある処理だと思うのですが、 こういうのはどうしたら良いのでしょうか? 根本的にADO接続でいければ万事解決ですが、 この手の処理方法で上手い方法があれば教えてください。 (普通のCSV読取りではなくADOを使っているのは、 SQLの条件指定で処理がかなり簡略化出来る仕様が背景にあります。)
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- temtecomai2
- ベストアンサー率61% (656/1071)
同時オープンは無理でしょう。 CSV を更新する必要が無いのなら Recordset を取得してすぐに Connection を切断するってのはどうでしょうか。 あとはエラーをトラップしてどう処理するかってところでしょうかね。 少し待ってから開けと表示するのか、開けるまで無限ループで待機させるのか。
お礼
ありがとうございます。 一点教えて頂きたいのですが、 >CSV を更新する必要が無いのなら Recordset を取得してすぐに > Connection を切断するってのはどうでしょうか。 どこかでRecordsetをCloseした後でないとConnectionの切断はしてはいけない、 と見た気がするのですが、Recordsetを取得したら先行してすぐに切ってしまって問題ないものでしょうか?