Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

UPDATE-Anweisung





Frage

Hallo! Hätte da ein Problem. Ich möchte aus einer Abfrage einen Wert in eine Tabelle übergeben lassen. Um eine Schleifenverschachtelung zu umgehen, habe ich folgenden Algorithmus geschrieben. Private Sub Befehl17_Click() Dim RS As Recordset Dim db As Database Dim Kosten As Double Dim Monat As String Set db = CurrentDb Set RS = db.OpenRecordset("Select Monat, Gesamtkosten FROM [Abfrage]") Do While RS.EOF = False Kosten = RS!Gesamtkosten Monat = RS!Monat sqltext = "UPDATE [Tabelle] SET [Tabelle].[Kosten] = " & Kosten & " WHERE [Tabelle].[monat] = " & Monat DoCmd.RunSQL sqltext RS.MoveNext Loop End Sub Das Ergebnis ist allerdings ein Laufzeitfehler 3144 Syntaxfehler in UPDATE-Anweisung. Woran kann das liegen? Danke im Vorraus Kalle

Antwort 1 von El Bobbele

Moin!
In deinem Code finde ich drei Probleme:

1. Double-Variablen werden in einer SQL-Anweisung mit einem Komma anstatt Punkt versehen. Das Komma wird als Parameter-Trennzeichen verstanden und das löst den Laufzeitfehler aus. Schicke die Kosten-Variable in die Str()-Funktion, dann wird aus Komma ein Punkt.

2. Wenn das Feld Monat in der Tabelle vom Typ String ist, dann solltest du in der Bedingung deinen Parameter ebenfalls in Hochkommas stecken.

3. Am Ende führst du DoCmd.RunSQL aus. Damit erhältst du bei jeder Ausführung eine Sicherheitsabfrage. Wenn du die vermeiden willst, dann solltest du die Execute-Methode vom Database-Objekt ausführen. Zusammengefasst müsste dein Code so aussehen:

Private Sub Befehl17_Click()
Dim RS As Recordset
Dim db As Database
Dim Kosten As Double
Dim Monat As String

Set db = CurrentDb

Set RS = db.OpenRecordset("Select Monat, Gesamtkosten FROM [Abfrage]")

Do While RS.EOF = False

Kosten = RS!Gesamtkosten
Monat = RS!Monat
sqltext = "UPDATE [Tabelle] SET [Tabelle].[Kosten] = " & Str(Kosten) & " WHERE [Tabelle].[monat] = '" & Monat & "';"

db.Execute sqltext

RS.MoveNext
Loop

End Sub