2015-12-23 29 views
0

我试图修复一些小工具,它似乎在空闲时间后失去与数据库的连接。我已经将超时设置为0,但这似乎不起作用。VB6 ADODB.Connection执行()重试,直到成功

而不是简单地崩溃并显示一些错误消息我想尝试重新建立连接并执行查询,直到成功(我意识到这可能是一个不好的资源使用),但即使这样,我就是这样试图在这里完成。或者,如果可能的话,显示一个消息框,指出连接已经丢失,然后一旦连接建立就关闭连接。

任何建议将不胜感激。

Public connMain As ADODB.Connection 
Public rsMain As ADODB.Recordset 

...... 

Function Picture_Exists() As Boolean 
On Error Resume Next 
sqlstr = "select * .... " 
Set rsMain = connMain.Execute(sqlstr) 
+0

一些故障(或许是大多数)永远不能成功所以这将是一个无限循环。 – Plutonix

+0

请在您的问题的代码部分提及整个SQL查询。 –

回答

0

由于未使用,您的连接可能会被丢弃在数据库端。在不使用连接时维持连接并不是好习惯;资源方面的连接费用很高,因此任何这种做法都不能很好地扩展。 Dbadmins不可能将未使用的连接保留很长时间。

您的潜在解决方案说,尝试连接,如果你不能忽略错误。我们并不经常在这个业务中说“从不”,但是您不应该使用“On Error Resume Next”而不评估Err.Number来查看它是否等于0(如果是,则不会有错误)。这被称为“内联错误处理”。

在任何情况下,我都不会使用这种方法。我会评估Connection对象的State Property,如果它关闭(cn.State = adoStateClosed),那么我会重新打开它。

0

你可以尝试以下方法:

On Error Resume ''''instead of On Error Resume Next 

Dim rsMain As New ADODB.Recordset 
sqlstr = "select * .... " 
If rsMain.State = adStateOpen Then rsMain.Close 
rsMain.Open sqlstr, sProvider, adOpenKeyset, adLockOptimistic