みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

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

締切り済みの質問

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の条件指定で処理がかなり簡略化出来る仕様が背景にあります。)

投稿日時 - 2011-03-23 22:19:14

QNo.6615603

すぐに回答ほしいです

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

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

回答(1)

ANo.1

同時オープンは無理でしょう。
CSV を更新する必要が無いのなら Recordset を取得してすぐに Connection を切断するってのはどうでしょうか。

あとはエラーをトラップしてどう処理するかってところでしょうかね。
少し待ってから開けと表示するのか、開けるまで無限ループで待機させるのか。

投稿日時 - 2011-03-24 09:34:40

お礼

ありがとうございます。
一点教えて頂きたいのですが、
>CSV を更新する必要が無いのなら Recordset を取得してすぐに
> Connection を切断するってのはどうでしょうか。
どこかでRecordsetをCloseした後でないとConnectionの切断はしてはいけない、
と見た気がするのですが、Recordsetを取得したら先行してすぐに切ってしまって問題ないものでしょうか?

投稿日時 - 2011-03-25 07:08:33

あなたにオススメの質問