Hallo Leute.
Gibt es einen deutlichen Performance-Unterschied von Access 2007 zu Access 2010? Denn ich habe auf meinem Rechner (Access 2010, I7-Prozessor, 4 GB Arbeitsspeicher) einen Quellcode per VBA erstellt, der in 1 - 2 min durchläuft. Auf meinem Rechner im Büro(Access 2007, Pentium Dual.Core, 2 GB Arbeitsspeicher) dauert der gleiche Code jedoch 15 min.
Liegt der Unterschied an der Hardware oder an meinem Quellcode??
Viele Grüße,
Sebastian
Public Sub Array_Preisliste()
Dim Max_Ziffer As Integer
Max_Ziffer = 20
' "Tabelle" jetzt als Variable für die zu öffnende Tabelle
Dim Tabelle As String
Tabelle = "Digits_Komplett"
Dim db As DAO.Database
Dim rst_out As DAO.Recordset
Set db = CurrentDb
Set rst_out = db.OpenRecordset(Tabelle)
' erster Datensatz zuerst
rst_out.MoveFirst
' Variable "Anzahl" als Double
Dim Anzahl As Variant
' "Anzahl" gibt nun die Anzahl der Zeilen aus der "Tabelle" aus
Anzahl = DCount("Digits", Tabelle)
' Deklaration
Dim Preisliste(), Zwei(), Drei()
Dim Drei_D() As Double
Dim Ziffern_Var()
Dim Speicher()
ReDim Drei_D(1 To Max_Ziffer, 1 To 5, 1 To Anzahl)
ReDim Preisliste(1 To 4, 1 To Anzahl), Zwei(1 To 4, 1 To Anzahl), Drei(1 To 4, 1 To Anzahl) ' da "Anzahl" variabel -> ReDim !!
ReDim Speicher(1 To 4, 1 To 5, 1 To Anzahl)
ReDim Ziffern_Var(Max_Ziffer)
Dim a As Double
Dim d, e, i, z As Double
Dim m, s, Länge, AnzahlZiffern, Digit As Integer
Dim Ziffer As Double
AnzahlZiffern = 0
d = 1
e = 1
z = 1
' Speicherung in Preisliste() -> hier stehen alle daten untereinander
For i = 1 To Anzahl Step 1
Preisliste(1, i) = rst_out![Digits]
Preisliste(2, i) = rst_out![Tabelle_Verizon_Price]
Preisliste(3, i) = rst_out![Tabelle_Versatel_Price]
Preisliste(4, i) = rst_out![Tabelle_Telefonica_Price]
' "Ziffer" = der x-stellige momentane Digits z.B.: Digits = 287 -> Ziffer = 3
Ziffer = Len(Preisliste(1, i))
' ist das Array an der Stelle 3 (siehe oben) = 0
If Ziffern_Var(Ziffer) = 0 Then
' -> dann ab jetzt = 1
Ziffern_Var(Ziffer) = 1
Else
' ansonsten erhöhe um 1
Ziffern_Var(Ziffer) = Ziffern_Var(Ziffer) + 1
'Debug.Print Ziffern_Var(5)
End If
If Anzahl_Ziffern < Ziffer Then
Anzahl_Ziffern = Ziffer
End If
' Abfrage, wieviele Ziffern vorhanden sind -> Unterteilung in 3-D-Array "Drei_D"
Digit = Len(Preisliste(1, i))
If Drei_D(Digit, 5, 1) = 0 Then
Drei_D(Digit, 5, 1) = 1
Else
Drei_D(Digit, 5, 1) = Drei_D(Digit, 5, 1) + 1
End If
For j = 1 To 4
If IsNull(Preisliste(j, i)) Then
Preisliste(j, i) = 0
End If
Drei_D(Digit, j, Drei_D(Digit, 5, 1)) = Preisliste(j, i)
Next j
rst_out.MoveNext
Next i
For a = 1 To Anzahl_Ziffern
CurrentDb().Execute "DELETE FROM Tabelle" & a, dbFailOnError
Call Write_Tabelle("Tabelle" & a, Drei_D(), a)
Next a
End Sub
'***** Function zum Schreiben in die jeweiligen Tabellen
Public Function Write_Tabelle(Tabellen_Name As String, Speicher As Variant, q As Double)
' "Ende" ist jeweils die Anzahl der jeweiligen Ziffern z.B.: Anzahl 2-stellige Ziffern: 2 -> "Ende" gleich 2
Ende = Speicher(q, 5, 1)
For i = 1 To Ende Step 1
' neuen Datensatz schreiben
With CurrentDb().OpenRecordset(Tabellen_Name, dbOpenDynaset, dbAppendOnly)
.AddNew
!Digits = Speicher(q, 1, i)
!Tabelle_Verizon_Price = Speicher(q, 2, i)
!Tabelle_Versatel_Price = Speicher(q, 3, i)
!Tabelle_Telefonica_Price = Speicher(q, 4, i)
.Update
End With
Next i
End Function
|