Neuigkeiten:

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

Mobiles Hauptmenü

Fehlerhafte Wertzuweisung im Recordset

Begonnen von herb54, Februar 01, 2021, 11:52:18

⏪ vorheriges - nächstes ⏩

herb54

Hallo,

ich möchte in einer Tabelle "Rechnungsnummern" ein Feld RnrI über ein Recordset mit einem Wert beschreiben.
Der Wert wird ermittelt durch die aktuelle Rechnungsnummer im Programm und über CInt umgewandelt in eine Integerzahl.  Das Feld RnrI ist in der Tabelle auch als Long Integer definiert. Die MsgBox zeigt mir auch den richtigen Wert an. Leider wird in die Tabelle "Rechnungsnummern" eine "1" bei RnrI eingetragen. Wo liegt hier der Fehler?

Dim rs As DAO.Recordset, RnrS As String
RnrS = Mid(Me.Rechnungsnummer, 5, 4)
Set rs = CurrentDb.OpenRecordset("Rechnungsnummern")
rs.MoveFirst
rs.AddNew
rs.Edit
RnrI = CInt(RnrS)
MsgBox RnrI
rs.Update
rs.Close
Set rs = Nothing

Grüße
Herbert

steffen0815

Hallo,
dein Code nimmt nmM gar keinen Tabelleneintrag vor.

Sieht auch alles recht "ungesund" aus. Beschreibe mal bitte was du (im großen Rahmen) vorhast.
Gruß Steffen

ebs17

rs.MoveFirst
rs.AddNew
rs.Edit
Man könnte nebenbei noch jonglieren sowie auch duschen.

Im Ernst: Ich würde erst einmal darüber nachdenken, ob ich anfügen oder aktualisieren will, im zweiten Fall, welchen bestimmten Datensatz ich damit bedenken will.

Erst Sinnieren, dann Aktionieren.
Mit freundlichem Glück Auf!

Eberhard

MzKlMu

Hallo,
was willst Du jetzt machen, einen neuen Datensatz (AddNew) oder einen ändern (Edit) ? Beides macht ja keinen Sinn.
Außerdem musst Du natürlich auch das Recordsetfeld ansprechen.
Rs!RnrI = CInt(RnrS)Außerdem beschreibst Du gerade einen unbestimmten Datensatz (siehe obigen Hinweis von Eberhard).

Im Grunde ist das ganze Gedöns (einschließlich Erstellen neuer Rechnungsnummer aus deinem anderen Thema) ersatzlos überflüssig.
Es genügt vollständig  nur RnrI in der Tabelle zu speichern.
Dann nutzt man den Standardwert des Feldes RnrI.
= "194-" & DMax("RnrI";"Rechnungsnummern") + 1 & "M"Und schon wird bei einem neuen Datensatz automatisch eine neue Rechnungsnummer erzeugt.
Deine bisherigen Funktionen werden nicht mehr benötigt.
Gruß Klaus

herb54

Hallo zusammen,

also irgendwie hatte ich mich da total verrannt. Eigentlich hatte ich mir vorgenommen die neue Rechnungsnummer über die ID und eine Modulfunktion und Argumentübergabe zu ermitteln. Leider kam ich da nicht weiter: Solange keine Datensätze gelöscht wurden funktionierte das Ganze. In dem Moment wo Datensätze gelöscht wurden, gab es zwar die ID noch aber keinen zugehörigen Datensatz! Also doch wieder über das Recordset. Und da hatte ich dann am Anfang mal alle Datensätze der Tabelle "Rechnungsnummern" gelöscht und bekam einfach keinen Datenssatz mehr gespeichert (daher die AddNew usw.). Irgendwie ging mir dann der Faden komplett verloren (RnrI = CInt(RnrS) anstelle von rs!RnrI = CInt(RnrS)). Mein Ziel war es über einen Button im neuen Datensatz die Rechnungsnummer einzufügen. Ihr habt mir sehr geholfen vielen Dank!
Hier noch mal zur Gänze wie ich es jetzt aufgebaut habe und wie es auch funktioniert:

Button NeuerSatz: Dieser legt die aktuelle Rechnungsnummer (der Zahlenteil der Rechnungsnummer = Mid(Me.Rechnungsnummer, 5, 4)) im Feld RnrI der Tabelle Rechnungsnummern ab und generiert dann einen neuen Datensatz:

Private Sub NeuerSatz_Click()
On Error GoTo Err_NeuerSatz_Click

'Eingaben erlauben
Me.AllowEdits = True
Me.AllowAdditions = True
Me.AllowDeletions = True
MsgBox Me!Rechnungsnummer

Me.Weitersuchen.Visible = False         'Feld Weitersuchen unsichtbar
Me.Kombinationsfeld35.Visible = False   'Suchfeld unsichtbar
'***********alte Rechnungsnummer speichern***********

Dim rs As DAO.Recordset, RnrS As String
RnrS = Mid(Me.Rechnungsnummer, 5, 4)
Set rs = CurrentDb.OpenRecordset("Rechnungsnummern")
rs.MoveFirst
rs.Edit
rs!RnrI = CInt(RnrS)
MsgBox RnrI
rs.Update
rs.Close
Set rs = Nothing


Button Neue_Rechnungsnummer: Dieser baut sich über die maximale Rechnungsnummer RnrI der Tabelle Rechnungsnummern die neue Rechnungsnummer auf:

Private Sub Neue_Rechnungsnummer_Click()
On Error GoTo Err_Neue_Rechnungsnummer_Click

Me!Rechnungsnummer = "194-" & DMax("RnrI", "Rechnungsnummern") + 1 & "M"

DoCmd.RunCommand acCmdSaveRecord
Exit_Neue_Rechnungsnummer_Click:
    Exit Sub

Err_Neue_Rechnungsnummer_Click:
    MsgBox Err.Description
    Resume Exit_Neue_Rechnungsnummer_Click
   
End Sub

An alle zusammen: herzlichen Dank für eure Hilfe!
Grüße
Herbert

MzKlMu

#5
Hallo,
und wie bereits in #3 gesagt sind beide Funktionen ersatzlos überflüssig.
Es ist auch nicht notwendig (und ein Normalisierungsfehler) die zusammengesetzte Rechnungsnummer in der Tabelle zu speichern.
Da die "194" und das "M" feste Bestandteile sind genügt es die reine Nummer zu speichern.
Daher ist der Standardwert wie ich ihn in #3 gezeigt habe auch falsch.

Es genügt 
=DMax("RnrI";"Rechnungsnummern") + 1 als Standardwert im Formularfeld für "RnrI"

Die Rechnungsnummer wird dann nur in einer Abfrage gebildet und kann so ohne Einschränkung so benutzt werden wie wenn sie in der Tabelle stehen würde.
Für die Abfrage dann:
Rechnungsnummer: "194-" & RnrI & "M"Über das Vorhaben solltest Du noch mal nachdenken.
Gruß Klaus