Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: herb54 am Februar 16, 2016, 14:25:41

Titel: Recordset spring immer zum letzten Datensatz
Beitrag von: herb54 am Februar 16, 2016, 14:25:41
Hallo,
ich habe folgendes Problem:
Ich habe ein Formular welches sich auf eine Tabelle (tblAbo) bezieht.
In diesem Formular zeige ich das Feld "eingabe" und "RechnungsNr"
an. Das Formular besitzt eine Schaltfläche mit der ich ein
Recordset aufrufe - dieses Recordset soll folgendes tun:
Ich schreibe in mein Feld "eingabe" eine Nummer. Diese Nummer soll sich fortlaufend erhöhen und in das Feld "RechnungsNr" eingetragen werden. Bsp.: eingabe = 58560  -> RechnungsNr = 58561, 58562... usw. Das erste Feld der Tabelle tblAbo ist die IdNr. Ich habe einen Haltepunkt gesetzt um zu sehen auf welchen Datensatz gesprungen wird und das ist merkwürdigerweise immer der letzte (132). Wenn ich mit "xs.MoveNext" weiterspringe ist er im ersten Datensatz. Gebe ich aber nur einen neuen Datensatz ein springt er auf 135. Kann mir da mal jemand helfen?
Vielen Dank im Voraus




Private Sub Befehl26_Click()
On Error GoTo Err_Befehl26_Click
Dim xs As DAO.Recordset
Dim z(600) As Variant
Dim RechnungsNr As Variant
Dim ersteNummer As Variant
Dim eingabe As Variant
Dim i As Integer
Dim j As Integer
Set xs = CurrentDb.OpenRecordset("tblAbo")
' xs.MoveNext
(Haltepunkt) z(1) = xs!IDNr
If xs.RecordCount > 0 Then
Do Until xs.EOF
xs.Edit
xs!RechnungsNr = False
xs.Update
xs.MoveNext
Loop
End If
xs.Close
Set xs = Nothing
Set xs = CurrentDb.OpenRecordset("tblAbo")
i = 1
xs.MoveFirst
xs.MoveNext
xs.Edit
z(1) = xs!IDNr
z(1) = xs!eingabe
xs!RechnungsNr = z(1)
xs.Update
If xs.RecordCount > 0 Then
Do Until xs.EOF '***********************************
'MsgBox (z(1))
xs.Edit
z(i) = z(1) + i
xs!RechnungsNr = z(i)
xs.Update
xs.MoveNext
Loop
End If
xs.Close
Set xs = Nothing
Exit_Befehl26_Click:
    Exit Sub

Err_Befehl26_Click:
    MsgBox Err.Description
    Resume Exit_Befehl26_Click
   
End Sub
Titel: Re: Recordset spring immer zum letzten Datensatz
Beitrag von: MaggieMay am Februar 16, 2016, 14:44:58
Hallo,

den Sprung auf den letzten Datensatz sehe ich nicht, wo findet der statt?
Aber die Laufvariable i verändert sich nicht, bleibt also immer auf 1 stehen.
Titel: Re: Recordset spring immer zum letzten Datensatz
Beitrag von: herb54 am Februar 16, 2016, 17:42:56
Hallo, dass ist ja das was ich auch nicht verstehe, warum hier zum letzten Datensatz gesprungen wird. Was ich nicht erwähnt hatte ist, dass ich die Tabelle ein paar mal vorher sortiert habe. Die Sortierungen wurden jedoch immer wieder entfernt.
Zur Laufvariablen: i ist eine Konstante Zahl =1 und verändert sich nicht sondern wird immer zum ersten Wert (z(1) hinzugezählt (das funktioniert übrigens einwandfrei).
Titel: Re: Recordset spring immer zum letzten Datensatz
Beitrag von: MzKlMu am Februar 16, 2016, 18:50:48
Hallo,
ZitatWas ich nicht erwähnt hatte ist, dass ich die Tabelle ein paar mal vorher sortiert habe.
die Sortierung einer Tabelle ist bedeutungslos, bez. richtet sich nach der Sortierung des Primärschlüssels. Neue Datensätze werden nicht zwangsläufig hinten an die Tabelle angehängt.
Für eine zuverlässige Sortierung der Datensätze solltest Du eine Abfrage erstellen die wie gewünscht sortiert. Diese Abfrage wird dann statt der Tabelle verwendet.
Titel: Re: Recordset spring immer zum letzten Datensatz
Beitrag von: herb54 am Februar 16, 2016, 19:05:17
Hallo,
ich hatte die Sortierung nur kurzzeitig zum Auffinden von Adressen verwendet.  Trotzdem frage ich mich: Warum wird hier auf den letzten Datensatz gesprungen - ich kappiers ehrlich gesagt nicht!
Gruß
Herbert
Titel: Re: Recordset spring immer zum letzten Datensatz
Beitrag von: MzKlMu am Februar 16, 2016, 19:11:58
Hallo,
die Reihenfolge der Datensätze einer Tabelle ist unbestimmt. Die Datensätze werden abgelegt wie gerade Platz ist. Versuche bitte mal die Verwendung einer Abfrage und nicht die Tabelle.
Titel: Re: Recordset spring immer zum letzten Datensatz
Beitrag von: MaggieMay am Februar 17, 2016, 00:13:03
Hallo,

kannst du bitte eine Beispiel-DB dazu hochladen? Das würde ich mir gern mal genauer ansehen.

Und was das betrifft:
Zitatdie Reihenfolge der Datensätze einer Tabelle ist unbestimmt.
so werden mEn die Datensätze einer Tabelle standardmäßig in der Sortierfolge des (Primär-) Index angezeigt.
Titel: Re: Recordset spring immer zum letzten Datensatz
Beitrag von: MzKlMu am Februar 17, 2016, 07:48:50
Hallo,
Zitatstandardmäßig in der Sortierfolge des (Primär-) Index angezeigt.
eben, angezeigt. Das mit dem PS weis ich auch, hatte ich weiter oben auch geschrieben.

Aber ob die DS in dieser Reihenfolge auch im Recordset stehen ?
Titel: Re: Recordset spring immer zum letzten Datensatz
Beitrag von: MaggieMay am Februar 17, 2016, 09:46:34
...davon würde ich mal ausgehen, eine geöffnete Tabelle ist doch nichts anderes, oder?

Nichts desto trotz, sollte man wohl besser sortieren, wenn eine bestimmte Reihenfolge zwingend erforderlich ist.
Titel: Re: Recordset spring immer zum letzten Datensatz
Beitrag von: MzKlMu am Februar 17, 2016, 09:59:03
Hallo,
Zitateine geöffnete Tabelle ist doch nichts anderes, oder?
ja, aber das Recordset ist ja möglicherweise der Rohzustand der Tabelle und ob der Rohzustand wirklich sortiert ist, ist ja die Frage.

Ich werde heute Abend mal ein paar Experimente machen.
Titel: Re: Recordset spring immer zum letzten Datensatz
Beitrag von: herb54 am Februar 17, 2016, 13:57:32
Hallo,
vielen Dank für Eure Antworten. Ich versuche das Ganze jetzt mal über FindFirst und dann evtl. durch Abfragen des Primärindexes (IdNr). Ich dachte immer, dass die Reihenfolge des Primärindexes gleichzeitig die Reihenfolge der Datensätze ist - man kann sich täuschen!
Grüße
Herbert
Titel: Re: Recordset spring immer zum letzten Datensatz
Beitrag von: DF6GL am Februar 17, 2016, 16:24:10
Hallo,

benutz doch einfach statt des Tabellenamen einen SQL-String , in dem Du sortieren kannst, wie Du willst.
Titel: Re: Recordset spring immer zum letzten Datensatz
Beitrag von: herb54 am Februar 18, 2016, 12:21:46
Hallo,
vielen Dank für Eure Antworten! Ich habe jetzt das Ganze auf ein ADODB Recordset umgestellt und der Käse war gegessen! Springt sofort auf den ersten Datensatz - keinerlei Probleme bei der Ausführung - macht genau das was ich will!
Nochmals vielen Dank!
Gruß Herbert