Datentransver SQLServer->Excel quälend langsam
eklinkow
Gesendet: 23.01.12 00:18
Betreff: RE: Datentransver SQLServer->Excel quälend langsam


New user

Beiträge: 3

Servus Peter,

hier der Code ohne Deklarations und Fehlerbehandlungsteil:

...
' Testen ob Connection aktiv und wenn nicht Global Connection initialisieren
If Not OpenConnection Then Exit Sub
strSPName = "mediserv.spExcelMsdveExportBulk"
' Set rst = fnCMDExecuteSP_RS(strSPName, vbNullString, vbNullString)

'Command Object instanziieren
strSPName = "mediserv.spExcelMsdveExportBulk"
Set cmdADO = New ADODB.Command
cmdADO.CommandText = strSPName
cmdADO.CommandType = adCmdStoredProc
cmdADO.ActiveConnection = gcnn
cmdADO.Parameters.Refresh

'Recordset Instanzieeren (cmdAdo liefert Container von SQL Server ... blitzschnell)
Set rst = New ADODB.Recordset
With rst
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockOptimistic
.Open cmdADO
End With

iRows = rst.RecordCount

On Error Resume Next
Set xlAPP = GetObject("Excel.application")
If Err.Number <> 0 Then
Set xlAPP = CreateObject("Excel.application")
End If
Err.Clear
On Error GoTo Handle_Err

Set xlWB = xlAPP.Workbooks.Add
Set xlWS = xlWB.Worksheets(1)
xlAPP.visible = False
xlAPP.EnableEvents = False
xlAPP.ScreenUpdating = False


'Application.Echo
' xlWS.Cells.Delete, nur in Verbindung mit vorhandenem xlWS

' Variante 1 - seeeehr Langsam
i = 1
Do While rst.EOF = False
For lngColumn = 0 To rst.Fields.Count - 1
xlWS.Cells(i, lngColumn + 1).Value = rst.Fields(lngColumn).Value
Next lngColumn
rst.MoveNext
i = i + 1
Debug.Print i
Loop


' Variante 2 noch langsamer
' i = 1
' For i = 1 To iRows
' xlWS.Cells(i, "A").CopyFromRecordset rst
' Debug.Print i
' Next


xlAPP.visible = True
xlAPP.EnableEvents = True
xlAPP.ScreenUpdating = True

.....

Variante 2 flitzt z.B. nur so dahin wenn sie in Excel ausgeführt wird :-()
Viele Grüße

Emil
Top of the page Bottom of the page