Prozedur verkürzen

Hallo Access- freunde,

ich habe folgenden VBA- Code:

Private Sub Befehl19_Click()

Dim rs1 As Recordset
Dim rs2 As Recordset
Dim rs_a As Recordset
Dim z1, z2, zges As Integer
Dim db As Database

Set db = CurrentDb()
Set rs_a = db.OpenRecordset(„Gesamtauswertung“, dbOpenDynaset)
Set rs1 = db.OpenRecordset(„Abfr_Maschine1“, dbOpenDynaset)

rs_a.MoveFirst

Do Until rs_a.EOF

rs1.MoveFirst
Do Until rs1.EOF
If rs1!Arbeitsplatz = rs_a!Arbeitsplatz Then
z1 = rs1!Zeit
rs1.MoveLast
Else
rs1.MoveNext
End If
Loop

rs2.MoveFirst
Do Until rs2.EOF
If rs2!Arbeitsplatz = rs_a!Arbeitsplatz Then
z2 = rs2!Zeit
rs2.MoveLast
Else
rs2.MoveNext
End If
Loop

zges = (z1 + z2 ) / 60

rs_a.Edit
rs_a![Kapazität/ Arbeitstechnik] = zges
rs_a.Update

rs_a.MoveNext

Loop

MsgBox „Die Auswertung wurde aktualisiert!“, vbOKOnly

End Sub

So, un da ist das nur ein Auszug. Eigentlich sind das 24 solche Schleifen. Die Tabelle Gesamtauswertung enthält 90 Datensätze. Die Prozedur funktioniert zwar, dauert aber unendlich lang. Weiß jemand, wie man das auch verkürzt und schneller machen kann?

Viele Grüße von Beate

Hi Beate,
Deine Prozedur dauert solange, weil du „zu Fuß“ gehst, wo Access Dir einen ganzen Fuhrpark zur Verfügung stellst. Deine Prozedur durchsucht für JEDEN Datensatz in rs_a JEDEN Datensatz in rs_1 und JEDEN Datensatz in rs_2 (im Extremfall).

Mit einer SQL Abfrage kannst Du den Vorgang enorm beschleunigen. Probier das selbst mal aus. In Access kann man diese Abfragen sehr leicht zusammenklicken ohne zu programmieren. Dein Formularklick führt dann die entsprechende Abfrage aus.

Helau
Dominique

Hallo Beate,

warum so umständlich? Nutze z.B. die DSUM - Funktion:

rs_a.MoveFirst

Do Until rs_a.EOF

z1 = dsum(„Zeit“,„Abfr_Maschine1“,„Arbeitsplatz = '“ & rs_a!Arbeitsplatz & „’“

z2 = dsum(„Zeit“,„Abfr_Maschine2“,„Arbeitsplatz = '“ & rs_a!Arbeitsplatz & „’“

zges = (z1 + z2 ) / 60

rs_a.Edit
rs_a![Kapazität/ Arbeitstechnik] = zges
rs_a.Update

rs_a.MoveNext

Loop

MsgBox „Die Auswertung wurde aktualisiert!“, vbOKOnly

End Sub

Grüße aus Schwerin
Wolfgang
(Netwolf)

Mal abgesehen von allem anderen…
ist dein Code auch fehlerhaft:

Dim z1, z2, zges As Integer

deklariert keine 3 Integers, sondern 2 Variants und einen Integer.

Siehe im DBWiki: http://www.dbwiki.de/wiki.php?title=Access_Anf%E4nge…

Und auch: http://www.dbwiki.de/wiki.php?title=Access_Anf%E4nge…

Gruß aus dem Norden
Reinhard Kraasch

(http://www.dbwiki.de - das Datenbank-Wiki)

Danke für den Tipp, hab ich alles schon versucht, bin aber zu keiner Lösung gekommen. Kannst Du deinen Hinweis vielleicht noch ein bißchen konkretisieren?

Viele Grüße, Beate

Super, danke, hat wunderbar geklappt. Hast du zufällig noch eine Lösung für meinen anderen Eintrag vom 15.02. („Auswahl ausKombinationsfeld“)?

Viele Grüße von Beate