Autor Beitrag
Nordstern
Hält's aus hier
Beiträge: 10

Win XP Prof.
C# (VS2008)
BeitragVerfasst: Mi 01.12.10 13:06 
Hallo,

ich versuche im Dataset-Designer (Visual Studio 2008) eine Spalte in einer Tableadapter mit folgender Abfrage zu erstellen.

SELECT *,
IIf(Format([Datum],"dd")>30,"gross","klein") AS Test
FROM tabelleXY

Die Verbindung erfolgt über OLBDB auf eine Access 2003 Datenbank.
Die Abfrage liefert das gewünschte Ergebniss, jedoch erhalte ich folgende Fehlermeldung:

Fehler in der Liste der Funktionsargumente ">" wurde nicht erkannt.

Somit kann ich das Ergebniss nicht weiterverwenden.

Kann mir jemend helfen??
Vielen Dank im vorraus.
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Do 02.12.10 23:47 
Hallo,

user profile iconNordstern hat folgendes geschrieben Zum zitierten Posting springen:

Die Abfrage liefert das gewünschte Ergebniss, jedoch erhalte ich folgende Fehlermeldung:

Fehler in der Liste der Funktionsargumente ">" wurde nicht erkannt.

Wie jetzt? Ich kenne keine SQL-Statements, die einerseits eine Fehlermeldung ausgeben, anderseits aber das richtige Ergebnis.
Es gibt eigentlich gar kein IIf in T-SQL. Dazu diese Seite:
www.insidesql.org/bl...4/07/13/iif-in-t-sql

Sieht so aus, als ob Du das in ein CASE pumschreiben musst.
Marko
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Fr 03.12.10 08:32 
Hmm, ich glaube, dass es das Format auch nicht so in T-SQL gibt.
Aber so müsste es gehen:
ausblenden SQL-Anweisung
1:
2:
SELECT *, CASE WHEN DAY([Datum]) > 30 THEN 'gross' ELSE 'klein' END
FROM tabelleXY;
LG
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 03.12.10 10:35 
user profile iconTrashkid2000 hat folgendes geschrieben Zum zitierten Posting springen:
Es gibt eigentlich gar kein IIf in T-SQL.
Das stimmt nicht. Access 2003 kennt sehr wohl ein iif. Du kannst damit allerdings leider keine weitere Auswertung vornehmen. Deshalb kannst du kein > oder < oder so als Operator darin benutzen.

Für so etwas geht wirklich nur case. Nichtsdestotrotz gibt es iif, nur ist es eben nicht so mächtig.
Nordstern Threadstarter
Hält's aus hier
Beiträge: 10

Win XP Prof.
C# (VS2008)
BeitragVerfasst: So 05.12.10 19:01 
Hallo, Danke für die Informationen. Leider ist mein Problem noch nicht gelöst. Wahrscheinlich habe ich die Frage nicht richtig formuliert.
Ich arbeite im Designer mit einem Table-Adapter-Konfiguration-Assistent. Wenn ich im Abfragegenerator mein SQL eintrage und dann den Button 'Abfrage ausführen' bekomme ich mit IIF das richtige Ergebniss. Jedoch beim Fertigstellen des Assitenten bekomme ich die genannte Fehlermeldung.

Wenn ich

SELECT CASE WHEN [DAY]([Datum]) > 30 THEN 'gross' ELSE 'klein' END AS XYZ
FROM tabelleXY

benutze erhalte ich folgende Fehlermeldung:

E_FAIL(ox80004005) in IErrorInfo.Get.Description

Vieleicht hat noch jemand eine Idee.

Vielen Dank
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 05.12.10 19:08 
user profile iconNordstern hat folgendes geschrieben Zum zitierten Posting springen:
SELECT CASE WHEN [DAY]([Datum]) > 30 THEN 'gross' ELSE 'klein' END AS XYZ
FROM tabelleXY
Day ist ja nun eine Funktion, und so sieht ja nun kein Funktionsaufruf auf. Wie sieht es denn aus, wenn du es machst wie oben schon gepostet?

user profile iconTrashkid2000 hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden SQL-Anweisung
1:
2:
SELECT *, CASE WHEN DAY([Datum]) > 30 THEN 'gross' ELSE 'klein' END
FROM tabelleXY;
LG
Nordstern Threadstarter
Hält's aus hier
Beiträge: 10

Win XP Prof.
C# (VS2008)
BeitragVerfasst: So 05.12.10 20:05 
Hallo,

Danke für die schnelle Antwort. Leider gleicher Fehler. Die eckigen Klammer hat VS selbständig eingefügt, deshalb ist es mir zuerst nicht aufgefallen.
Das es aber daran nicht liegt, habe ich es mit folgenden Test versucht. (einfach ein anderes Feld benutzt, Text statt Datum)

SELECT *, CASE WHEN von = 'XXX' Then 'gross' ELSE 'klein' END
FROM tabelleXY

mfg Steffen
stendate
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19
Erhaltene Danke: 1



BeitragVerfasst: Do 23.12.10 00:11 
user profile iconNordstern hat folgendes geschrieben Zum zitierten Posting springen:
Hallo,
SELECT *, CASE WHEN von = 'XXX' Then 'gross' ELSE 'klein' END
FROM tabelleXY


CASE WHEN ist, wie oben schon erwähnt T-SQL, damit kann die JET-Engine nix anfangen.

Was definitiv geht ist über OLEDB den IIF-Ausdruck zu verwenden, aber nicht im DataSet-Designer sondern im Source als String, nicht so schön aber praktikabel. Das geht auf alle Fälle und muss bei Migration auf SQL-Server eben auf CASE WHEN umgeschrieben werden.

Bei Format() bin ich mir gerade nicht sicher, ich glaube das geht nicht, mit etwas Glück läuft es wenn du das im Jet-Backend als View speicherst und dann das View anstatt der Tabelle im DataSet-Designer ansprichst.