68863
Goto Top

ACCESS 2007 DECODE oder vergleichbare Funktion

Hallo,

in ORACLE SQL gab bzw gibt es die Funktion DECODE, mit der man entsprechend der IF-THEN-ELSE Logik bedingte Abfragen aus einer Tabelle erstellen kann. Das selbe habe mit einer Access 2007 Datenbank ausprobiert, leider mit wenig erfolg da Access die Funktion DECODE nicht kennt. Weiss jemand ob es eine Vergleichbare Funktion gibt?

Content-Key: 95436

Url: https://administrator.de/contentid/95436

Printed on: April 26, 2024 at 15:04 o'clock

Member: Biber
Biber Aug 27, 2008 at 22:10:04 (UTC)
Goto Top
Moin ABC123,

willkommen im Forum.

die M$Access-Funktionalität, die wohl der DECODE-Funktion am nächsten kommt, ist nicht etwa diese grottige IIF()-Verirrung, sondern die switch()-Funktion.
Diese ist allerdings (außer in meinen Memoiren) vermutlich nur in irgendwelchen Redmonder Praktikanten-Monatsberichten dokumentiert.
Aber für die lausigste DB-Syntax-Dokumentation der südlichen Quadranten dieses Spiralarms der Galaxis ist Access ja bekannt.

Deshalb schnell zwei kurze nachvollziehbare Beispiele:
PARAMETERS Stichtag DateTime;
select 
switch(m.type=1,"Tabelle",  
           m.type= 5,"Abfrage",  
           m.type= -32768 ,"Formular",  
           m.type=-32766,"Makro",  
           m.type=-32764, "Bericht",  
           m.type=-32761, "Modul",  
           m.Type=2,"MSysDb",  
           m.type=3,"Container",  
           m.type=4,"ODBC-verknüpfte Tabelle",  
                               true, "Exotisches") as Objekttyp,  
 m.Name, m.Type, m.flags, m.DateCreate AS angelegt, m.DateUpdate AS geandert
FROM MSysObjects AS m
WHERE (m.DateUpdate>=[stichtag])
order by 1
Diese (skizzierte) Abfrage listet alle DB-Objekte auf, die seit einem einzugebenen Stichtag geändert worden sind.
Die SWITCH()-Funktion verwende ich hier exakt so, wie ich auch die DECODE-Funktion benutzen würde, inklusive des DEFAULT-Falls.
Zweiter Haken (neben der fehlenden Dokumentation): der SWITCH-Funktion geht relativ schnell die Puste aus... nach ein paar albernen Fallunterscheidungen meldet ACCESS dann "Ausdruck zu komplex" oder ähnliche Hilflosigkeitsbekundungen.
In diesem Fall musst Du dann SWITCH-Funktionen schachteln:
PARAMETERS Stichtag DateTime;
select 
switch(m.type=1,"Tabelle",  
           m.Type=2,"MSysDb",  
           m.type=3,"Container",  
           m.type=4,"ODBC-verknüpfte Tabelle",  
           m.type= 5,"Abfrage",  
           m.type= 6, "Jet-verknüpfte Tabelle",  
           m.type= 8,"Beziehung",     
           true, switch(m.type= -32768 ,"Formular",  
                               m.type=-32766,"Makro",  
                               m.type=-32764, "Bericht",  
                               m.type=-32761, "Modul",  
                               m.type=-32758,"Benutzer",  
                               m.type=-32757,"DB-Eigenschaft",  
                               m.Type=-32756, "Datenzugriffsseite",  
                               true, "Biber nich weiß")) as Objekttyp,  
 m.Name, m.Type, m.flags, m.DateCreate AS angelegt, m.DateUpdate AS geandert
FROM MSysObjects AS m
WHERE (m.DateUpdate>=[stichtag] And [....])
order by 1
[auf eine sinnvolle/praxisnahe WHERE-Clause hab ich hier verzichtet, is' nich unser Thema grade]

Grüße
Biber
Mitglied: 68863
68863 Aug 28, 2008 at 06:08:30 (UTC)
Goto Top
Super vielen, vielen Dank.

Gruß

ABC123