2012-04-04 3 views
3

Эта проблема нестандартная. Я подаю его в надежде, что кто-то, возможно, видел его раньше и знает исправление.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 
+3

Заменяет ли тестовый msgbox DoEvents те же результаты для вас? – jac

+0

Почему вы используете ADODC (ADO Data Control) для доступа к своим данным? Вы можете получить доступ к своим данным с помощью ADODB из любого места без использования какой-либо формы или элемента управления. – Martin

+0

Что произойдет, если вы переместите этот MsgBox после 'Load frmA'? – tcarvin

ответ

0

От комментария ЕАК, добавить DoEvents, и из-за того, что он работал для вас, это должно быть проблемой только состояние гонки. Вероятно, ожидалось, что база данных будет подключена до того, как она покажет форму. Добавление doEvents изменило этот порядок.

Смежные вопросы