Imports Microsoft.Office.Interop
Imports System.IO
Imports Access
Public Class Form1
Dim AccessApplication As Microsoft.Office.Interop.Access.Application
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
AccessApplication = New Access.Application()
If Not AccessApplication.Visible = True Then
AccessApplication.Visible = True
End If
AccessApplication.OpenCurrentDatabase("C:\POS\POS.lib", False)
End Sub
End Class
我正在尝试从vb.net 2013打开“C:\ POS \ POS.lib”,但出现错误“System.AccessViolationException”,我尝试了很多方法来修复它但是没有用: 错误出现在该行
AccessApplication.OpenCurrentDatabase("C:\POS\POS.lib", False)
这是完整的错误:
PosStartup.exe中出现未处理的“System.AccessViolationException”类型异常
附加信息:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
这是文件徽标:
答案 0 :(得分:1)
找到原始文件扩展名,并在打开文件之前将其重命名为具有此扩展名,并将其重命名为has" lib"扩展后,关闭它。使用 System.Diagnostics.Process.Start 在新进程中启动Access。根据文件扩展名,系统知道打开Access:
If System.IO.File.Exists ("C:\POS\POS.lib") And Not System.IO.File.Exists Then ("C:\POS\POS.mdb") ' replace 'mdb' with the correct file extension
System.IO.File.Move("C:\POS\POS.lib", "C:\POS\POS.mdb")' replace 'mdb' with the correct file extension
System.Diagnostics.Process.Start("C:\POS\POS.mdb")' replace 'mdb' with the correct file extension
End If
答案 1 :(得分:1)
如果您不需要从VB.net应用程序管理Access,请删除所有 Office.Interop 和 Access 命名空间对象,并使用系统。 Diagnostics.Process.Start 在新进程中启动Access,并将文件作为参数发送给它:
System.Diagnostics.Process.Start ("Access.exe", "C:\POS\POS.lib")
答案 2 :(得分:0)
将Interop.DLL_Name.dll
重命名为DLL_Name.dll
并将其引用到项目中。将Interop设置为true。