2012-01-05 32 views
0

有什么方法可以检查访问Web数据库是否在线?我通过OleDB和Microsoft.ACE.OLEDB.12.0提供程序连接到数据库。数据库包含本地表以及一些Web表。我需要能够检查Web表是否连接到SharePoint数据库。我也使用Access Interop库来执行一些操作 - 如果我可以使用它来检查数据库是否在线,那也可以。检查访问Web数据库是否在线

回答

1

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

但是,您可以尝试强制进行完整的网络同步操作,如果您不在线,那么您将收到一个可捕获的错误(3021)。这看起来有点像一团糟,并且它可以检查状态的全部可能(但我不知道在这个时间点是如何的)。

因此尝试同步将强制此问题。

On Error Resume Next 
DoCmd.RunCommand acCmdSyncWebApplication 
Debug.Print Err.Number 

由于抬起头,acCmdSyncWebApplicaiton不变的是699

然而上述事实上确实折腾有被解雇的对话框。因此,以上对于用户交互按钮是可以的,但不需要用户间的交互或自动化。

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

下工作得很好,我:

On Error Resume Next 
DoCmd.RunDataMacro "tblmonthtext.test1" 
Debug.Print Err.Number 

如果我们在连接线和表格,然后调用表级程序(什么都不做)工作得很好,并errnumber = 0。如果我们脱机,然后调用表程序是不可能的,因此错误号= 13087.

正如我们正在处理自动连接或disconnedted表处理,然后我的VBA代码打开表运行得很好,无论如果你有一个网络连接或应用程序正在“离线”运行,而不是“在线”。我不认为代码知道或关心,这是你的问题。

所以我能够从Access调用该表程序。我相信docmd对象和方法是作为一个自动化(互操作性)暴露给.net的,所以在这个时候我正在处理这个问题,它对我来说工作得很好。如果rundatamacro被暴露,那么你可以使用这个想法。

另一个kluge(可能更适合你的工作)是使用dumy表并添加一条新记录。当表格离线时,生成的自动编号PK值为负值。当你最终在线并同步时,那些PK负数将被服务器端生成的PK正值所取代。

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

然后您只需添加一条记录,确保它已保存。然后你抓住PK值,然后我想只是删除该行。 (所以表格永远不会填满)。如果pk值> 0,则表明您在线并已连接。如果PK值为< 0,那么您处于离线断开模式。因此,一个“提示”或想法是离线模式PK行值将被替换,当你最终得到一个连接同步,并在该离线时间帧,这些PK值是< 0.

+0

感谢您的回答!我想我可以使用服务器端查询的想法 - 我会试一试。 – 2012-01-06 16:14:37

+0

谢谢。请记住,上面的表格过程调用是Access功能。在Access 2010中,表触发器和表过程(存储过程)是发布时在SharePoint上运行服务器端的Access代码。此代码不是T-SQL(SQL服务器)或PL-SQL(Oracle),而是像其他人一样,使用“自己”的过程语言。因此,如果服务器不可用,调用这些数据宏将失败。如上所述,可以使用检查表格插入上的负面自动编号。 (所以在这里没有服务器端查询,但访问“服务器端代码”。 – 2012-01-07 05:38:55

+0

我去了PK <0选项。谢谢。 – 2012-01-08 00:21:59

0

如何像

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

谢谢但我没有试图看看我能否连接到数据库 - 我始终可以,因为它是本地的。我需要查看数据库当前是否具有与SharePoint Web数据库的连接。 – 2012-01-06 01:10:26