Hallo an alle,
ich habe in Visual Basic 2005 und in VBA(Microsoft Access) ein Script geschrieben welches auf eine Access Datenbank zugreift Daten lest verändert und in eine andere Tabelle schreibt. Beide Varianten funktionieren einwandfrei jedoch ist das Script in VBA in 8 Minuten fertig und in Visual Basic 2005 dauert es 40 Minuten. Wie könnte ich das Script in Visual Basic 2005 optimieren das ich annähernd an die VBA Zeit komme?
Ich habe auch schon ADO probiert es macht keinen Unterschied.
Bin für jeden Tipp dankbar. Als Anhang findet Ihr das Visual Basic 2005 Script.
Gruß
Hubert
Dim myconnection As DAO.Database
Dim objDBEngine As New DAO.DBEngine
Dim rst As DAO.Recordset
Dim rst2 As DAO.Recordset
Dim var_text(500)
Dim var_artnr
Dim var_arbg
Dim zaehler
Dim var_arbez, var_bezeichnung2, var_me, var_typ, var_class, _
var_znrmat, var_ref, var_family
Dim var_wbz, var_kanban, var_arbp, var_arbpbez, var_arbgbez, _
var_arbptxt, var_auko, var_lohn
Dim var_ruest, var_trspttge, var_queuetage, var_startdat, var_notes
Dim aktsatz
Dim MaxWert
Dim ind
Me.Status.Text = "Prgramm wird gestartet!"
Me.Refresh()
'Verbindung zur Datenbank öffnen
rst = myconnection.OpenRecordset("SELECT * FROM RoutingGTN")
' Öffnen des Recordsets2 im update Modus
' Löschen aller Datensätze
myconnection.Execute("DELETE * FROM SFC100")
' Öffnen zum Schreiben
rst2 = myconnection.OpenRecordset("SELECT * FROM SFC100")
' ermitteln Anzahl der Datensaetze
Me.Status.Text = "Ermittle max. Datensatzanzahl!"
Me.Refresh()
rst.MoveLast()
MaxWert = rst.RecordCount
aktsatz = 0
Me.von.Text = MaxWert
Me.Refresh()
rst.MoveFirst()
' durchlesen bis zum letzten Datensatz
zaehler = 0
Me.Status.Text = "Lese Daten"
Me.Refresh()
Do While Not rst.EOF
If zaehler = 0 Then
var_artnr = rst.Fields("ArtNr").Value
var_arbg = rst.Fields("Arbg").Value
........
var_notes = rst.Fields("Notes")
zaehler = 1
Me.ProgressBar5.Minimum = 0
Me.ProgressBar5.Maximum = MaxWert
Me.ProgressBar5.Value = aktsatz
Me.satz.Text = aktsatz
Me.Refresh()
aktsatz = aktsatz + 1
rst.MoveNext()
Else
If rst.Fields("Artnr").Value Is var_artnr And rst.Fields( _
"Arbg").Value Is var_arbg Then
var_text(zaehler) = rst.Fields("Notes").Value
zaehler = zaehler + 1
Me.ProgressBar5.Minimum = 0
Me.ProgressBar5.Maximum = MaxWert
Me.ProgressBar5.Value = aktsatz
Me.satz.Text = aktsatz
Me.Refresh()
aktsatz = aktsatz + 1
rst.MoveNext()
Else
For ind = 1 To zaehler - 1
var_notes = var_notes & " " & RTrim(var_text(ind))
Next
zaehler = 0
' Datensatz speichern
rst2.AddNew()
rst2("ArtNr").Value = var_artnr
rst2("Arbg").Value = var_arbg
........
rst2("Notes").Value = var_notes
rst2.Update()
End If
End If
Loop
Me.Status.Text = "Fertig!!!"
Me.Refresh()
'Verbindung zur Datenbank auf jeden Fall wieder schließen
myconnection.Close() |