ADO, Access und die Platzhalter

24/01/2011 - 10:31 von Lutz Uhlmann | Report spam
Hallo NG,

Wir haben hier einen unerwarteten Effekt bei einer unserer
Access-Datenbanken entdeckt.

In eine 2003er Access-Datenbanken ist eine Abfrage abfAnlagen12 angelegt:

SELECT 1 AS NR, ID AS ANL_ID, Null AS TERM_ID, Null AS AUF_ID, Null AS
LETZTE, Null AS LFD, -1 AS PARA, Null AS PSTAT_ID, Null AS FAKTOR, Null
AS BEZEICHNUNG, Null AS VORSCHRIFT, Null AS KENARC_ID
FROM tabANLAGEN
WHERE KEN Like "1*" Or KEN Like "2*" OR VORCHECK=-1;

Diese Abfrage abfAnlagen12 bringt im Access 168 Datensàtze - korrekt!

Wenn ich von extern per ADO auf abfAnlagen12 zugreife bekomme ich nur 84
Datensàtze (VORCHECK=-1), da offensichtlich der Stringvergleich mit *
nicht mehr trifft.
Ändere ich in der Definition der Abfrage abfAnlagen12 den Vergleich auf
KEN Like "1%" Or KEN Like "2%" bringt mir diese in Access nur 84
Datensàtze. Über den externen ADO-Zugriff erhalte ich nun aber alle 168.

Ich geh davon aus, daß ADO einen anderen Platzhalter nutzt.
Aber das Verhalten entspricht doch überhaupt nicht meiner Logik, wenn
ich eine Filterung in der Datenbank festlege und diese dann extern
völlig anders interpretiert wird.

Ich weiß auch, daß ich das Access-Verhalten über den ANSI92-Schalter an
% anpassen kann. Gibt es sowas auch für ADO um es an den * anzupassen?

Lutz

news.albasani.net
 

Lesen sie die antworten

#1 Josef Poetzl
24/01/2011 - 11:12 | Warnen spam
Hallo!

Lutz Uhlmann schrieb:
[...]
Ich geh davon aus, daß ADO einen anderen Platzhalter nutzt.
Aber das Verhalten entspricht doch überhaupt nicht meiner Logik, wenn
ich eine Filterung in der Datenbank festlege und diese dann extern
völlig anders interpretiert wird.



Du musst aber berücksichtigen, dass die Abfrage immer vom Client
ausgeführt wird, und darfst das nicht mit einer Sicht in einem aktiven
DBMS verwechseln. ;-)

Ich weiß auch, daß ich das Access-Verhalten über den ANSI92-Schalter an
% anpassen kann.



Das hilft dann aber auch nur für das direkte Nutzen der Abfrage.
Verwendest du die Abfrage in einem DAO.Recordset wàre wieder *
erforderlich.

Gibt es sowas auch für ADO um es an den * anzupassen?



Du könntest alike statt like verwenden:
| WHERE KEN Alike "1%" Or KEN Alike "2%" OR VORCHECK=-1
Das sollte mit ado und dao funktionieren.

Oder du verzichtest auf like und nutzt > und <:
| WHERE (KEN >= "1" and KEN < "3") OR VORCHECK=-1


mfg
Josef

[fup2 de.comp.datenbanken.ms-access gesetzt]

Ähnliche fragen