MS Access 2003(他に利用できるものはありません)を使用してスナップショットスタイルデータベースの一時的なバックエンドを構築しています。これには、一時的なバックエンドにリンクされたtabledefを追加することが含まれます。コードは約3週間機能していますが、今日の午後の初めに、3356(つまり、マシンYのユーザーXはすでにデータベースを排他モードで開いています...)または3045(おおよそデータベースを開くことができません)をスローし始めました排他的モードで)、Accessですでに接続を確立しているかどうかによって異なります。
エラーのあるコードは大まかに(ある程度トリミングされています):
Private Sub AddTabledefToDb(dbC As DAO.Database, dbTarget As DAO.Database, strLinkedName As String)
Dim strPath As String, tdfLinked As DAO.TableDef
strPath = strGetPathFromConnect(tdfLinked.Connect)
Set tdfLinked = dbC.TableDefs(strLinkedName)
' With the lines below, error thrown is 3356; without 3045 '
Dim dbLinkedTableIn As DAO.Database
Set dbLinkedTableIn = Application.DBEngine.Workspaces(0).OpenDatabase(strPath, False, True, tdfLinked.Connect)
Dim tdfNew as DAO.TableDef
Set tdfNew = dbTarget.CreateTableDef(Attributes:=dbAttachedTable)
tdfNew.Name = tdfLinked.Name
tdfNew.SourceTableName = tdfLinked.SourceTableName
tdfNew.Connect = tdfLinked.Connect
dbTarget.TableDefs.Append tdfNew ' Throws 3045 without the lines above or 3356 with them '
' If needed... '
dbLinkedTableIn.Close
Set dbLinkedTableIn = Nothing
End Sub
この理由は、直接リンクしているテーブルを格納しているデータベースを開いた場合に表示されるメッセージに関連しているのではないかと疑っています。つまり、読み取り専用モードでのみ使用できます(これはかなり確実でした。以前はそうではありませんでした)。ただし、コードが読み取り専用アクセス以外のものを必要とする理由がわかりません。また、コードが取得しようとしている理由を理解できません(特に、事前に読み取り専用モードでデータベースを明示的に開いた場合)。
どんな助けでも非常にありがたいです。
ありがとう