tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルVBAでの同時処理の回避方法
記事No10416
投稿日: 2011/01/26(Wed) 16:02
投稿者よすみ
ネットワーク上にデータベースとして扱うエクセルファイル(A)を置き、
データの参照や登録を行うエクセルファイル(B)をVBAで作成し、
Bのコピーを複数の端末に配布しました。


複数の端末から、同時にAにアクセスした場合、
読取専用でOpenしてしまい、画面上にAが立ち上がってきます。

単品で動かしたときは、Aが画面に立ち上がることはありませんし、
読取専用で開かれてしまった場合、
当たり前ですが、更新を反映できず困っています。


そして、読取専用のAファイルを閉じても
プロジェクトエクスプローラに残っていて、
タスクマネジャーからは消えているんですが、
以降の操作はすべて残った読取専用ファイルにアクセスしているようです。



他で開いている場合は、エラーで返す等、Aの状況を知る方法はないでしょうか?
あるいは、回避するいい方法があれば教えていただきたいのですが…。


エクセルを開けるときは、
参照する時も、更新するときも
以下のようなプログラムでオープンしています。


Sub Sub_Test()
    Dim oCn As Object
    Dim oRs As Recordset
    Dim SQL As String
      
    Set oCn = CreateObject("ADODB.Connection")
    Set oRs = CreateObject("ADODB.Recordset")
    
    oCn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & sデータソース & ";" & "Extended Properties=""Excel 8.0;HDR=Yes;"";"

    SQL = "SELECT * FROM [Testテーブル$] "
    oRs.Open SQL, oCn, adOpenStatic, adLockOptimistic, adCmdText
    
    ※※※ここで参照・更新処理をかきこんでます。

    oRs.Close
    oCn.Close
    
    Set oRs = Nothing
    Set oCn = Nothing

End Sub


(「adLockOptimistic」の部分を参照の場合は 「adLockReadOnly」にかきかえたりしましたが、変化はありませんでした。)

[ツリー表示へ]
タイトルRe: VBAでの同時処理の回避方法
記事No10417
投稿日: 2011/01/27(Thu) 16:08
投稿者花ちゃん
注意事項を読んで守らないとレスが付きませんよ。
それに見るからに板違いのようだし。

> 他で開いている場合は、エラーで返す等、Aの状況を知る方法はないでしょうか?
> あるいは、回避するいい方法があれば教えていただきたいのですが…。

逆引きヘルプ内の[指定のファイルが使用中かどうかを調べる]はご覧になりましたか?

[ツリー表示へ]
タイトルRe^2: VBAでの同時処理の回避方法
記事No10421
投稿日: 2011/01/28(Fri) 13:24
投稿者よすみ
レスありがとうございます。

> それに見るからに板違いのようだし。
VB6のほうに当たるのか、こちらで大丈夫なのか分からなかったので…
申し訳ありません。

> 逆引きヘルプ内の[指定のファイルが使用中かどうかを調べる]はご覧になりましたか?
読取専用をブロックする等ADODB自身のメソッド?あるいは、排他処理のようなものがないのかなと思っていたのですが…
VB6でアクセスとの連携はしたことはあったのですが、
エクセルをデータベースとして扱うのは初めてなので、
認識違いかもしれませんが、
エクセルとして扱うのとADODBとして扱うことを混在させるイメージがわきませんでした。
逆引きヘルプを参考に、検証してみます。

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

[ツリー表示へ]