Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: PeterW am Februar 08, 2023, 06:42:13

Titel: Schleife While/Wend
Beitrag von: PeterW am Februar 08, 2023, 06:42:13
Ich habe folgendes geschrieben:

Private Sub btmStart1_Click()
Dim tmp As Variant
Dim rs As Database
Set DB = CurrentDb()
Set rs = DB.OpenRecordset("tblMitglieder")
While Not rs.EOF
tmp = Split([NaName], " ")
  MsgBox tmp(0) & ",   " & tmp(1)
rs.MoveNext
Wend
End Sub

Leider funktioniert MoveNext nicht, es wird immer wieder der Datensatz 1 angezeigt.
Ist da ein Denkfehler?
Titel: Re: Schleife While/Wend
Beitrag von: Josef P. am Februar 08, 2023, 08:07:17
Hallo!

Wo verwendet du die Daten aus dem Recordset?

Gruß
Josef
Titel: Re: Schleife While/Wend
Beitrag von: PeterW am Februar 08, 2023, 09:25:47
ich will innerhalb der Schleife die Daten verarbeiten, z.B. temp(1) in ein neues Tabellenfeld einsetzen
Titel: Re: Schleife While/Wend
Beitrag von: andyfau am Februar 08, 2023, 10:15:36
Hallo,

ist das Recordset richtig sortiert? und setze in der Zeile vor While ein rs.MoveFirst, damit Du einen definierten Zustand des Recordsets hast.
Titel: Re: Schleife While/Wend
Beitrag von: MzKlMu am Februar 08, 2023, 10:22:48
Hallo,
Zitatz.B. temp(1) in ein neues Tabellenfeld einsetzen
Warum nimmst Du da nicht einfach eine Aktualisierungsabfrage ?
Titel: Re: Schleife While/Wend
Beitrag von: ebs17 am Februar 08, 2023, 10:44:48
tmp = Split([NaName], " ")Woher nimmst Du die Überzeugung, dass NaName aus dem Recordset verwendet würde? Es dürfte eher dem Formular entnommen sein, auf dem der Button liegt, und dort ändert sich nichts.

MoveNext und die Schleife funktionieren selbstverständlich, aber da von ihnen keine Aktionen mit eigenen Datensätzen abverlangt werden, sieht man nach außen nur die immer gleiche Meldung, was nun nicht sehr hilfreich sein wird.
Titel: Re: Schleife While/Wend
Beitrag von: PeterW am Februar 08, 2023, 11:04:44
Die Aktion ist meiner Meinung nach die Anzeige in der Msgbox, hier müsste doch bei jedem Schleifenschritt der nächste Datensatz angezeigt werden.
Titel: Re: Schleife While/Wend
Beitrag von: Josef P. am Februar 08, 2023, 12:02:15
Hallo!

Finde den Unterschied:

Private Sub btmStart1_Click()
   Dim tmp As Variant
   Dim rs As Database
   Set DB = CurrentDb()
   Set rs = DB.OpenRecordset("tblMitglieder")
   While Not rs.EOF
      tmp = Split([NaName], " ")
      MsgBox tmp(0) & ",   " & tmp(1)
      rs.MoveNext
   Wend
End Sub
vs.
Private Sub btmStart1_Click()
   Dim tmp As Variant
   Dim rs As Database
   Set DB = CurrentDb()
   Set rs = DB.OpenRecordset("tblMitglieder")
   While Not rs.EOF
      tmp = Split(Me!NaName, " ")
      MsgBox tmp(0) & ",   " & tmp(1)
      rs.MoveNext
   Wend
End Sub
vs.
Private Sub btmStart1_Click()
   Dim tmp As Variant
   Dim rs As Database
   Set DB = CurrentDb()
   Set rs = DB.OpenRecordset("tblMitglieder")
   While Not rs.EOF
      tmp = Split(rs!NaName, " ")
      MsgBox tmp(0) & ",   " & tmp(1)
      rs.MoveNext
   Wend
End Sub

Bitte jetzt nicht nur den passenden Code verwenden, sondern auch darüber nachdenken, was in der 1. Variante (dein bisher verwendeter Code) genutzt wird.

Es fehlt übrigens ein rs.Close am Ende.

Gruß
Josef
Titel: Re: Schleife While/Wend
Beitrag von: PeterW am Februar 08, 2023, 12:29:42
In dem von mir genutzten Code werden in der Msgbox die in dem Tabellenfeld NaName vorhandenen Daten "Nachname Vorname" getrennt korrek angezeigt. Jetzt sollte mit Movenext der nächste Datensatz zum aktuellen Datensatz gemacht werden aber das funktioniert nicht. In der Msgbox wird weiter hin der Inhalt des ersten Datensatzes angezeigt.
Deine Variante mit rs.NaName funktioniert, aber ich verstehe noch nicht warum. 
Titel: Re: Schleife While/Wend
Beitrag von: Josef P. am Februar 08, 2023, 12:34:56
Variante 1 und 2 sind identisch. Bei 2 sieht man nur etwas besser, woher der Wert kommt.
tmp = Split([NaName], " ")[NaName] ist die Formulareigenschaft vom Datenfeld NaName der Formulardatenquelle.
Wenn du im Formular einen anderen Datensatz wählst, wird etwas anderes angezeigt.
Titel: Re: Schleife While/Wend
Beitrag von: PeterW am Februar 08, 2023, 12:50:47
Danke, mein Problem ist gelöst aber es hinterläßt bei mir Reste von Ratlosigkeit
Titel: Re: Schleife While/Wend
Beitrag von: Josef P. am Februar 08, 2023, 13:25:15
Vielleicht bringt dieses Beispiel den Achso-Effekt:

Private Sub btmStart1_Click()
   Dim tmp As Variant
   dim i as long
   for i = 1 to 5
      tmp = Split([NaName], " ")
      MsgBox tmp(0) & ",   " & tmp(1)
   next
End Sub
Warum kann jetzt [NaName] verwendet werden, obwohl das Recordset gar nicht mehr da ist?

Gruß
Josef
Titel: Re: Schleife While/Wend
Beitrag von: PeterW am Februar 09, 2023, 09:48:34
Solche Knobelaufgaben sind manchmal sicherlich hilfreich, bei mir aber funktioniert das nicht.
Titel: Re: Schleife While/Wend
Beitrag von: Josef P. am Februar 09, 2023, 11:50:02
Du musst nicht knobeln, ich schrieb die Antwort bereits in #9. ;)
tmp = Split([NaName], " ")Das ist nichts anderes als
tmp = Split(Me.[NaName], " ").. und Me ist nicht das Recordset sondern in diesem Fall das Formular, in dem der Code läuft.

Wenn diese Info immer noch nicht hilft, kann ich leider nicht mehr weiter helfen. Mehr Varianten fallen mir nicht mehr ein, wie ich das erklären kann.

Gruß
Josef
Titel: Re: Schleife While/Wend
Beitrag von: trebuh am Februar 10, 2023, 08:18:28
Hallo Peter.

Ich denke, es ist so wie Eckehard schon vermutet hat.
Der Button liegt doch bestimmt in einem Formular.
Und da ist nach dem laden der erste Datensatz aktiv. Sehr wahrscheinlich der, der Dir in der MsgBox
angezeigt wird.

Theoretisch musstest Du programieren, dass nach der MsgBox ein Datensatz weiter gesprungen werden soll.

ich denke, mit dem Code von Josef:
Private Sub btmStart1_Click()
   Dim tmp As Variant
   Dim rs As Database
   Set DB = CurrentDb()
   Set rs = DB.OpenRecordset("tblMitglieder")
   While Not rs.EOF
      tmp = Split(rs!NaName, " ")
      MsgBox tmp(0) & ",   " & tmp(1)
      rs.MoveNext
   Wend
End Sub

welcher ja (scheinbar) funktioniert, wird ja direkt auf die Tabelle zugegriffen.

Gruß

Titel: Re: Schleife While/Wend
Beitrag von: Beaker s.a. am Februar 10, 2023, 16:33:35
@trebuh
ZitatIch denke, es ist so wie Eckehard schon vermutet hat.
Kann mich gar nicht erinnern mich hier eingemischt zu haben, und
finde auch nichts.
ZitatTheoretisch musstest Du programieren, dass nach der MsgBox ein Datensatz weiter gesprungen werden soll.
Das hatte er praktisch schon im OP.

gruss ekkehard
Titel: Re: Schleife While/Wend
Beitrag von: trebuh am Februar 14, 2023, 08:16:26
 ;D
Sorry Ekkehard.

Ich meinte den Beitrag von Eberhard (ebs17).

Gruß
Hubert