|
247b さん ありがとうございます
>Q1
>でトランザクションを仕掛けられます。
申し訳ないですが
こちらについては排他処理が完了してから試してみたいと思います
(取りあえず、追加クエリの発行で動作しますので)
>Q3
>最新状態を表示するシステム上の必要性がある場合は、上記のようなフォームのプロパティで更新をコントロールしたほうが良いと思います。
についてなんですが
Set RS = DB.OpenRecordset(strSql, dbOpenSnapshot)
Set RS = DB.OpenRecordset(strSql, dbOpenDynaset)
どちらも
forms("メインフォーム").Controls("サブフォーム").requery
で、更新データを表示することは出来ました
これを
タイマー等で動作させる
という理解でよろしいでしょうか
お詫び
Private Sub Test2()
では、排他チェックが出来ていませんでした
色々試している内に、出来ているのかと錯覚してしまいました
また、希望の操作は
>Q3 Test2のサーバーMDBにレコード追加する APP1_DT更新.MDBは
> 1人しか使用しません
でなくて
複数のAPP.MDBからDT.MDBを編集したい
となりました
APP.MDBから
DT.MDBを編集時のみ、排他で開いて、直ぐ閉じる
DT.MDBを開きに行って排他だったら、少し待機し再チャレンジ
みたいにすれば可能かなと思っています
こんなことが出来るが自信がありませんが・・・
取りあえず、
サーバー上のDT.MDBが排他状態か取得してみようと下記試しましたが
うまく出来ません
アドバイスよろしくお願いいたします
MSの
[AC97]排他的に開かれたデータベースかどうかを判定する方法
tp://support.microsoft.com/default.aspx?scid=kb;ja;117539
を試してみました
'戻り値:データベースが排他モードで開かれている場合 = -1
' データベースが共有モードで開かれている場合 = 0
Option Explicit
Declare Function SetCurrentDirectory Lib "Kernel32" Alias _
"SetCurrentDirectoryA" (ByVal lopathname As String) As Long
Public Function IsCurDBExclusive2(tg_f As String) As Integer
Dim db As Database
Dim hFile As Integer
hFile = FreeFile
'カレントドライブ移動 下記2行、api宣言 途中追加
SetCurrentDirectory Left(tg_f, InStrRev(tg_f, "\") - 1)
Debug.Print CurDir
Set db = DBEngine.Workspaces(0).Databases(0)
'If Dir$(db.Name) <> "" Then
If Dir$(tg_f) <> "" Then
On Error Resume Next
Open tg_f For Binary Access Read Write Shared As hFile
Select Case Err.Number
Case 0
IsCurDBExclusive2 = 0 'False
Debug.Print "0 共有モード"
Case 70
IsCurDBExclusive2 = -1 'True
Debug.Print "-1 排他モード"
Case Else
IsCurDBExclusive2 = Err.Number
Debug.Print Err.Number & "" & Err.Description
End Select
Close hFile
On Error GoTo 0
Else
'MsgBox db.Name & "は、見つかりません。"
Debug.Print tg_f & "は、見つかりません。"
End If
End Function
下記では、デイレクトリ移動はしていません(↓以下で ドライブ移動追加)
自pcで開いているMDBでは
call IsCurDBExclusive2("C:\cp2\2010\201003\LDB Viewer Form\PJ_DT.mdb")
0 共有モード /PJ_DT.mdbを閉じている特
-1 排他モード /PJ_DT.mdbを開いている特
C:\cp2\2010\201003\LDB Viewer Form\PJ_DT2.mdbは、見つかりません。 /無いファイル指定時
と動作できましたが
ファイルサーバー上のMDBを開いてテストすると
call IsCurDBExclusive2("\\sv\test02_リンク無\PJ_DT.mdb")
0 共有モード /PJ_DT.mdbを閉じている特
0 共有モード /PJ_DT.mdbを開いている特
\\Tar-fs-dfs\dfs\083見積部共同作業\方針シート\test02_リンク無\PJ_DT2.mdbは、見つかりません。
で
排他モードが取得できていません
↓以下で ドライブ移動追加
接続先がネットワークということで
'カレントドライブ移動 ファイルのパス取得して引数にしています
SetCurrentDirectory Left(tg_f, InStrRev(tg_f, "\") - 1)
をしてみましたが
call IsCurDBExclusive2("\\sv\PJ_DT.mdb")
\\sv
0 共有モード
となってしまいます
もう一度時PCでPJ_DT.mdbを開いて試すと
call IsCurDBExclusive2("C:\cp2\2010\201003\LDB Viewer Form\PJ_DT.mdb")
C:\cp2\2010\201003\LDB Viewer Form
0 共有モード
となってしまいました ??
Open tg_f の指定はあっていると思うのですが・・・・
ちなみに
このAPP.MDBはマイドキュメントにあります
どうすれば、ファイルサーバー上のMDBが排他で開いているか判定できるでしょうか
わかり難いと思いますがよろしくお願いいたします
|
|