AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Syntax-Fehler mit Select und Case

Syntax-Fehler mit Select und Case

Ein Thema von daredd · begonnen am 10. Mär 2011 · letzter Beitrag vom 11. Mär 2011
Antwort Antwort
daredd

Registriert seit: 2. Apr 2006
433 Beiträge
 
#1

Syntax-Fehler mit Select und Case

  Alt 10. Mär 2011, 19:38
Datenbank: ACCESS • Version: 2003 • Zugriff über: ADO
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;
---------------------------------------------------------------------------
Mein Vista-Kind bringt frischen Wind

Gruß DaRedd aka The Red Dragon
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Syntax-Fehler mit Select und Case

  Alt 10. Mär 2011, 19:45
Vielleicht sollte man die Vergleichstrings quoten
... CASE ARTIKELSTATUS WHEN 'SonderbestellungTHEN 8 ...
Markus Kinzler
  Mit Zitat antworten Zitat
daredd

Registriert seit: 2. Apr 2006
433 Beiträge
 
#3

AW: Syntax-Fehler mit Select und Case

  Alt 10. Mär 2011, 19:48
Das habe ich mir auch gedacht, aber im sql.add ist alles als string. Sobald ich die '' einfüge mekkat der Compiler ((
---------------------------------------------------------------------------
Mein Vista-Kind bringt frischen Wind

Gruß DaRedd aka The Red Dragon
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Syntax-Fehler mit Select und Case

  Alt 10. Mär 2011, 19:49
ADOQuery1.SQL.Text := '... CASE ARTIKELSTATUS WHEN ''Sonderbestellung'' THEN 8 ...;';
Markus Kinzler
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#5

AW: Syntax-Fehler mit Select und Case

  Alt 10. Mär 2011, 19:50
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.
Gruß, Jo
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: Syntax-Fehler mit Select und Case

  Alt 10. Mär 2011, 19:52
Sind das Hochkomma bei Access? Ich mein Anführungszeichen ..
Gruß, Jo
  Mit Zitat antworten Zitat
daredd

Registriert seit: 2. Apr 2006
433 Beiträge
 
#7

AW: Syntax-Fehler mit Select und Case

  Alt 10. Mär 2011, 19:58
Die Variante ''Text'', klappt schon mal nicht... ich schau mal in Access-Abfragen nach
---------------------------------------------------------------------------
Mein Vista-Kind bringt frischen Wind

Gruß DaRedd aka The Red Dragon
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#8

AW: Syntax-Fehler mit Select und Case

  Alt 10. Mär 2011, 22:37
CASE
Access 2003 kann das wohl nicht.
Versuchs besser mit WENN bzw. IIF oder SCHALTER bzw. SWITCH.
Gruß, Jo
  Mit Zitat antworten Zitat
Delphianer

Registriert seit: 19. Feb 2003
Ort: Rossau
149 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#9

AW: Syntax-Fehler mit Select und Case

  Alt 11. Mär 2011, 09:10
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:

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
  Mit Zitat antworten Zitat
espen

Registriert seit: 30. Aug 2003
Ort: Karlsruhe
17 Beiträge
 
#10

AW: Syntax-Fehler mit Select und Case

  Alt 11. Mär 2011, 12:00
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:42 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