Ms access 检查Access Web数据库是否联机

Ms access 检查Access Web数据库是否联机,ms-access,c#-4.0,sharepoint-2010,oledb,Ms Access,C# 4.0,Sharepoint 2010,Oledb,有没有办法检查Access web数据库是否联机?我通过OleDB和Microsoft.ACE.OleDB.12.0提供程序连接到数据库。数据库包含本地表以及一些web表。我需要能够检查web表是否连接到SharePoint数据库。我还使用Access Interop库来执行一些操作—如果我可以使用它来检查数据库是否联机,那么它也可以工作。类似的功能如何 try { //Create or open connection } catch(/*Exception you receive if

有没有办法检查Access web数据库是否联机?我通过OleDB和Microsoft.ACE.OleDB.12.0提供程序连接到数据库。数据库包含本地表以及一些web表。我需要能够检查web表是否连接到SharePoint数据库。我还使用Access Interop库来执行一些操作—如果我可以使用它来检查数据库是否联机,那么它也可以工作。

类似的功能如何

try
{
   //Create or open connection
}
catch(/*Exception you receive if database is inaccessible*/)
{
   //Handle exception
}
catch(Exception ex)
{
   //Handle other exceptions
}
finally
{
   accessConnection.Close();
}

Access客户端知道它是“在线”还是“离线”。因此,Access必须以某种方式测试/检查/知道这些表当前已断开连接(本地),或者实际上与SharePoint有实时连接,并且正在同步数据。我的蜘蛛感知告诉我,这个状态可能不会被暴露,如果是,我不知道如何抓住那个值

但是,您可以尝试强制执行完整的web同步操作,如果您脱机,则会收到一个可捕获错误(3021)。这看起来有点像是一个难题,而且状态完全可能是可以检查的(但我不知道此时如何检查)

因此,尝试同步将强制解决此问题

乙二醇

作为提示,ACCMDSyncWebApplication常量为699

然而,以上事实上抛出了一个对话框,必须关闭。所以上面的按钮对于用户交互是可以的,但是没有用户交互就不能实现交互或自动化

我现在知道如何从Access执行此操作的唯一方法是在SharePoint上调用表级过程

以下几点对我来说非常有效:

On Error Resume Next
DoCmd.RunDataMacro "tblmonthtext.test1"
Debug.Print Err.Number
如果我们在线并且表是连接的,那么调用表级过程(它什么也不做)工作正常,errnumber=0。如果我们离线,那么调用table过程是不可能的,因此错误号=13087

如前所述,由于我们处理的是自动连接或断开连接的表,因此无论您是否有网络连接,或者应用程序运行的是“脱机”而不是“联机”,打开表的VBA代码都可以正常运行。我不认为代码知道或关心,这是你的问题

所以我可以从Access调用这个表过程。我相信docmd对象和方法是作为一个自动化(interop)暴露给.net的,所以在这个时候我将离开这个kluge,它对我来说确实很好。如果rundatamacro是公开的,那么您可以使用这个想法

另一个难题是使用dumy表并添加新记录。当表格离线时,生成的自动编号PK值为负值。当您最终联机并同步时,这些PK负数将替换为服务器端生成的PK正值

当您联机并添加一行时,您会得到一个正的自动编号PK值。所以这里另一个可能的技巧是简单地拥有一个没有记录的虚拟表


然后只需添加一条记录,确保它已保存。然后获取pk值,然后我想删除该行。(因此,表格永远不会填满)。如果pk值大于0,则表示您已联机并已连接。如果PK值小于0,则处于离线断开模式。因此,一个“提示”或想法处于脱机模式,当您最终获得同步连接时,PK行值将被替换,并且在脱机时间范围内,这些PK值小于0。

谢谢,但我不想查看是否可以连接到数据库-我始终可以,因为它是本地的。我需要查看数据库当前是否与SharePoint web数据库有连接。谢谢您的回答!我想我可以使用服务器端查询的想法-我会尝试一下。谢谢。请记住,我上面的表过程调用是一个访问特性。在Access 2010中,表触发器和表过程(存储过程)是发布时在SharePoint服务器端运行的访问代码。这段代码不是T-SQL(SQL server)或pl-SQL(Oracle),而是访问“自己的”过程语言,就像现在其他人似乎都拥有的一样。因此,如果服务器不可用,调用这些数据宏将失败。如前所述,可以使用检查表插入上的负自动编号。(所以这里没有服务器端查询,但是访问“服务器端代码”。我使用了PK<0选项。谢谢。
On Error Resume Next
DoCmd.RunDataMacro "tblmonthtext.test1"
Debug.Print Err.Number