Discussion:
Korrekte Syntax der UPDATE-Anweisung!?
(zu alt für eine Antwort)
Wolfgang Armbruster
2003-10-04 07:25:50 UTC
Permalink
Kann nmir bitte jemand mit der korrekten Syntax der UPDATE-Anweisung
weiterhelfen...

So...

CurrentDb.Execute "Update Maschinenkosten_Basis SET MaschStd = " & Me _
Stundensatz & " WHERE Me!Maschine = Maschinenkosten_Basis.Maschine"

... stimmt es offensichtlich nicht.
--
Wolfgang Armbruster
Paul Rohorzka
2003-10-04 07:32:48 UTC
Permalink
Hallo Wolfgang!
Post by Wolfgang Armbruster
Kann nmir bitte jemand mit der korrekten Syntax der UPDATE-Anweisung
weiterhelfen...
So...
CurrentDb.Execute "Update Maschinenkosten_Basis SET MaschStd = " & Me _
Stundensatz & " WHERE Me!Maschine = Maschinenkosten_Basis.Maschine"
... stimmt es offensichtlich nicht.
die Syntax ist im Prinzip ok, was wahrscheinlich
Probleme macht, ist der Beistrich, der auf einem
deutschsprachigen System als Dezimaltrennzeichen
verwendet wird. Diese Konvertierung unter Berück-
sichtigung der Ländereinstellungen wird bei der
impliziten Konvertierung deines (ich nehme an)
Währungsfeldes in den String vorgenommen. Wenn
du explizit mit Hilfe der Str()-Funktion (nicht
CStr()!) umwandelst, sollte das Problem gelöst
sein.

BTW, aus diesem und ähnlichen Gründen schreibe
ich mir den SQL-String *immer* in eine lokale
Variable, damit ich mir den String ggflls. im
Direktfensteranzeigen lassen kann. Da siehst
du dann meistens sofort, warum es nicht nicht
geht.
Außerdem Empfehle ich dir die Verwendung des
Wertes dbFailOnError als zweiten Parameter in
der Execute-Methode und ev. eine explizite
Database-Variable, damit du auch protokollieren
resp. überprüfen kannst, wieviele Datensätze
betroffen waren (dbs.RecordsAffected).

HTH,
Paul
Wolfgang Armbruster
2003-10-04 07:53:23 UTC
Permalink
Paul Rohorzka schrieb / wrote... (Sat, 04 Oct 2003 07:32:48 GMT)
Post by Paul Rohorzka
die Syntax ist im Prinzip ok, was wahrscheinlich
Probleme macht, ist der Beistrich, der auf einem
deutschsprachigen System als Dezimaltrennzeichen
verwendet wird.
Wenn
du explizit mit Hilfe der Str()-Funktion (nicht
CStr()!) umwandelst, sollte das Problem gelöst
sein.
Mir fehlt es an der entsprechenden Access-Erfahrung. Könntest du mir die
Sache am Beispiel etwas konkretisieren?

Vielen Dank.
--
Wolfgang Armbruster
Paul Rohorzka
2003-10-04 08:06:42 UTC
Permalink
Hallo Wolfgang!
Post by Wolfgang Armbruster
Paul Rohorzka schrieb / wrote... (Sat, 04 Oct 2003 07:32:48 GMT)
Post by Paul Rohorzka
die Syntax ist im Prinzip ok, was wahrscheinlich
Probleme macht, ist der Beistrich, der auf einem
deutschsprachigen System als Dezimaltrennzeichen
verwendet wird.
Wenn
du explizit mit Hilfe der Str()-Funktion (nicht
CStr()!) umwandelst, sollte das Problem gelöst
sein.
Mir fehlt es an der entsprechenden Access-Erfahrung. Könntest du mir die
Sache am Beispiel etwas konkretisieren?
Also, so sollte es aussehen, damit's überhaupt funktioniert:

CurrentDb.Execute "Update Maschinenkosten_Basis " & _
"SET MaschStd = " & Str(Me!Stundensatz) & " " & _
"WHERE Maschine = " & Me!Maschine

Das geht nur, wenn der Datentyp im Steuerelement Maschine eine
Zahl ist. Wenn es ein Text ist, musst du den Wert in Anführungs-
zeichen oder Hochkommata einschließen. Würde also so aussehen:

CurrentDb.Execute "Update Maschinenkosten_Basis " & _
"SET MaschStd = " & Str(Me!Stundensatz) & " " & _
"WHERE Maschine = "" & Me!Maschine & """"

In Ergänzung meines Vorpostings, hier die Variante, die ich als
Rumpf für eine Funktion verwende, die eine Abfrage ausführt:

<code AusDemKopfUndDaherVielleichtMitBugs="True">
Private Sub MachWasMitDenDaten()
On Error Goto Err_
Dim strSQL As String
Dim dbs As DAO.Database

Set dbs = CurrentDb()
strSQL = "UPDATE Maschinenkosten_Basis " & _
"SET MaschStd = " & Str(Me!Stundensatz.Value) & " " & _
"WHERE Maschine = " & Me!Maschine.Value
dbs.Execute strSQL, dbFailOnError
' Als Beispiel für die Verwendung von RecordsAffected:
MsgBox "Es wurden " & dbs.RecordsAffected & " aktualisiert.", _

vbInformation
Exit_:
Set dbs = Nothing
Exit Sub

Err_:
Msgbox Err.Description, vbExclamation, "Fehler #" & Err.Number
Resume Exit_
End Sub
</code>

HTH,
Paul
Wolfgang Armbruster
2003-10-04 08:34:41 UTC
Permalink
Paul Rohorzka schrieb / wrote... (Sat, 04 Oct 2003 08:06:42 GMT)
recht herzlichen Dank!
--
Wolfgang Armbruster
Wolfgang Armbruster
2003-10-04 16:52:47 UTC
Permalink
Paul Rohorzka schrieb / wrote... (Sat, 04 Oct 2003 08:06:42 GMT)
Post by Paul Rohorzka
Zahl ist. Wenn es ein Text ist, musst du den Wert in Anführungs-
CurrentDb.Execute "Update Maschinenkosten_Basis " & _
"SET MaschStd = " & Str(Me!Stundensatz) & " " & _
"WHERE Maschine = "" & Me!Maschine & """"
Das Formularfeld, das ich wegschreiben möchte ist ein berechnetes Feld.
Kann es sein, dass dann der Code etwas anders lauten muss...?

Ich bekomme mit deiner Syntax zwar keinen Fehler, in der Tabelle wird
aber auch nichts eingetragen...!?
--
Wolfgang Armbruster
Paul Rohorzka
2003-10-05 16:24:43 UTC
Permalink
Hallo Wolfgang!
Post by Wolfgang Armbruster
Paul Rohorzka schrieb / wrote... (Sat, 04 Oct 2003 08:06:42 GMT)
Post by Paul Rohorzka
Zahl ist. Wenn es ein Text ist, musst du den Wert in Anführungs-
CurrentDb.Execute "Update Maschinenkosten_Basis " & _
"SET MaschStd = " & Str(Me!Stundensatz) & " " & _
"WHERE Maschine = "" & Me!Maschine & """"
Das Formularfeld, das ich wegschreiben möchte ist ein berechnetes Feld.
Kann es sein, dass dann der Code etwas anders lauten muss...?
Ich bekomme mit deiner Syntax zwar keinen Fehler, in der Tabelle wird
aber auch nichts eingetragen...!?
Eigentlich sollte es auch mit einem berechneten Feld
funktionieren. Wenn wirklich kein Feld geändert wird,
liegt es offenbar daran, dass es keine Maschine gibt,
die dem im Formular eingetragenen Wert entspricht.
Deshalb noch einmal mein Vorschlag:
Schreib den SQL-String zuerst in eine Variable. Dann
kannst du nämlich auf die Execute-Anweisung einen
Haltepunkt setzen, im Direktfenster mit "?strSQL"
(ohne Anführungszeichen) den String ausgeben lassen
und in die SQL-Ansicht einer neuen Abfrage kopieren.
Dann siehst du, ob kein Datensatz entspricht, oder
ob sonst ein Problem vorliegt.

HTH,
Paul

Werner Partner
2003-10-04 08:30:21 UTC
Permalink
Post by Wolfgang Armbruster
Kann nmir bitte jemand mit der korrekten Syntax der UPDATE-Anweisung
weiterhelfen...
So...
CurrentDb.Execute "Update Maschinenkosten_Basis SET MaschStd = " & Me _
^^^^
Post by Wolfgang Armbruster
Stundensatz & " WHERE Me!Maschine = Maschinenkosten_Basis.Maschine"
... stimmt es offensichtlich nicht.
CurrentDb.Execute "Update Maschinenkosten_Basis SET MaschStd = " &
Me!Stundensatz & " WHERE Me!Maschine = Maschinenkosten_Basis.Maschine"

Me!Stundensatz war das Problem

Grüße

Werner
--
-----------------------------------------------------------
Werner Partner * Tel +49 2366 886606 * Fax: 886608
mailto:***@sonoptikon.de * http://www.sonoptikon.de
hören Sie Klassik: http://www.drmk.ch/
Loading...