Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Abfrage mehrere Felder berücksichtigen

Begonnen von wuffwuff2003, Juni 26, 2014, 14:14:06

⏪ vorheriges - nächstes ⏩

wuffwuff2003

Hallo,
Ich habe eine Abfrage mit 4 Felder: Name / Ereignis / Ereignis 2 / Ereignis 3.
Nun möchte ich dass der Name in der Abfrage verschwindet wenn alle Ereignisse (wahr/falsch-Felddatentyp) wahr sind.
Wenn ich aber in der Abfrage in jedem feld WAHR in das Kriterium setze funktioniert es nicht. Ebenfalls mit NICHT WAHR. Wie könnte ich das Problem lösen?
Mfg

MzKlMu

Hallo,
hat die Ausgangstabelle den gleichen Aufbau, mit den 3 Feldern Ereignis / Ereignis 2 / Ereignis 3 ? Wenn Ja, ist das Datenmodell falsch, es fehlt eine weitere Tabelle.

Und heißt das Feld wirklich Name?
Gruß Klaus

wuffwuff2003

Hallo
Ja die Tabelle enthält auch diese 3 Ereignis Felder mitsamt dem Namen.
Ansich heisst der Name richtig : Komplettname (Da Name ja ein Schlüsselwort ist)
Danke
Mfg

MaggieMay

Hallo,
ZitatWenn ich aber in der Abfrage in jedem feld WAHR in das Kriterium setze funktioniert es nicht.
zeig doch bitte mal den SQL-Code dazu.
Freundliche Grüße
MaggieMay

MzKlMu

Hallo,
unabhängig von einer möglichen SQL Lösung ist das Datenmodell falsch. Es werden 2 weitere Tabellen benötigt eine für die Ereignisse (je ein Datensatz und nicht je ein Feld) und eine Tabelle zur Zuordnung der Ereignisse zur Person. Die Ja/nein Felder entfallen ersatzlos.
Das ist eine klassische n:m Beziehung zu der 3 Tabellen erforderlich sind.

Siehe auch:
Microsoft Access Tips for Casual Users
Gruß Klaus

wuffwuff2003

Hallo,
Hat ein bisschen gedauert, hier ist der SQL Code: (nomcomplet = Komplettname)
SELECT tbl_Uebersicht.ID, tbl_Uebersicht.Nomcomplet, tbl_Uebersicht.[Matricule Cem], tbl_Uebersicht.Case, tbl_Uebersicht.Roulement, tbl_Uebersicht.[Service D'attache], tbl_Uebersicht.Reseau_conduite, tbl_Uebersicht.hlt1, tbl_Uebersicht.hlt2a, tbl_Uebersicht.hlt2b, tbl_Uebersicht.hlt4, tbl_Uebersicht.hlt6, tbl_Uebersicht.fp, tbl_Uebersicht.date_pres_hlt
FROM tbl_Uebersicht
WHERE (((tbl_Uebersicht.[Service D'attache])<>24 And (tbl_Uebersicht.[Service D'attache])<>31 And (tbl_Uebersicht.[Service D'attache])<>26 And (tbl_Uebersicht.[Service D'attache])<>32) AND ((tbl_Uebersicht.Reseau_conduite)=6 Or (tbl_Uebersicht.Reseau_conduite)=8 Or (tbl_Uebersicht.Reseau_conduite)=10 Or (tbl_Uebersicht.Reseau_conduite)=11));

Wie gesagt wenn jetzt die Einträge hlt1 bis hlt6 alle WAHR sind, dann müsste der Kunde aus der Abfrage verschwinden, bzw nachher im Listenfild des Formulars nicht mehr erscheinen.

Mfg

MzKlMu

Hallo,
wenn das 6 Aufzählungsfelder (hlt1 bis hlt6) sind, wäre das Datenmodell erst recht zu ändern. Hier solltest Du ansetzen. Es wäre ganz sicher der bessere Weg.
Gruß Klaus

MaggieMay

Hi,
ZitatWie gesagt wenn jetzt die Einträge hlt1 bis hlt6 alle WAHR sind
unabhängig vom Datenmodell, was hält dich davon ab, den Bedingungsteil entsprechend zu erweitern?
Freundliche Grüße
MaggieMay

wuffwuff2003

Hallo, wie gesagt mit dem Datenmodell das hat andere Gründe und ist wie gesagt nicht ganz glücklich, aber ich muss es leider mit diesem Datenmodell lösen. Die Erweiterung fällt mir aus dem Grunde schwer weil ich in SQL nicht gerade so der Profi bin, müsste ich denn hinter den bisherigen Code schreiben und einfach weiterfahren, oder kann ich eine neue WHERE Zeile aufsetzen

MaggieMay

Du musst die vorhandene Where-Zeile erweitern. Wie das gehen könnte, sollte sich anhand des bisherigen Codes herleiten lassen.
Freundliche Grüße
MaggieMay

wuffwuff2003

Ich hatte die Zeile ergänzt indem ich dann folgendes hinzuschrieb: (kuck jetzt nicht auf die Kommas, die stehen jetzt sicher falsch)
AND ((tbl_Uebersicht.hlt1)=true and (tbl_Uebersicht.hlt2a)=true and (tbl_Uebersicht.hlt2b)=true     usw.
Das Problem aber ist, wenn ich dies so hinschreiben, dann reicht es aus, wenn bereits 1 Kontrollkästchen angeklickt ist, damit der Kunde verschwindet. Die Bedingung aber ist, es müssen alle 6 auf True stehen erst dann verschwindet der Kunde aus der Abfrage, da häng ich fest.
Danke
Mfg

MaggieMay

Sorry, aber du musst schon den vollständigen SQL-Code zeigen, damit man dir sagen kann wo der Fehler liegt.

Möglicherweise hast du den Code einfach "irgendwo" oder am Ende hinzugefügt, ohne die Logik der Verknüpfungen via AND und OR zu hinterfragen oder gar zu verstehen?
Dann empfehle ich dir einen Grundkurs in Mathematik mit Schwerpunkt auf dem Teilgebiet "Logik".
Freundliche Grüße
MaggieMay

wuffwuff2003

Ich konnte das Problem anders lösen, was aber nicht der Sinn der Sache ist, ich möchte es schon per SQL lösen, meine Lösung war diese: Hab in der Tabelle eine berechnete Spalte gemacht mit Hlt1 Hlt2a Hlt2b Hlt4 Hlt6 FP. So wenn nun in der berechneten Spalt -6 rauskam, heisst das ja, alle Felder sind angehakt (also diese 6 Stück). Dann konnte ich in der Abfrage ganz einfach fragen : where HLT_Berechnet = -6.
Aber wie gesagt das geht, weiss aber dass es auch per SQL gehen muss irgendwie, ich schreibe dir morgen den ganzen Code raus, wenn ich am Rechner sitze.

MaggieMay

Zitat von: wuffwuff2003 am Juli 01, 2014, 23:15:17Hab in der Tabelle eine berechnete Spalte gemacht
das kannst du auch ebensogut bzw. besser mit einer Abfraege lösen.
Zitatwenn nun in der berechneten Spalt -6 rauskam, heisst das ja, alle Felder sind angehakt
Die Idee ist gut und lässt sich sicher auch in einer Abfrage einsetzen.
Freundliche Grüße
MaggieMay

wuffwuff2003

Ich habe die Spalte dann mal aus der Tabelle genommen, und folgenden Text in die Abfrage geschrieben, das funktioniert dann auch ja.:
WHERE ((([hlt1]+[hlt2]+[hlt3]+[hlt4])<>-4)); (ist jetzt ein etwas umgeändertes Beispiel). Jedenfalls zeigt er mir dann alle die Kunden an, die noch nicht alle HLT-Hefte bekommen haben. So wie es sein müsste ja.