受MsgBox影响的VB 6数据访问

时间:2012-04-04 21:47:49

标签: vb6 citrix

这个问题太奇怪了。我提交它是希望有人可能以前见过它并知道修复。

环境VB6,SQL 2005,Citrix XenApp 6.5。仅当从Citrix客户端运行时才会出现此问题。

背景信息:

Main .bas模块加载,在Main子系统中,它使用ADO记录集来调用SQL server(2005)来加载数据。从控制台运行时,应用程序会在1或2秒内加载并显示。从Citrix客户端调用时,它会减慢至少30倍。但是,如果我们放置一个MsgBox

MsgBox“测试消息......”

在Main子代码中,它加载1到2秒,就像来自控制台的负载一样。必须在加载充当应用程序视觉背景的MDI表单后放置MsgBox。如果在加载MDI之前放置,则无法解决问题。

通过将调试消息放在MDI表单的标题中,我们检测到遍历记录集所花费的时间是所有时间都在其中的位置。

问题是MsgBox语句如何影响记录集的访问速度。听起来很奇怪,但是使用MsgBox声明:快速,没有它:致命的慢。

Sub Main的简化版本如下,神奇的MsgBox表示。

****************************************************************
*
****************************************************************
Sub Main()
On Error GoTo errHandler



'CSR 527
If Not ReadIniFiles Then
    MsgBox "Error reading ini files...contact systems.", vbExclamation
    End
End If

g_SecurityInClause = "YES"

If Not SetSecurity Then
    MsgBox "Unable to acquire your authorization credentials. Exiting..."
    Exit Sub
End If

Set cn = New Connection
With cn
 ' .ConnectionTimeout = 30
  .ConnectionString = CONNECTION_STRING
  .Open 'Options:=adAsyncConnect
End With

App.HelpFile = App.path & "\xx.chm"

g_bExiting = False

frmMain.MousePointer = vbHourglass
DoEvents
frmMain.Show

MsgBox "test"  <== PLACING THIS MSGBOX HERE SPEEDS UP APP BY A FACTOR OF AT LEAST 30
                   IF IT IS ABOVE frmMain.Show IT HAS NO EFFECT

'assign connection string and record source to ado controls
'PLOG 74

Load frmA


frmA.Adodc1.ConnectionString = CONNECTION_STRING
frmA.Adodc2.ConnectionString = CONNECTION_STRING
frmA.Adodc3.ConnectionString = CONNECTION_STRING

'timeouts for Phoenix
frmA.Adodc1.CommandTimeout = 300
frmA.Adodc2.CommandTimeout = 500
frmA.Adodc3.CommandTimeout = 500

frmA.Adodc1.RecordSource = "select some stuff"
frmA.Adodc2.RecordSource = "select some stuff"
frmA.Adodc3.RecordSource = "select some stuff"

frmA.Adodc1.Refresh
frmA.Adodc2.Refresh
frmA.Adodc3.Refresh

LoadMinorCodes
DetermineDeleteAccess
LoadStates

frmMain.MousePointer = vbNormal
frmStartBoard.Show


Exit Sub


errHandler:
MsgBox Err.Number & " " & Err.Description & " Main"


End Sub

1 个答案:

答案 0 :(得分:0)

从jac的评论,添加DoEvents,以及它为你工作的事实,它一定只是一个竞争条件问题。它可能在显示表单之前等待数据库连接。添加doEvents改变了那个顺序。