问题:在以下代码段中,我很难删除ADOX的“CREATE”方法生成的LDB。请提供解决方案的一些提示/指示,谢谢。
目标:创建(动态)新的访问数据库,然后将数据(说竞技场模块)导出到新创建的数据库。
预期:在子例程结束后,某些外部操作(例如Access.exe)可以使用新创建的访问数据库,并且不退出当前的VB程序。
我测试过“竞技场代码”对ldb文件的创建/发布没有任何作用。
我测试了连接字符串中的“独占模式”,但访问文件仍被vb程序锁定。
我在VB环境下进行了测试,直接调用了从Explorer生成的结果,并且结果相同。
其他数据库格式不适合我。 (由于竞技场出口限制)
这不是网络应用。
代码:
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
平台:
答案 0 :(得分:0)
如何在创建后关闭mdb,然后重新打开它? 我不是VS专家,但是在Access中,“设计模式”中的很多东西都将mdb置于独占模式......如果没有先关闭它我就无法切换回来我怀疑。
答案 1 :(得分:0)
如果要创建数据库,它可能更简单到PInvoke SQLConfigDataSource。然后,您可以通过ADODB,ADO.NET或您选择的VB.NET数据访问方法连接到它。
我没有在VB.NET中执行此操作的示例,但this C# class和this powershell script演示了如何调用该函数。
答案 2 :(得分:0)
我知道这是一个老问题。我今天遇到了完全相同的问题。一些评论询问为什么要使用ADOX,这是因为首先,它来自旧代码,其次,我没有找到其他方法来动态创建mdb文件。
在VB6中,每当您设置adox = Nothing时,该com对象都会立即释放,而ldb文件也会被释放。
在.Net中,您必须依靠GC来收集ldb文件解锁之前的adox。
因此,我做了以下技巧。我知道这很丑陋,但我没有找到其他方法,至少我的技巧起作用了。
$myArray = Get-ADDomain
$hashtable = @{}
$myArray.psobject.properties | Foreach { $hashtable[$_.Name] = $_.Value }
# If you need to do something with the key
Foreach ($key in $hashtable.Keys) {
$Value = $hashtable[$key]
if ($value -like '*prod*') {
Write-Host $key
}
}