![]() |
Datenbank: ACCESS • Version: 2003 • Zugriff über: ADO
Syntax-Fehler mit Select und Case
Hab mal wieder ein Syntax-Fehler, und verstehe nicht warum?
--------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt DatenZugriff.exe ist eine Exception der Klasse EOleException mit der Meldung 'Syntaxfehler in Abfrageausdruck '(SELECT ARTIKELSTATUS, CASE ARTIKELSTATUS WHEN Sonderbestellung THEN 8 WHEN Normal THEN 7 WHEN Auslaufartikel THEN 32 END FROM KOMSA)'' aufgetreten. --------------------------- Anhalten Fortsetzen Hilfe --------------------------- und der Code:
Delphi-Quellcode:
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('UPDATE Warenbestand As W INNER JOIN KOMSA As K On W.external_id = K.KOMSANUMMER SET W.products_shippingtime = (SELECT ARTIKELSTATUS, CASE ARTIKELSTATUS WHEN Sonderbestellung THEN 8 WHEN Normal THEN 7 WHEN Auslaufartikel THEN 32 END FROM KOMSA)'); ADOQuery1.ExecSQL; |
AW: Syntax-Fehler mit Select und Case
Vielleicht sollte man die Vergleichstrings quoten
SQL-Code:
... CASE ARTIKELSTATUS WHEN 'Sonderbestellung' THEN 8 ...
|
AW: Syntax-Fehler mit Select und Case
Das habe ich mir auch gedacht, aber im sql.add ist alles als string. Sobald ich die '' einfüge mekkat der Compiler ((
|
AW: Syntax-Fehler mit Select und Case
Delphi-Quellcode:
ADOQuery1.SQL.Text := '... CASE ARTIKELSTATUS WHEN ''Sonderbestellung'' THEN 8 ...;';
|
AW: Syntax-Fehler mit Select und Case
Vielleicht mal einige Anführungszeichen spendieren im Case?
Und einfach mal als TIp: Wenn Du die Abfragen direkt in Access formulierst und dann auf SQL umschaltest, bekommst Du das alles geschenkt. |
AW: Syntax-Fehler mit Select und Case
Sind das Hochkomma bei Access? Ich mein Anführungszeichen ..
|
AW: Syntax-Fehler mit Select und Case
Die Variante ''Text'', klappt schon mal nicht... ich schau mal in Access-Abfragen nach
|
AW: Syntax-Fehler mit Select und Case
CASE
Access 2003 kann das wohl nicht. Versuchs besser mit WENN bzw. IIF oder SCHALTER bzw. SWITCH. |
AW: Syntax-Fehler mit Select und Case
Ich kenne zwar Access-SQL nicht, aber ich denke, der 'Artikelstatus' vor case ist zuviel. Du willst W.products_shippingtime setzen, Dein Subselect liefert aber zwei Felder zurück. Außerdem sollten die Strings doppelt gequotet sein, wie meine Vorredner schon geschrieben haben. Weiterhin hast Du Dein Subselect nicht auf einen Record beschränkt (falls Komsa nicht nur einen Record enthält), es fehlt also auch noch eine Where-Klausel.
Vermutlich ist es so oder so ähnlich richtig:
Delphi-Quellcode:
Viele Grüße
ADOQuery1.SQL.Add('UPDATE Warenbestand As W SET W.products_shippingtime = (SELECT CASE ARTIKELSTATUS WHEN ''Sonderbestellung'' THEN 8 WHEN ''Normal'' THEN 7 WHEN ''Auslaufartikel'' THEN 32 END FROM KOMSA as K where W.external_id = K.KOMSANUMMER)');
|
AW: Syntax-Fehler mit Select und Case
Hallo,
wie jobo schon gesagt hat, kennt ACCESS kein CASE, bei ACCESS musst Du "iif" verwenden:
Code:
Gruss
...SELECT iif(ARTIKELSTATUS="Sonderbestellung",8,iif(ARTIKELSTATUS="Normal",7,32)) FROM ...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz