Performance A2007 mit SQL Server Backend

23/06/2008 - 08:14 von Moldaschl Helmut | Report spam
Hallo

Ich muss eine Access - Application von A2k auf A2007 umstellen.
Dabei habe ich folgendes festgestellt:

Alte Plattform: XP mit A2k
Neue Plattform: Vista mit A2007 ... mit schnellerer und stàrkerer Hardware !!

Performanceverlust größer als 10:1
wobei Vista mit A2k keine Performanceeinbußen bringt.
Als Beispiel: eine Tabelle mit 10 Feldern und ca. 30000 Datensàtzen
benötigt mit A2k im Lan 6 - 9 sec !!!! mit A2007 mehr als 2 min !!!!

Ich verwende folgenden Code zur Datenübertragung vom SQL - Server auf das
Access Backend:


Dim PDB As DAO.Database
Dim MA As DAO.Recordset

Dim ADO_command As ADODB.Command
Dim ADO_Rst As ADODB.Recordset
Dim Cnn_str As String
Dim i as integer, imax as integer, j as integer, jmax as integer

Set PDB = CurrentDb

' Connection String auslesen / Command und RS vorbereiten
Cnn_str = ADO_conn_String
Set ADO_command = New ADODB.Command
With ADO_command
.ActiveConnection = Cnn_str
.CommandType = adCmdStoredProc
End With

Set ADO_Rst = New ADODB.Recordset
With ADO_Rst
.CursorLocation = adUseClient
.LockType = adLockReadOnly
.CursorType = adOpenStatic
End With

Set MA = PDB.OpenRecordset("MA", dbOpenDynaset)
With ADO_command
.CommandText = "Proc_Daten_Start_MA"
.Parameters("@MA") = MA_Nr
.Parameters("@Ziel") = "P"
End With

ADO_Rst.Open ADO_command
imax = ADO_command.Parameters("@Anz")
jmax = MA.Fields.Count - 1

If imax > 0 Then
ADO_Rst.MoveFirst
For I = 1 To imax
MA.AddNew
For j = 0 To jmax
MA(j) = ADO_Rst(j)
Next j
MA.Update
ADO_Rst.MoveNext
Next I
End If
ADO_Rst.Close
MA.Close: Set MA = Nothing
.
.
.



Bitte um Hilfe wenn jemand eine Idee hat wie ich A2007 wieder zu einer
vernünftigen Performance verhelfen kann

Danke
Helmut
 

Lesen sie die antworten

#1 Josef Poetzl
23/06/2008 - 10:02 | Warnen spam
Hallo!

Moldaschl Helmut schrieb:
Alte Plattform: XP mit A2k
Neue Plattform: Vista mit A2007 ... mit schnellerer und stàrkerer Hardware !!

Performanceverlust größer als 10:1
wobei Vista mit A2k keine Performanceeinbußen bringt.
Als Beispiel: eine Tabelle mit 10 Feldern und ca. 30000 Datensàtzen
benötigt mit A2k im Lan 6 - 9 sec !!!! mit A2007 mehr als 2 min !!!!

Ich verwende folgenden Code zur Datenübertragung vom SQL - Server auf das
Access Backend:


Dim PDB As DAO.Database
Dim MA As DAO.Recordset

Dim ADO_command As ADODB.Command
Dim ADO_Rst As ADODB.Recordset
Dim Cnn_str As String


[...]
ADO_Rst.Open ADO_command
imax = ADO_command.Parameters("@Anz")
jmax = MA.Fields.Count - 1

If imax > 0 Then
ADO_Rst.MoveFirst
For I = 1 To imax
MA.AddNew
For j = 0 To jmax
MA(j) = ADO_Rst(j)
Next j
MA.Update
ADO_Rst.MoveNext
Next I
End If
ADO_Rst.Close
MA.Close: Set MA = Nothing



Hast du schon ausgetestet wo die Laufzeit verbraten wird?
... beim Öffnen und Lesen des ADODB-Recordsets oder beim Anfügen per
DAO-Recordset?
Liegt die Acccess/Jet-Tabelle im FE oder in einem Access-BE?

BTW:
Wàre eine Anfügeabfrage nicht einfacher?
(PT-Abfrage mit passender T-SQL-Anweisung und einer
Jet-SQL-Insert-Anweisung.

mfg
Josef

EPT: (Access Error Prevention Table) http://access.joposol.com/
FAQ: (Access-FAQ von Karl Donaubauer) http://www.donkarl.com/

Ähnliche fragen