這個問題已經超出了奇怪。我正在提交它,希望以前有人看到它並知道修正。受MsgBox影響的VB 6數據訪問
環境VB6,SQL 2005,Citrix XenApp 6.5。此行爲僅在從Citrix客戶端運行時纔會顯示。
上下文:
主要.BAS模塊加載,並在主子它調用使用ADO記錄集加載數據的SQL服務器(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
使用DoEvents替換測試msgbox是否會爲您獲得相同的結果? – jac 2012-04-05 03:48:59
爲什麼使用ADODC(ADO Data Control)來訪問您的數據?您可以在任何地方使用ADODB訪問數據,而無需使用任何形式或控件。 – Martin 2012-04-05 08:43:21
如果你在'Load frmA'後移動MsgBox會發生什麼? – tcarvin 2012-04-05 15:34:29