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
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.
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"
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.
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?
Ja, das funktioniert. Eingetragen über Access.
Sehe diese sowohl in Access als auch im SQL Server Manager.
@TerracottaCSVHast 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))