Hallo,
Ok ich glaub ich habs:
"SELECT UID FROM Archiv WHERE CDNummer IN (3, 9, 2) AND (Dateipfad LIKE '%logo%' OR Dateiname LIKE '%logo%')"
liefert korrekte Ergebnisse.
"SELECT UID FROM Archiv WHERE CDNummer IN (3, 9, 2) AND Dateipfad LIKE '%logo%' OR Dateiname LIKE '%logo%'"
war auch schon ok, allerdings waren IMMER auch die Resultate von CDNummern größer 9 dabei. Sprich CDNummer 10 und 11, obwohl sie nicht im Statement waren.
Doch, waren sie. AND hat eine höhere Operatorrangfolge als OR, genau wie * eine höhere Operatorrangfolge hat als +. Genau so, wie Punktrechnung vor Strichrechnung, geht also AND von OR. Dein:
"SELECT UID FROM Archiv WHERE CDNummer IN (3, 9, 2) AND Dateipfad LIKE '%logo%' OR Dateiname LIKE '%logo%'"
ist also ein:
SELECT UID FROM Archiv WHERE
(CDNummer IN (3, 9, 2) AND Dateipfad LIKE '%logo%')
OR Dateiname LIKE '%logo%'
beinhaltet also alle Datensätze, bei denen Dateiname LIKE '%logo%' ist, unabhängig von CDNummer und Dateipfad.
Nochwas:
%logo% != *logo*
Ich weiß zwar nicht wo der unterschied liegt, aber *logo* liefert 0 Ergebnisse.
Der Wildcard * gilt für MS Access DAO. Der Wildcard % gilt für ADO bzw. Jet OLE DB. Offensichtlich greift Deine Konstellation via ADO auf Access zu.
viele Grüße
Axel