2012-04-04 38 views
3

這個問題已經超出了奇怪。我正在提交它,希望以前有人看到它並知道修正。受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 
+3

使用DoEvents替換測試msgbox是否會爲您獲得相同的結果? – jac 2012-04-05 03:48:59

+0

爲什麼使用ADODC(ADO Data Control)來訪問您的數據?您可以在任何地方使用ADODB訪問數據,而無需使用任何形式或控件。 – Martin 2012-04-05 08:43:21

+0

如果你在'Load frmA'後移動MsgBox會發生什麼? – tcarvin 2012-04-05 15:34:29

回答

0

從jac的評論,添加一個DoEvents,並從它爲你工作的事實,它一定只是一個競爭條件問題。在顯示錶單之前,它可能正在等待數據庫連接。添加doEvents改變了這個順序。