Forums Neueste Beiträge
 

Abfrage zu komplex

06/07/2009 - 21:36 von Patrick Jox | Report spam
Hallo zusammen,
ich versteh's mal wieder nicht. Also auch wenn das jetzt so aussieht. Ich
bin kein SQL-Dau, aber irgendwie habe ich das Jet-SQL-Konzept noch nicht
verstanden. Beim SQL-Server habe ich diese Probleme alle nicht.

Ich habe eine Formular mit Datenblattansicht, das aus einer Query gespeist
wird.Die Query ist eigentlich nur eine Tabelle mit verschiedenen
Unterabfrage aus einer anderen Query. Nun will ich diese Tabelle nach
mehreren Feldern filtern und erstelle dazu folgende Einschrànkung, die ich
der Filter Eigenschaft des Formulars zuweise.

[PersonTypID] = 1 AND Ampel >= 1 AND Archiviert <> -1

Dieser Filter liefert einen Fehler: Abfrage zu komplex

Wenn ich das ganze in der Datenblattansicht durch Einstellung inden
Spaltenköpfen vornehme, dann bekomme ich den Fehler nicht. Der Filter sieht
aber folgendermaßen aus.

((((([Lookup_PersonTypID].[PersonTyp]=""Unternehmen"") AND
([qryPersonListeAmpel].[Archiviert]=0)) AND
([qryPersonListeAmpel].[Ampel]>=0)) AND
([qryPersonListeAmpel].[Liquiditàt]>=0)) AND
([qryPersonListeAmpel].[Liquiditàt]>=0)) AND
([qryPersonListeAmpel].[Liquiditàt]>=1)

Das funzt dann auch. Ich habe nun mal die Klammern entfernt, dann geht es
nicht mehr. Klammern wieder rein, geht. Dann habe ich aus dem Lookup-Teil
alles rausgenommen und stattdessen PersonTypId = 1 eingetragen. Funzt nicht
mehr.

Ich habe mittlerweile die Anzahl der Felder auf 19 begrenzt, weil ich zuerst
die Vielzahl von Feldern in Verdacht hatte. Leider ohne Wirkung.

Kann mir jemand sagen, was da passiert. Dass in Access beim Joinen die
Klammersetzung relevant ist wusste ich. Aber beim Filtern?

Danke für jeden Hinweis zur Verstàndigung zwischen Access und mir

Viele GRüße
Patrick
 

Lesen sie die antworten

#1 Klaus Oberdalhoff
07/07/2009 - 00:21 | Warnen spam
Hi,

Dass in Access beim Joinen die Klammersetzung relevant ist wusste ich.
Aber beim Filtern?



a)
Access macht intern aus einem Filter auch nur eine Abfrage mit einer
WHERE-Klausel, und da sind die Klammern nun mal relevant.

Du hast prinzipiell schon recht, ich habe mich über die Art und Weise, wie
der Access-Query-Parser die Klammern auswertet, auch schon mehr als einmal
gewundert und die Klammern in einem Falle (ich geb's nur ungern zu) auch pur
nach "trial and error" gesetzt, weil ich's überhaupt nicht verstanden habe.

b)
[PersonTypID] = 1 AND Ampel >= 1 AND Archiviert <> -1



Sofern [Archiviert] vom Typ Boolean ist und / oder auf den SQL Server
verlinkt ist, gibt es u.U. Probleme mit genau dem -1, da True auf dem SQL
Server als 1 (positive 1) abgespeichert wird und intern für Access auf -1
(minus 1) umgesetzt wird - False ist in beiden Fàllen 0. Bei Access 2000 und
bei Access 2003 SP3 (ohne Hotfix) gibt es justamente genau mit dieser
Umsetzung Probleme. Es ist also GRUNDSÄTZLICH bei Booleans empfehlenswert,
immer nur und ausschliesslich auf 0 (Null) oder ungleich 0 (Null) abzuprüfen
und never niemals nie nicht auf -1 (minus 1)

c)
((((([Lookup_PersonTypID].[PersonTyp]=""Unternehmen"") AND
([qryPersonListeAmpel].[Archiviert]=0)) AND
([qryPersonListeAmpel].[Ampel]>=0)) AND
([qryPersonListeAmpel].[Liquiditàt]>=0)) AND
([qryPersonListeAmpel].[Liquiditàt]>=0)) AND
([qryPersonListeAmpel].[Liquiditàt]>=1)



Also wenn das eine "echte" Abfrage wàre, dann wàre sie ziemlich "doof"

((([Lookup_PersonTypID].[PersonTyp]=""Unternehmen"") AND
([qryPersonListeAmpel].[Archiviert]=0)) AND
([qryPersonListeAmpel].[Ampel]>=0)) AND
([qryPersonListeAmpel].[Liquiditàt]>=0)



sollte das gleiche Ergebnis bringen -- einmal auf [Liquiditàt] (<Aua> Umlaut
im Feldnamen) abzuprüfen, sollte doch reichen ? ...

mfg

Klaus

Ähnliche fragen