Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Syntaxfehler bei INSERT INTO (Nullwerte)

Begonnen von Doming, Oktober 08, 2025, 11:49:47

⏪ vorheriges - nächstes ⏩

Doming

Hallo,

mein VBA-Code meckert über meinen SQL-String (Syntaxfehler)
cDB.Execute "INSERT INTO tbl_Laderaum(fsPal, fsLKW, LPLaenge, " _
                                            & "LPBreite, LPHoehe, LPGewicht, LPPack) " _
                          & "VALUES (0" _
                          & ", " & rsTmp!FSLKW _
                          & ", " & rsTmp!Laenge _
                          & ", " & rsTmp!Breite _
                          & ", " & rsTmp!Hoehe _
                          & ", " & rsTmp!Gewicht _
                          & ", " & rsTmp!PackID & ")"
Das Direktfenster übersetzt den String so:
INSERT INTO tbl_Laderaum(fsPal, fsLKW, LPLaenge, LPBreite, LPHoehe, LPGewicht, LPPack) VALUES (0, 414, , , , , 1)Die Feldeigenschaften sind alle auf Zahl gesetzt
Sie dürfen in diesem Board keine Dateianhänge sehen.

Wieso darf ich keine Nullwerte einfügen?

Knobbi38

Hallo Doming,

hat mit dem Einfügen von NULL-Werten sicherlich nichts zu tun, aber m.W.n. muss für jedes angegebene Feld auch ein Wert angegeben werden; daher könnte auch der Syntaxerror herrühren. Sie dir nochmal in der Jet-SQL Hilfe die genaue Beschreibung und Anmerkungen zu der SQL-Anweisung "INSERT INTO ..." an. Ich meine, dort wäre das auch so erklärt.

Knobbi38
 

Beaker s.a.

@Ulrich
Anzahl Felder und Values stimmen überein.

@Doming
Ich könnte mir vorstellen, dass es am Datentyp der Felder mit den
Massen liegt; - kann man nicht erkennen.
Bei LongInteger (wie bei den FK-Felder) dürfte nix falsch laufen,
ausser das evtl. vorhandene Nachkommastellen verschwinden.
Bei Zahlentypen mit Nachkommastellen kann es sein, dass das Dezimal-
zeichen den Fehler auslöst.
Da müssten m.E. die Values angepasst werden
...
& ", " & Str(rsTmp!Laenge) _
...
Die anderen Felder entsprechend.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

PhilS

Zitat von: Doming am Oktober 08, 2025, 11:49:47Wieso darf ich keine Nullwerte einfügen?
Klar darfst du Nullwerte einfügen. Du tust es nur nicht. Das würde so aussehen:

INSERT INTO tbl_Laderaum(fsPal, fsLKW, LPLaenge, LPBreite, LPHoehe, LPGewicht, LPPack) VALUES (0, 414, NULL, NULL, NULL, NULL, 1)
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Knobbi38

@Beaker s.a.

Zitat von: Beaker s.a. am Oktober 08, 2025, 13:27:48@Ulrich
Anzahl Felder und Values stimmen überein.

Nein, die Anzahl stimmt nicht überein.

In dem Beispiel wird für das Feld "LPLaenge" kein Value angegeben (",,"). Eine Auslassung eines Wertes durch weglassen, so daß nur 2 Kommas stehen bleiben um somit den Wert einfach über die Position zu bestimmen, wie es bei einem Funktionsaufruf in VBA möglich ist, gibt es m.M.n. nicht in SQL. Deshalb der Syntaxerror. Wenn du für den Feld keinen Wert angegeben möchtest, müsste man eventuell explizit den Wert "NULL" angeben, so wie es Phil schon vorgeschlagen hat.

Gruß Ulrich

Beaker s.a.

@Ulrich

Doch, die Anzahl stimmt schon überein. Aber ansonsten hast du natürlich recht.
Wenn die Felder mit den Massen jedoch immer leer sind beim INSERT, kann man die
auch direkt weglassen, denn die sind dann ja per se NULL.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Knobbi38

Zitat von: Beaker s.a. am Oktober 09, 2025, 12:40:48Wenn die Felder mit den Maßen jedoch immer leer sind beim INSERT, kann man die
auch direkt weglassen, denn die sind dann ja per se NULL.

... oder man könnte das auch mit der Funktion NZ() abfangen und explizit eine NULL übergeben.

Knobbi38

Doming

Zitat von: Knobbi38 am Oktober 09, 2025, 18:33:43... oder man könnte das auch mit der Funktion NZ() abfangen und explizit eine NULL übergeben.

Ist die Definition von Nz() nicht so, dass sie gerade für den Zustand NULL einen Ersatzwert rausgibt?

Knobbi38

Richtig, und so etwas brauchst du hier, weil du einen String zusammensetzt:
' aus 
& ", " & rsTmp!Laenge _
' wird
& ", " & NZ(rsTmp!Laenge, "NULL") _
So wird auch im Fall, dass rsTmp!Laenge den Wert NULL hat, der SQL-String immer noch richtig zusammengesetzt.

Knobbi38

Knobbi38

Du könntest auch eine Parameter-Abfrage verwenden, dann ergeben sich solche Probleme nicht.


AHeyne

Zitat von: Knobbi38 am Oktober 10, 2025, 10:24:22Du könntest auch eine Parameter-Abfrage verwenden, dann ergeben sich solche Probleme nicht.
Und sicherer in Bezug auf SQL-Injection wäre es auch.  :)