Эта проблема нестандартная. Я подаю его в надежде, что кто-то, возможно, видел его раньше и знает исправление.VB 6 доступ к данным, затронутый MsgBox
Окружающая среда VB6, SQL 2005, Citrix XenApp 6.5. Такое поведение появляется только при работе с клиентом Citrix.
Контекст:
Основные .BAS модуль загружается и в главных подразделах он вызывает SQL-сервер (2005) с использованием записей ADO для загрузки данных. При запуске с консоли приложение загружается и отображается через 1 или 2 секунды. При вызове от клиента Citrix, он замедляет по крайней мере в 30 Тем не менее, если мы размещаем MsgBox
т.е.
MsgBox «Тестовое сообщение ...»
в коде Main sub, он загружается через 1-2 секунды так же, как и загрузка с консоли. MsgBox должен быть размещен после загрузки формы MDI, которая действует как визуальный фон для приложения. Если он помещен перед загрузкой 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
Заменяет ли тестовый msgbox DoEvents те же результаты для вас? – jac
Почему вы используете ADODC (ADO Data Control) для доступа к своим данным? Вы можете получить доступ к своим данным с помощью ADODB из любого места без использования какой-либо формы или элемента управления. – Martin
Что произойдет, если вы переместите этот MsgBox после 'Load frmA'? – tcarvin