Access 2010 Recordset löscht bei Bearbeitung immer mal wieder den ersten Datensatz

hallo Wer-Weiss-Was-Community,

ich hab mal wieder ein kleines Access Problem ich bin gerade dabei eine neue Datenbank zur Erfassung von Sachnummer zu entwickeln, die Datenbank ist sowerit auch fertgi bis auf Layout und bisschen Feintuning :wink: allerdings macht mir die Bearbeitung von bereits hinterlegten Sachnummern Probleme…
Undzwar kann ich beliebig viele Datensätze via Formular hintereinander bearbeiten, allerdings wenn ich ein Datensatz offen habe und dann zu einem anderen Formular switche kann es passieren das mein erste Datensatz in der Tabelle editiert wird und alle dantensätze bis auf zwei gelöscht werden, ich kan nes mir nicht erklären warum das und vorallem wann das problem auftriff vieleicht wisst ihr eine lösung?

hier mal mein Code den ich aktuell verwende:
//Bei Abbruch alle felder leeren oder wird hier dann auch mein Datensatz gelöscht?
Private Sub btn_abbrechnen_bearbeiten_Click()
Me!cbo_seriennummer = „“
Me!txt_mitarbeiter = „“
Me!txt_bearbeitet_am = „“
Me!cbo_ID = „“
Me!txt_beschreibung = „“
Me!txt_anlage = „“
End Sub
//Bearbeiter Datensatz editieren und speichern
Private Sub btn_speichern_bearbeiten_Click()
Dim db As DAO.Database, rs As DAO.Recordset
Dim strSQL As String
Dim var As String
Dim var2 As String
If (Me!cbo_seriennummer „“ And Me!cbo_ID „“ And Me!txt_mitarbeiter „“ And Me!txt_bearbeitet_am „“ And Me!txt_beschreibung „“) Then

strSQL = „SELECT * FROM tbl_nummer“
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)
var = Me!cbo_seriennummer
Debug.Print „“ & var
If Not rs.EOF Then rs.MoveFirst
Do While Not rs.EOF
var2 = rs!Seriennummer

Debug.Print „“ & var2
If (var = rs!Seriennummer) Then
rs.Edit
rs!Seriennummer = Me!cbo_seriennummer
rs!mitarbeiter = Me!txt_mitarbeiter
rs!bearbeitet_am = Me!txt_bearbeitet_am
rs!aenderung = Me!cbo_ID
rs!beschreibung = Me!txt_beschreibung
rs!anlage = Me!txt_anlage
rs!link = Me!txt_zwischenspeicher
rs.Update
Exit Do
End If
rs.MoveNext
Loop
Me.cbo_seriennummer = „“
Me.txt_mitarbeiter = „“
Me.txt_bearbeitet_am = „“
Me!cbo_ID = „“
Me!txt_beschreibung = „“
Me!txt_anlage = „“
Me!txt_zwischenspeicher = „“

rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
Else
MsgBox „Bitte alle Felder ausfüllen!“
End If
End Sub

//Und das um daten zu erhalten die bereits hinter einer Sachnummer hinterlegt sind +
Private Sub cbo_Seriennummer_AfterUpdate()
Dim db As DAO.Database, rs As DAO.Recordset
Dim strSQL As String
Dim var As String
strSQL = „SELECT * FROM tbl_nummer“
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)
If Not rs.EOF Then rs.MoveFirst
Do While Not rs.EOF
var = rs!Seriennummer
Debug.Print „“ & var
If (var = Me!cbo_seriennummer) Then
Me!cbo_seriennummer = rs!Seriennummer
Me!txt_mitarbeiter = rs!mitarbeiter
Me!txt_bearbeitet_am = rs!bearbeitet_am
Me!cbo_ID = rs!aenderung
Me!txt_anlage = rs!anlage
Me!txt_beschreibung = rs!beschreibung
Me!txt_zwischenspeicher = rs!link
End If
rs.MoveNext
Loop
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
End Sub

Also immer wenn von frm_historie zu frm_bearbeiten via klick springe dann wird vor dem aufruf des frm_bearbeiten alle felder die sich dort befinden geleert springe ich dann direkt wieder zurück zum frm_historie ohne etwas gemacht zu haben so wird mein datensatz gelöscht bzw überschrieben. Wie kann ich das nun umgehen?

ich möchte das bei aktivierung der Form alle Felder geleert sind und bei auswahl einer Sachnummer die dazu gehörigen (fals vorhanden) daten in die felder schreibt, anschließend möchte ich Änderungen oder neu einträge vornehmen und diese dann der Sachnummer entsprechend abspeichern.

Hoffe ihr könnt mir helfen bei diesem Problem?

Liebe Grüße
Fizzo361

Hallo,

Also immer wenn von frm_historie zu frm_bearbeiten via klick
springe dann wird vor dem aufruf des frm_bearbeiten alle
felder die sich dort befinden geleert springe ich dann direkt
wieder zurück zum frm_historie ohne etwas gemacht zu haben so
wird mein datensatz gelöscht bzw überschrieben. Wie kann ich
das nun umgehen?

ich möchte das bei aktivierung der Form alle Felder geleert
sind und bei auswahl einer Sachnummer die dazu gehörigen (fals
vorhanden) daten in die felder schreibt, anschließend möchte
ich Änderungen oder neu einträge vornehmen und diese dann der
Sachnummer entsprechend abspeichern.

Hoffe ihr könnt mir helfen bei diesem Problem?

Lösung der gesamten Probleme: Benutze jeweils nur EIN GEBUNDENES Formular (mit darin an die jeweilige Tabellenfelder gebundenen Steuerelemente)…Der Code für die Zuweisung von Recordset-Werten und Speichern über Recordsets ist dann überflüssig

Gruß
Franz, DF6GL

Hallo df6gl,
ich habe probiert das so umzusetzen wie du sagtest, das hat soweit auch gut geklappt die Datensätze werden jetzt korrekt gespeichert, jetzt habe ich nur noch das problem das ich sie leider wieder lösche wenn ich die Textfelder und Kombifelder wieder leeren möchte, dann hab ich bei Load Form befehle wie me.txt_anlage = „“ und damit lösche ich anscheind auch dann immer wieder den ersten datensatz,
wie kann ich das mit den geleerten felder realisieren?
Ziel soll sein:

  1. Wenn frm_bearbeiten aufgerufen wird dann sollen alle Felder leer sein
  2. Wenn sachnummer ausgewählt wurde zeige dazugehörige daten an — klappt gut,
  3. nach speichern des geänderten DS felder wieder leeren
  4. Wenn noch keine weiteren eintrage zur nummer exestieren dann zeige leere felder

hast du davor evtl noch idee? das mit den gebunden Felder war ja schonmal sehr hilfreich danke :smiley:

bis dann und schön tag noch

Fizzo361

Bzw. ist es möglich das das Formular nur den datensatz speichert wenn auch den btn_speichern geklickt wurde und bei allen anderen option wie formular wechsel oder klick auf abbrechen oder neu auswahl einer anderen sachnummer, enifach die aktuelle eingabe verwirft und den satensatz so lässt wie er ist.
Also nur speichern bei Klick, alles andere Löschen.

Und noch eine Zusatzfrage auf der form_bearbeiten werden ja daten aus drei unterschiedlichen tabellen angezeigt sollen dann alle felder von einer tabelle abhänig sein oder immer nur die jeweiligen textbox die auch zur entsprechenden tabelle gehören, also
txt_sachnummer -> tbl_nummer
txt_mitarbeiter -> tbl_mitarbeiter

oder lieber die form von einer abfrage abhänig gestalten?

Hallo,

mir kommt die Vorgehensweise verquert vor… Warum willst Du denn Datensätze „leeren“, bzw. ein leeres Form bei Laden anzeigen?

Du solltest den Bedien-/ Arbeitsablauf nochmal überdenken.

Zudem sollte ein Formular sich jeweils nur auf eine Tabelle beziehen, auch wenn ein (Haupt-)Formular ein Unterformular besitzt, das wiederum auf einer Detail- (n-) Tabelle basiert.

Ein „leeres“ Form (d. h. mit einen neuen, leeren DS) kann angezeigt werden, wenn man die Eigenschaft „Daten eingeben“ auf ja stellt, bzw. der Parameter „acFormAdd“ bei der Openform-Methode eingesetzt wird.

Natürlich änderst Du den ersten geladenen Datensatz, wenn Du beim Laden des Forms (genau das heißt es ja: Laden der Datensätze in das Form und Anzeige derselben) die gebundenen Textfelder auf „“ setzt und damit den aktuellen, d. h. den ersten DS damit änderst.

Gruß
Franz.DF6GL