Entwickler-Ecke

Datenbanken - Nutzen des IN-Operators in SQL-Abfragen nicht möglich


Tranx - Mo 09.12.13 09:20
Titel: Nutzen des IN-Operators in SQL-Abfragen nicht möglich
Hallo, ich habe versucht, statt des folgenden Konstruktes einer SQL-Abfrage:

Select * from Tabelle where (Feld = 'a') or (Feld = 'd') or (Feld = 'k')

die folgende Abfrage zu verwenden:

Select * from Tabelle where (Feld IN ('a','d','k'))

Leider gibt mir der Compiler einen Fehler aus. Das Komische ist, dass die gleiche Abfrage problemlos, mit der gleichen Datenbank, im Datenbank-Explorer funktioniert. Nur in einer Anwendung immer der Fehler ("Merkmal nicht verfügbar"), dass die Syntax nicht in Ordnung sei. Ich habe auch schon den SQL-Text des Datenbank-Explorers kopiert. Zwecklos.

Die Datenbank ist eine ACCESS-Datenbank über ODBC, Delphi 5, die Query hat die Eigenschaft Requestlive = TRUE, das Feld ist ein String mit einem Zeichen. Bitte jetzt keine Diskussion über Unsinn von ODBC. Ich kann die Datenbank selbst in 64-bit-Umgebung nutzen, also warum sollte ich das - außer vielleicht aus Performance-Gründen - ändern?

Habe es mal mit Requestlive=FALSE versucht. Dann kann ich die Tabelle ohne Fehler öffnen. Aber das nützt mir wenig, weil ich dann ja die Tabellendaten nicht bearbeiten kann. Warum ergibt die erste Syntax ein bearbeitbares Ergebnis und die zweite (mit "IN") nicht? Habt Ihr eine Idee?

Danke schon mal im Voraus für die Anmerkungen.

Ansonsten einen schönen Tag noch

Gunther


jaenicke - Mo 09.12.13 10:09

Dann unterstützt der Treiber die Kombination RequestLive + IN nicht. :nixweiss:

Der Unterschied zum Datenbank-Explorer ist ja, dass der RequestLive nicht braucht.


Tranx - Mo 09.12.13 10:55

Das mit der Unterstützung von Requestlive habe ich mir auch schon fast gedacht. Schade. Aber zum Glück sind die Abfragen nicht ganz so kompliziert, so dass man mit dem OR-Konstrukt einigermaßen leben kann.


jaevencooler - Do 12.12.13 16:08

Moin,

wie übergibst Du denn das SQL an die DB, könnte es sein
das Du hier vergessen hast a,d,k als QuotedStr zu übergeben.....


beste Grüße
Michael