この問題は奇妙です。私は誰かが以前にそれを見て、修正を知っているという希望でそれを提出しています。VB 6データアクセスはMsgBoxの影響を受けます
環境VB6、SQL 2005、Citrix XenApp 6.5。この動作は、Citrixクライアントから実行している場合にのみ表示されます。
文脈:
メイン.BASモジュール負荷とメインサブでは、データをロードするためにADOレコードセットを使用して、SQLサーバー(2005)を呼び出します。コンソールから実行すると、アプリは1〜2秒で読み込んで表示します。 Citrixクライアントから呼び出された場合、我々はすなわち
のMsgBoxのMsgBox
を配置する場合、それはのコードで
「テストメッセージ...」、しかし少なくとも30倍遅くなりますMainサブの場合、コンソールからのロードと同様に1〜2秒でロードされます。 MsgBoxは、アプリケーションの視覚的な背景として機能するMDIフォームを読み込んだ後に配置する必要があります。 MDIが読み込まれる前に配置されていても、問題は解決されません。 MDIフォームのキャプションにデバッグメッセージを配置することにより
が、我々はそれがレコードセットをすべての時間がに追加されている場合を歩くのにかかる時間を検出した。
の質問はどのようにすることができますのMsgBoxステートメントがありますレコードセットのアクセス速度に影響します。非常に奇妙に聞こえるが、MsgBoxステートメントでは:高速、それなし:致命的に遅い。
縮小版のSub Mainは、下に示したMsgBoxの魔法の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
テストmsgboxをDoEventsに置き換えると、同じ結果が得られますか? – jac
ADODC(ADO Data Control)を使用してデータにアクセスするのはなぜですか?フォームやコントロールを使用せずにどこからでもADODBでデータにアクセスできます。 – Martin
'Load frmA'の後にMsgBoxを動かすとどうなりますか? – tcarvin