Dezember 07, 2021, 13:39:22

Neuigkeiten:

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


Recordset Problem - rs.AddNew - keine Fehlermeldung

Begonnen von TerracottaCSV, November 22, 2021, 11:04:11

⏪ vorheriges - nächstes ⏩

TerracottaCSV

November 22, 2021, 11:04:11 Letzte Bearbeitung: November 22, 2021, 11:16:40 von TerracottaCSV
Guten Tag,
ich habe mal wieder ein Problem.

Ich nutze in meinem Formularcode ein Recordset (kompletter Code weiter unten) und in diesem Recordset möchte ich den Feldern meiner Tabelle einige Werte hinzufügen.

Der Code läuft ohne Fehlermeldung durch.

Das habe ich mir selbst mit einem debug print nach dem rs.update bestätigen lassen.

Allerdings kommen bei der Tabelle nie irgendwelche Werte an, die Tabelle ist angebunden mit MSSQL Server und in einem anderen Formular mit exakt dem gleichen Code nur anderen Feldnamen, funktioniert es einwandfrei.

Hier (http://www.office-loesung.de/ftopic406041_0_0_asc.php) habe ich gelesen das es nicht in einem Formular funktioniert wenn dieses gebunden ist, allerdings habe ich es auch Ungebunden getestet und das funktioniert auch nicht.
Hat jemand eine Idee?

Grüße

Private Sub btnBestätigen_Click()

    Dim db As DAO.Database
    Dim rs As DAO.Recordset
       
       Set db = CurrentDb
       Set rs = db.OpenRecordset("SELECT BestNr, fArtNr, rArtNr, persID_F, abtID_F, schrittID_F, lfCode, aLfCode, tblFertigung.Menge, FertigungDatum" _
                                & " FROM tblFertigung WHERE 0", dbOpenDynaset, dbSeeChanges)

            rs.AddNew
            rs.Fields("BestNr").Value = Me!txtBestellnummerInfo
            rs.Fields("fArtNr").Value = Me!txtEndproduktInfo
            rs.Fields("rArtNr").Value = Me!cboArtikelnummer
            rs.Fields("persID_F").Value = Forms!AnmeldeFormular!cboBenutzer
            rs.Fields("abtID_F").Value = Forms!AnmeldeFormular!cboAbteilung
            rs.Fields("schrittID_F").Value = Forms!AnmeldeFormular!cboSchritt
            rs.Fields("LfCode").Value = Me!cboLagerfachcode
            rs.Fields("aLfCode").Value = Me!cboAlternativLF
            rs.Fields("Menge").Value = Str(Me!txtIstEntnahme)
            rs.Fields("FertigungDatum").Value = Now
            rs.Update
 
       
        Debug.Print "Code durchgelaufen"
       

    Set db = Nothing

End Sub

PhilS

Ich bin nicht sicher, ob es in dem hiesigen Kontext relevant ist, aber, anders als Access, versteht der Microsoft SQL Server eine Where-Condition mit WHERE 0 so nicht.

Stattdessen würde ich dort eine intuitiver lesbare und standardkonforme Bedingung, wie WHERE 0 = 1 verwenden.
Access DevTools - Find and Replace
Komfortables Suchen und Ersetzen in den Entwurfseigenschaften von Access-Objekten. In Abfragen, Formularen, Berichten und VBA-Code - Überall und rasend schnell!

TerracottaCSV

Moin Phil, in meinem anderen Formular mit 3 Feldern, funktioniert ein WHERE 0 genau so ohne Murren.

Kann ich mit dem WHERE 0 = 1 denn auch die leeren Records wählen? So wie das bei WHERE 0 der Fall ist?

Edit: nachdem ich das WHERE geändert habe in WHERE 0 = 1, markiert mir der Debugger das rs.AddNew und sagt mir "Unzulässige Operation"

PhilS

Zitat von: TerracottaCSV am November 22, 2021, 11:31:28Kann ich mit dem WHERE 0 = 1 denn auch die leeren Records wählen? So wie das bei WHERE 0 der Fall ist?
Die Frage ergibt für mich keinen Sinn.

WHERE 0 als Bedingung ist immer False (0=False) und liefert nie einen Datensatz in der Abfrage zurück.
WHERE 0 = 1 ist vom Ergebnis her ebenfalls ist immer False und liefert ebenfalls nie einen Datensatz.
Soweit sind die beiden Bedingungen also gleichwertig.
Was "leere Records" sind und welche Relevanz sie haben, ist mir unklar.
Access DevTools - Find and Replace
Komfortables Suchen und Ersetzen in den Entwurfseigenschaften von Access-Objekten. In Abfragen, Formularen, Berichten und VBA-Code - Überall und rasend schnell!

PhilS

Zitat von: TerracottaCSV am November 22, 2021, 11:31:28Edit: nachdem ich das WHERE geändert habe in WHERE 0 = 1, markiert mir der Debugger das rs.AddNew und sagt mir "Unzulässige Operation"
Kannst du manuell in die Tabelle neue Datensätze einfügen?
Access DevTools - Find and Replace
Komfortables Suchen und Ersetzen in den Entwurfseigenschaften von Access-Objekten. In Abfragen, Formularen, Berichten und VBA-Code - Überall und rasend schnell!

TerracottaCSV

Ja, das funktioniert. Eingetragen über Access.
Sehe diese sowohl in Access als auch im SQL Server Manager.

markus888

@TerracottaCSV

Hast du dir zwischenzeitlich mal die Parameter für das OpenRecordset genau angesehen?

Hier mal der Link: https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/recordsetoptionenum-enumeration-dao

Warum nicht statt einer seltsamen where Konstruktion, die dafür vorgesehene Konstante dbAppendOnly verwenden?
Außerdem sollte die Konstante dbFailOnError auch Hinweise liefern, wenn was schiefgeht.

Set rs = db.OpenRecordset("SELECT BestNr, fArtNr, rArtNr, persID_F, abtID_F, schrittID_F, lfCode, aLfCode,
 tblFertigung.Menge, FertigungDatum FROM tblFertigung", dbOpenDynaset, (dbSeeChanges OR dbAppendOnly OR dbFailOnError))
10 Jahre Access