【问题标题】:How to release MS Access LDB lock file after created it创建后如何释放 MS Access LDB 锁定文件
【发布时间】:2012-03-08 18:53:42
【问题描述】:

抱歉,文字太长了。

问题:在以下代码段中,我很难删除由 ADOX 的“CREATE”方法生成的 LDB。请提供一些解决方案的提示/指针,谢谢。

目标:创建(动态)一个新的访问数据库,然后将数据(比如 Arena 模块)导出到新创建的数据库。

预期:新创建的access数据库应该能够在子程序结束后被一些外部操作使用,比如Access.exe,并且不退出当前的VB程序。

  1. 我测试了“竞技场代码”对 ldb 文件的创建/发布没有任何作用。

  2. 我测试了连接字符串中的“独占模式”,但访问文件仍然被vb程序锁定。

  3. 我在VB环境下都测试过,直接调用Explorer生成的,结果一样。

  4. 其他数据库格式不是我的选择。 (由于 Arena 出口限制)

  5. 它不是网络应用程序。

代码:

Sub Method1()
Dim logs As New System.Collections.Generic.List(Of String)
Dim arenaApp As Arena.Application = Nothing
Try
    logs.Add("Creating access database")
    Try
        Dim cat As New ADOX.Catalog
        cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=new.mdb;Jet OLEDB:Engine Type=5")
        cat = Nothing
    Catch ex As Exception
        logs.Add(ex.Message)
        logs.Add(ex.StackTrace)
    Finally
        logs.Add("End creating access database")
    End Try
    'Opening Arena model"
    arenaApp = New Arena.Application()
    arenaApp.Models.Open(fileName)
    arenaApp.ActiveModel.ExportModules("", "new.mdb", "TableName", "", Arena.smExportType.smExportAll)
Catch ex As Exception
    logs.Add(ex.Message)
    logs.Add(ex.StackTrace)
Finally
    ...
End Try
End Sub

平台:

  • Windows 7 64 位,Office 2010 (32)
  • VB 2010 快递
  • 库:MS ADO 分机。 2.8 用于 DDL 和安全性

【问题讨论】:

  • 我很好奇您为什么使用旧的(不再维护的)ado 对象而不是新的 ado.net 对象?

标签: vb.net ms-access oledb ado


【解决方案1】:

我知道这是一个老问题。我今天遇到了完全相同的问题。有的cmets问为什么要使用ADOX,一是它来自遗留代码,二是我没有找到其他方法来动态创建mdb文件。

在VB6中,只要你设置了adox = Nothing,这个com对象就会被立即释放,ldb文件也是如此。

在.Net中,在解锁ldb文件之前,你必须依靠GC来收集adox。

所以,我做了以下技巧。我知道这很丑,但我没有找到任何其他方法,至少我的伎俩奏效了。

Dim t As New Thread(
    Sub
        'All adox code should be here
        '....
        '....
        adox = Nothing
    End Sub
)
t.Start()
t.Join()
t = Nothing
GC.Collect()
Sleep(50)

【讨论】:

    【解决方案2】:

    如果要创建数据库,PInvoke SQLConfigDataSource 可能更简单。然后您可以通过 ADODB、ADO.NET 或您选择的 VB.NET 数据访问方法连接到它。

    我没有在 VB.NET 中执行此操作的示例,但 this C# classthis powershell script 演示了如何调用该函数。

    【讨论】:

      【解决方案3】:

      创建后关闭 mdb,然后重新打开它呢?
      我不是 VS 专家,但在 Access 中,“设计模式”中的许多东西都将 mdb 置于独占模式……我怀疑如果不先关闭它就无法切换回来。

      【讨论】:

      • 请告知如何以编程方式关闭 mdb。
      • 嗨,YamHon CHAN,您知道如何以编程方式进行操作吗?我也遇到了同样的问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-25
      • 2016-03-19
      • 2021-11-20
      相关资源
      最近更新 更多