Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Syntax-Fehler mit Select und Case (https://www.delphipraxis.net/159011-syntax-fehler-mit-select-und-case.html)

daredd 10. Mär 2011 18:38

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;

mkinzler 10. Mär 2011 18:45

AW: Syntax-Fehler mit Select und Case
 
Vielleicht sollte man die Vergleichstrings quoten
SQL-Code:
... CASE ARTIKELSTATUS WHEN 'Sonderbestellung' THEN 8 ...

daredd 10. Mär 2011 18:48

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 ((

mkinzler 10. Mär 2011 18:49

AW: Syntax-Fehler mit Select und Case
 
Delphi-Quellcode:
ADOQuery1.SQL.Text := '... CASE ARTIKELSTATUS WHEN ''Sonderbestellung'' THEN 8 ...;';

jobo 10. Mär 2011 18:50

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.

jobo 10. Mär 2011 18:52

AW: Syntax-Fehler mit Select und Case
 
Sind das Hochkomma bei Access? Ich mein Anführungszeichen ..

daredd 10. Mär 2011 18:58

AW: Syntax-Fehler mit Select und Case
 
Die Variante ''Text'', klappt schon mal nicht... ich schau mal in Access-Abfragen nach

jobo 10. Mär 2011 21:37

AW: Syntax-Fehler mit Select und Case
 
CASE
Access 2003 kann das wohl nicht.
Versuchs besser mit WENN bzw. IIF oder SCHALTER bzw. SWITCH.

Delphianer 11. Mär 2011 08:10

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:
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)');
Viele Grüße

espen 11. Mär 2011 11:00

AW: Syntax-Fehler mit Select und Case
 
Hallo,

wie jobo schon gesagt hat, kennt ACCESS kein CASE, bei ACCESS musst Du "iif" verwenden:

Code:
...SELECT iif(ARTIKELSTATUS="Sonderbestellung",8,iif(ARTIKELSTATUS="Normal",7,32)) FROM ...
Gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz