Dieses Problem ist mehr als seltsam. Ich gebe es in der Hoffnung ein, dass jemand es schon einmal gesehen hat und eine Lösung kennt.VB 6 Datenzugriff von MsgBox betroffen
Umgebung VB6, SQL 2005, Citrix XenApp 6.5. Dieses Verhalten tritt nur bei der Ausführung von einem Citrix Client auf.
Der Kontext:
Haupt .bas Modul lädt und in dem Hauptunter nennt es SQL Server (2005) ADO-Datensatz unter Verwendung von Daten zu laden. Wenn die App über die Konsole ausgeführt wird, wird sie in 1 oder 2 Sekunden geladen und angezeigt. Wenn man von einem Citrix-Client aufgerufen, es verlangsamt sich um einen Faktor von mindestens 30. Wenn wir jedoch eine MsgBox platzieren
dh
MsgBox „Test Nachricht ...“
im Code der Main-Sub, es lädt in 1 bis 2 Sekunden genau wie die Last von der Konsole. Die MsgBox muss nach dem Laden des MDI-Formulars platziert werden, das als visueller Hintergrund für die App fungiert. Wenn es platziert wird, bevor das MDI geladen wird, behebt es das Problem nicht.
von Debug-Meldungen in der Titelzeile des MDI-Formular platzieren, haben wir die Zeit erfasst sie über einen Datensatz zu gehen braucht, wo die ganze Zeit in hinzugefügt wird.
Die Frage ist, wie kann eine MsgBox-Anweisung Auswirkungen auf die Zugriffsgeschwindigkeit eines Recordsets. Klingt sehr seltsam, aber mit der MsgBox-Anweisung: schnell, ohne es: tödlich langsam.
Eine reduzierte Version des Sub Main ist unten mit der magischen MsgBox angegeben.
****************************************************************
*
****************************************************************
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
Ersetzt das Ersetzen der Test-msgbox mit einem DoEvents die gleichen Ergebnisse für Sie? – jac
Warum verwenden Sie ADODC (ADO Data Control), um auf Ihre Daten zuzugreifen? Sie können von überall auf Ihre Daten mit ADODB zugreifen, ohne ein Formular oder eine Steuerung zu verwenden. – Martin
Was passiert, wenn Sie diese MsgBox nach 'Load frmA' verschieben? – tcarvin