Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1681 / 9994 ←次へ | 前へ→

【11604】Re:MDBの分離 と レコード操作
質問  pon  - 10/4/12(月) 18:16 -

引用なし
パスワード
   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が排他で開いているか判定できるでしょうか

わかり難いと思いますがよろしくお願いいたします

3,442 hits

【11601】MDBの分離 と レコード操作 pon 10/4/9(金) 15:26 質問[未読]
【11602】Re:MDBの分離 と レコード操作 pon 10/4/9(金) 15:40 発言[未読]
【11603】Re:MDBの分離 と レコード操作 247b 10/4/12(月) 10:16 発言[未読]
【11604】Re:MDBの分離 と レコード操作 pon 10/4/12(月) 18:16 質問[未読]
【11605】Re:MDBの分離 と レコード操作 247b 10/4/12(月) 23:07 発言[未読]
【11606】Re:MDBの分離 と レコード操作 pon 10/4/14(水) 18:37 質問[未読]
【11607】Re:MDBの分離 と レコード操作 247b 10/4/14(水) 19:26 発言[未読]
【11608】Re:MDBの分離 と レコード操作 pon 10/4/15(木) 14:27 発言[未読]
【11609】Re:MDBの分離 と レコード操作 247b 10/4/15(木) 17:10 発言[未読]
【11627】Re:MDBの分離 と レコード操作 pon 10/4/21(水) 18:27 質問[未読]
【11628】Re:MDBの分離 と レコード操作 247b 10/4/22(木) 4:44 発言[未読]
【11631】Re:MDBの分離 と レコード操作 pon 10/4/22(木) 16:13 発言[未読]
【11638】Re:MDBの分離 と レコード操作 247b 10/4/23(金) 20:18 発言[未読]
【11632】Re:MDBの分離 と レコード操作 pon 10/4/22(木) 16:13 発言[未読]

1681 / 9994 ←次へ | 前へ→
ページ:  ┃  記事番号:
1078193
(SS)C-BOARD v3.8 is Free