1

我知道我的标题没有多大意义,但我对正在发生的事情感到非常迷茫!

我有以下代码:

Sub UpdateStatusReport()

    Try
        Dim oAccess As Access.Application
        oAccess = New Access.Application()

        oAccess.OpenCurrentDatabase("I:\GPS_Conversion\XY_Convert2.mdb", True)
        oAccess.DoCmd.SetWarnings(WarningsOn:=False)
        oAccess.DoCmd.OpenQuery("A1qryMt_FindMaxStatusReportID")
        oAccess.DoCmd.OpenQuery("A2qryUpd_ReduceMaxStatusReportID")
        oAccess.DoCmd.OpenQuery("A3qryMt_StatusReport")
        oAccess.DoCmd.SetWarnings(WarningsOn:=True)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(oAccess)
        oAccess = Nothing
        Console.WriteLine("updated table with live info")
    Catch ex As Exception
        Dim ex1 = ex.ToString
        My.Computer.FileSystem.WriteAllText("C:\logfile.txt", ex1, True)

    End Try

End Sub

我导入以下内容:

Imports System
Imports System.Data
Imports System.Data.OleDb
Imports System.Data.DataRowExtensions
Imports System.Data.SqlClient
Imports System.ComponentModel
Imports Microsoft.Office.Interop
Imports ADODB

我从上面得到的错误是:

 System.Runtime.InteropServices.COMException (0x800A09C5): The OpenQuery action was canceled.
       at Microsoft.Office.Interop.Access.DoCmd.OpenQuery(Object QueryName, AcView View, AcOpenDataMode DataMode)
       at CurrentPositionHTMLCreate.Module1.UpdateStatusReport() in C:\IT3_New\Michael\CurrentPositionHTMLCreate\CurrentPositionHTMLCreate\Module1.vb:line 30
System.Runtime.InteropServices.COMException (0x800A09C5): The OpenQuery action was canceled.
       at Microsoft.Office.Interop.Access.DoCmd.OpenQuery(Object QueryName, AcView View, AcOpenDataMode DataMode)
       at CurrentPositionHTMLCreate.Module1.UpdateStatusReport() in C:\IT3_New\Michael\CurrentPositionHTMLCreate\CurrentPositionHTMLCreate\Module1.vb:line 30

这是第 30 行:

 oAccess.DoCmd.OpenQuery("A1qryMt_FindMaxStatusReportID")

它是一个在访问中调用一系列 MAKETABLE 查询的小子。

在我编写程序的计算机上工作正常,但是当我使用任何其他计算机时,我会遇到各种各样的问题。我通过慢慢分解代码来缩小范围,直到我从整个应用程序中发现什么不起作用。

基本上这会从 slq 服务器上的 DBO 更新数据库中的表。我无法直接访问该服务器,我只能通过带有这些查询的 accessDB 访问它。

基本上,我得出的结论是它的版本问题?看起来我在这台机器上安装了 office 2007,而我尝试过的大多数其他机器都有 2000 或 2003。但我在那些机器上安装了“Microsoft Access Database Engine 2010 Redistributable”,认为这可能是问题所在,但还没有解决我的问题。

我还有其他方法可以做到这一点吗?是否有一些我可以编写的向后兼容代码可以使其在旧版本的访问中可用?我不确定我在这里寻找什么,但我需要一种能够从 DBO 获取实时数据并将其更新到我用于此应用程序的数据库中的方法。


*更新* *


因此,在尝试解决此问题的大量工作后,我无法这样做,我最终将更新移动到访问表单中,并让数据库在网络中用作时钟的机器上在后台运行。

似乎某处发生了版本冲突,但我似乎无法确定在哪里。

4

1 回答 1

1

数据库没有打开可能是因为不同计算机上的连接字符串不正确。例如,文件I:\GPS_Conversion\XY_Convert2.mdb可能映射到驱动器 q: 或根本不映射。打开语句后,检查状态,看看数据库是否真的打开了。如果打开失败,它可能不会产生错误。

于 2013-01-17T05:42:29.203 回答