vb.net 2013

时间:2016-05-03 08:05:33

标签: vb.net ms-access

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”类型异常

     

附加信息:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。

这是文件徽标:

enter image description here

3 个答案:

答案 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。