Guten morgen,
warum funktiniert der SQl nicht.
Ich will einfach aus einer Tabelle alle Treffer, die in einen der drei Felder "Win 7" stehen haben ausschliessen.
SQL:
SELECT tblbeides.*
FROM tblbeides
WHERE (((tblbeides.[Thema der Schulung AD])<>"Win 7")) OR (((tblbeides.Schulungsthema2AD)<>"Win 7")) OR (((tblbeides.Schulungsthema3AD)<>"Win 7"));
Tabelle: siehe Anhang
Das Ergebnis ist das gleiche wie der Inhalt der Tabelle siehe Anhang. Es ändert sich nichts
Danke
HDH
Bereinige die Datenstruktur, denn sonst wird die Abfragerei auf die drei Felder immer zur Qual.
SELECT b.*
FROM tblbeides b
WHERE b.[thema der schulung ad] & "" = "win 7" +
b.schulungsthema2ad & "" = "win 7" +
b.schulungsthema3ad & "" = "win 7" = 0;
Hallo,
leider bleibt auch so das Ergeniss das gleiche
Win 7 wird trotzdem gefunden und ebend nicht ausgeschlossen
Habe mal eine kleine Demo angehangen. Wenn ich Win7 im Feld "Thema der Schulung AD" ausschliesse geht es, aber wenn ich es dann im Feld zweites Thema mache, geht es nicht, woran liegt das?
Danke
Hi,
SELECT tblZeiterfassung.*, tblZeiterfassung.zweitesThema, tblZeiterfassung.drittesThema
FROM tblZeiterfassung
WHERE (((tblZeiterfassung.[Thema der Schulung AD])<>"Win7" Or (tblZeiterfassung.[Thema der Schulung AD]) Is Null) AND ((tblZeiterfassung.zweitesThema)<>"Win7" Or (tblZeiterfassung.zweitesThema) Is Null) AND ((tblZeiterfassung.drittesThema)<>"Win7" Or (tblZeiterfassung.drittesThema) Is Null));
Ist das für Dich zielführend?
Harald
Dann muss man die Ausdrücke noch nach Bool casten.SELECT z.*
FROM TBLZEITERFASSUNG AS z
WHERE (( ( Cbool([z].[thema der schulung ad] & ""="win7")
+ Cbool([z].[zweitesthema] & ""="win7")
+ Cbool([z].[drittesthema] & ""="win7") ) = 0 ));
Danke Euch beiden, es funzt beides, aber wie bekomme ich nun noch den Ausschluss "Manndeckung" mit dazu. Wenn ich den einfach dazuschreibe "Win7" oder "Manndeckung" auch mit den kompletten Feldbezeichnung, passiert es nicht. Win7 bleibt weg Manndeckung drin.
Danke.
@Nouba ja ich baue alles um. Aber bis zum Jahresende brauche ich noch die alten Daten. Dann kann ich es umbauen, leider :=(
SELECT tblZeiterfassung.*, tblZeiterfassung.zweitesThema, tblZeiterfassung.drittesThema
FROM tblZeiterfassung
WHERE ((((tblZeiterfassung.zweitesThema)<>"Win7" And Not (tblZeiterfassung.zweitesThema)="Manndeckung") Or (tblZeiterfassung.zweitesThema) Is Null) AND (((tblZeiterfassung.drittesThema)<>"Win7" And Not (tblZeiterfassung.drittesThema)="Manndeckung") Or (tblZeiterfassung.drittesThema) Is Null) AND (((tblZeiterfassung.[Thema der Schulung AD])<>"Win7" And Not (tblZeiterfassung.[Thema der Schulung AD])="Manndeckung") Or (tblZeiterfassung.[Thema der Schulung AD]) Is Null));
Hallo Harald,
danke das war es. Nun kann ich hoffentlich die Restzahlen für dieses Jahr ermitteln.
Aber nun noch eine Frage. Kann man die Meldung siehe Anhang bei einer Tabellenerstellungsabfrage unterbinden oder per vba mit JA beantworten?
HDM
Hi,
Im VBA-Teil eintragen
DoCmd.SetWarnings False
Habe ich aber nicht getestet, ob das auch bei der Erstellungsabfrage anwendbar ist.
Harald
werde ich ausprobieren und Rückmeldung geben
Hallo Franz,
das mit den setWarnings geht auf jeden Fall schonmal. Aber nun komme ich zu einem erneuten Problem mit dem SQl
Wenn ich den per Docdm.RunSql ausführen will, geht das nicht, weil der String zu lang ist. Wenn ich den nun trenne mit " & _ läuft der auch immer auf den Hammer:
Hier nochmal mein String
SELECT tblbeides.*
FROM tblbeides
WHERE (((tblbeides.zweitesThema)<>"Win7" And (tblbeides.zweitesThema)<>"Manndeckung") AND ((tblbeides.drittesThema)<>"Win7" And (tblbeides.drittesThema)<>"Manndeckung") AND ((tblbeides.[Thema der Schulung AD])<>"Win7" And (tblbeides.[Thema der Schulung AD])<>"Manndeckung")) OR (((tblbeides.zweitesThema) Is Null) AND ((tblbeides.drittesThema)<>"Win7" And (tblbeides.drittesThema)<>"Manndeckung") AND ((tblbeides.[Thema der Schulung AD])<>"Win7" And (tblbeides.[Thema der Schulung AD])<>"Manndeckung")) OR (((tblbeides.zweitesThema)<>"Win7" And (tblbeides.zweitesThema)<>"Manndeckung") AND ((tblbeides.drittesThema) Is Null) AND ((tblbeides.[Thema der Schulung AD])<>"Win7" And (tblbeides.[Thema der Schulung AD])<>"Manndeckung")) OR (((tblbeides.zweitesThema) Is Null) AND ((tblbeides.drittesThema) Is Null) AND ((tblbeides.[Thema der Schulung AD])<>"Win7" And (tblbeides.[Thema der Schulung AD])<>"Manndeckung")) OR (((tblbeides.zweitesThema)<>"Win7" And (tblbeides.zweitesThema)<>"Manndeckung") AND ((tblbeides.drittesThema)<>"Win7" And (tblbeides.drittesThema)<>"Manndeckung") AND ((tblbeides.[Thema der Schulung AD]) Is Null)) OR (((tblbeides.zweitesThema) Is Null) AND ((tblbeides.drittesThema)<>"Win7" And (tblbeides.drittesThema)<>"Manndeckung") AND ((tblbeides.[Thema der Schulung AD]) Is Null)) OR (((tblbeides.zweitesThema)<>"Win7" And (tblbeides.zweitesThema)<>"Manndeckung") AND ((tblbeides.drittesThema) Is Null) AND ((tblbeides.[Thema der Schulung AD]) Is Null)) OR (((tblbeides.zweitesThema) Is Null) AND ((tblbeides.drittesThema) Is Null) AND ((tblbeides.[Thema der Schulung AD]) Is Null));
Wenn ich den nun wie folgt zu trennen versuchen
DoCmd.RunSQL "Select tblbeides.* " & _
"FROM tblbeides WHERE (((tblbeides.zweitesThema) <> "Win7" And (tblbeides.zweitesThema) <> "Manndeckung") And ((tblbeides.drittesThema) <> "Win7" And (tblbeides.drittesThema) <> "Manndeckung") And ((tblbeides.[Thema der Schulung AD]) <> "Win7" And (tblbeides.[Thema der Schulung AD]) <> "Manndeckung")) Or (((tblbeides.zweitesThema) Is Null) And ((tblbeides.drittesThema) <> "Win7" And (tblbeides.drittesThema) <> "Manndeckung") And ((tblbeides.[Thema der Schulung AD]) <> "Win7" And (tblbeides.[Thema der Schulung AD]) <> "Manndeckung")) Or (((tblbeides.zweitesThema) <> "Win7" And (tblbeides.zweitesThema) <> "Manndeckung") And ((tblbeides.drittesThema) Is Null) And ((tblbeides.[Thema der Schulung AD]) <> "Win7" And (tblbeides.[Thema der Schulung AD]) <> "Manndeckung")) " & _
"OR (((tblbeides.zweitesThema) Is Null) AND ((tblbeides.drittesThema) Is Null) AND ((tblbeides.[Thema der Schulung AD])<>"Win7" And (tblbeides.[Thema der Schulung AD])<>"Manndeckung")) OR (((tblbeides.zweitesThema)<>"Win7" And (tblbeides.zweitesThema)<>"Manndeckung") AND ((tblbeides.drittesThema)<>"Win7" And (tblbeides.drittesThema)<>"Manndeckung") AND ((tblbeides.[Thema der Schulung AD]) Is Null)) OR (((tblbeides.zweitesThema) Is Null) AND ((tblbeides.drittesThema)<>"Win7" And (tblbeides.drittesThema)<>"Manndeckung") AND ((tblbeides.[Thema der Schulung AD]) Is Null)) OR (((tblbeides.zweitesThema)<>"Win7" And (tblbeides.zweitesThema)<>"Manndeckung") AND ((tblbeides.drittesThema) Is Null) AND ((tblbeides.[Thema der Schulung AD]) Is Null)) OR (((tblbeides.zweitesThema) Is Null) AND ((tblbeides.drittesThema) Is Null) AND ((tblbeides.[Thema der Schulung AD]) Is Null));"
gehts nicht, weil er beim ersten Win7 stehen bleibt
Im SQL Direktfenster führe ich den Code aus und der funzt einwandfrei. Irgendwie trenne ich hier falsch, aber wo / wie
Danke
HDM
Hallo,
das war Harald , nicht ich ;)
Wieso willst Du eine Auswahl-Abfrage mit Docmd.RunSql ausführen?
RunSQL ist für Aktions-Abfragen zu verwenden.. Für Auswahl-Abfragen steht OpenQuery zur Verfügung.
Wenn der String zu lang ist, dann kürze ihn, indem (in diesem Fall hier) die Qualifizierer (Tabellennamen vor den Feldnamen) weggelassen werden.
Hallo Franz :=) Harrald :=) und Nuoba,
ich mache das dann mal jetzt mit dem openQuery und schauen dass ich fertig werde. Melde mich wieder
Danke aber schonmal auf jeden Fall an alle
HDM
Hallo,
und noch 'ne Frage:
Was willst dann mit der geöffneten Abfrage anfangen?
Nichts, die brauche ich nicht.
Desshalb schliesse ich diese auch weider.
docmd.Close acQuery "Name"
Falsch?
HDM
Hallo,
warum öffnest Du diese, wenn Du diese doch nicht brauchst und gleich wieder schließt ?
Welchen Nutzen versprichst Du Dir davon (vom Öffnen) ?