Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Recordset ändert ungewollt Daten in der DB.

Begonnen von Uwe_Noob, März 26, 2020, 12:05:13

⏪ vorheriges - nächstes ⏩

Uwe_Noob

Hallo zusammen,
ich habe folgendes wahrscheinlich kleines Problem.
Mein Recordset das ich aus einer Tabelle erzeuge, schreibt beim schliessen den Datensatz der als nächstes in der Liste dran wäre zurück an die erste Stelle der DB.
Das ist eher suboptimal.

Anbei mein Code...
Option Compare Database
Option Explicit

Dim db As DAO.Database
Dim rs As DAO.Recordset



Private Sub cmbclose_Click()
DoCmd.Close
DoCmd.OpenForm ("frmportal")

End Sub

Private Sub cmblast_Click()

If Not rs.EOF Then
    rs.MoveLast
    refreshData
End If
    Me.txtdeutsch = ""

End Sub

Private Sub cmbpruefen_Click()


If IsNull(Me.txtdeutsch) Then
    MsgBox "keine Eingabe"
    Me.txtdeutsch.SetFocus
   
ElseIf Me.txtdeutsch.Value = Me.txtloesung.Value Then
       MsgBox "Super ... zum nächsten"
       Me.txtloesung.Visible = True
                                 
    Else
        If MsgBox("Leider falsch ... nochmal ?", vbYesNo + vbQuestion) = vbYes Then
                Me.txtdeutsch = ""
                Me.txtdeutsch.SetFocus
            Else
                MsgBox "OK, dnn zum nächsten"
                Me.txtdeutsch = ""
                Me.txtdeutsch.SetFocus
                                 
        End If
             
End If


End Sub

Private Sub cmbvor_Click()

If Not rs.EOF Then
    rs.MoveNext
    refreshData
End If

    Me.txtdeutsch = ""
    Me.txtloesung.Visible = False

End Sub

Private Sub cmbzuruck_Click()

If Not rs.BOF Then
    rs.MovePrevious
    refreshData
End If

    Me.txtdeutsch = ""

End Sub

Private Sub cmdbegin_Click()
If Not rs.BOF Then
    rs.MoveFirst
     refreshData
End If
    Me.txtdeutsch = ""
End Sub

Private Sub Form_Load()
Set db = CurrentDb
Set rs = db.OpenRecordset("tabvok", dbOpenSnapshot)
rs.MoveFirst
refreshData

End Sub

Private Sub refreshData()
    If Not rs.BOF And Not rs.EOF Then
        Me.txtloesung = rs!deutsch
        Me.txtspanisch = rs!spanisch
    End If
End Sub

Igendjemand eine Idee waran es liegen könnte ... ?
2 Monate Access ^^

PhilS

Zitat von: Uwe_Noob am März 26, 2020, 12:05:13
Mein Recordset das ich aus einer Tabelle erzeuge, schreibt beim schliessen den Datensatz der als nächstes in der Liste dran wäre zurück an die erste Stelle der DB.
Das ist Problem ist unklar für mich.

Ich erkenne aus deinem Code nicht, dass das Recordset überhaupt aktualisiert (beschrieben) wird.

Was aber viel relevanter ist: Eine Tabelle und ebenso ein Recordset ist eine unsortierte Menge. Wenn du in einer Abfrage keine Sortierung vorgibst, kannst du dich nicht darüber beschweren, dass die Daten anders sortiert sind, als du erwartest.

Lektüre dazu: Der Mythos der sortierten Ergebnismenge


Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Uwe_Noob

Hallo Phil, dank für die Antwort.
Ich versuche es mal anders.
Die Daten die bekommen möchte bekomme ich auch.
Ich kann diese vergleichen, vor zurück Anfang ende alles schick.
Vergleiche ich sagen wir mal 5 Werte, schliesse dann das Formular wird der 6 Wert aus der Liste, an die erste Stelle der Tabelle geschrieben. Alles andere funktioniert tadellos.
Gruß
Uwe
2 Monate Access ^^

DF6GL

Hallo,

erklär nochmal, was Du da überhaupt machen willst.

Lt. Code bewegst Du Dich durch einen Recordset mit "Deutsch" und "Spanisch" als Felder, die bei jeder Bewegung durch das Recordset in Form-Textfelder des aktuell im Form angezeigten DS geschrieben werden.  Wenn das Form gebunden ist, werden die Inhalte der Form-Textfelder auch in die Tabelle gespeichert(, sobald man den aktuellen DS des Form ändert. Schließen des Forms ist auch eine "Änderung".)

Willst Du das so ?  Oder sollte das Form ungebunden sein und nichts in eine Tabelle gespeichert werden?

PhilS

Zitat von: Uwe_Noob am März 26, 2020, 12:47:22
Vergleiche ich sagen wir mal 5 Werte, schliesse dann das Formular wird der 6 Wert aus der Liste, an die erste Stelle der Tabelle geschrieben. Alles andere funktioniert tadellos.
Wie und wann der 6. Wert in die Tabelle kommt, bleibt bei der bisherigen Beschreibung weiterhin unklar. - Allerdings ist das auch nicht relevant.

Es gibt keine "erste Stelle" in einer Tabelle. Die Daten in einer Tabelle bilden, wenn man interne Implementierungsdetails außen vor lässt, eine unsortierte Menge. Wenn du die Daten in einer bestimmten Reihenfolge sehen oder bearbeiten willst, dann musst du diese gewünschte Sortierung auch explizit angeben. Das macht man explizit durch eine ORDER BY Klausel in einer Abfrage.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Uwe_Noob

Hallo DF6GL,
manchmal sieht man den Wald vor Bäumen nicht.
Form und Felder entkoppelt und schon läuft es ^^
@Phil
die sortierung werde ich mir auch noch anschauen.

Danke euch beiden
Gruß
Uwe
2 Monate Access ^^