Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: HDM am September 28, 2017, 07:20:42

Titel: SQl passt nicht
Beitrag von: HDM am September 28, 2017, 07:20:42
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
Titel: Re: SQl passt nicht
Beitrag von: Lachtaube am September 28, 2017, 08:05:01
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;
Titel: Re: SQl passt nicht
Beitrag von: HDM am September 28, 2017, 08:15:23
Hallo,

leider bleibt auch so das Ergeniss das gleiche

Win 7 wird trotzdem gefunden und ebend nicht ausgeschlossen

Titel: Re: SQl passt nicht
Beitrag von: HDM am September 28, 2017, 08:34:47
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
Titel: Re: SQl passt nicht
Beitrag von: bahasu am September 28, 2017, 09:38:31
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
Titel: Re: SQl passt nicht
Beitrag von: Lachtaube am September 28, 2017, 09:45:26
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 ));
Titel: Re: SQl passt nicht
Beitrag von: HDM am September 28, 2017, 10:05:44
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 :=(

Titel: Re: SQl passt nicht
Beitrag von: bahasu am September 28, 2017, 10:14:45
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));

Titel: Re: SQl passt nicht
Beitrag von: HDM am September 28, 2017, 10:25:38
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
Titel: Re: SQl passt nicht
Beitrag von: bahasu am September 28, 2017, 10:50:36
Hi,

Im VBA-Teil eintragen
DoCmd.SetWarnings False

Habe ich aber nicht getestet, ob das auch bei der Erstellungsabfrage anwendbar ist.

Harald
Titel: Re: SQl passt nicht
Beitrag von: HDM am September 28, 2017, 10:56:51
werde ich ausprobieren und Rückmeldung geben

Titel: Re: SQl passt nicht
Beitrag von: HDM am September 28, 2017, 14:22:12
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
Titel: Re: SQl passt nicht
Beitrag von: DF6GL am September 28, 2017, 14:50:02
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.
Titel: Re: SQl passt nicht
Beitrag von: HDM am September 28, 2017, 15:35:49
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
Titel: Re: SQl passt nicht
Beitrag von: DF6GL am September 28, 2017, 15:55:32
Hallo,


und  noch 'ne Frage:

Was willst dann mit der geöffneten Abfrage anfangen?
Titel: Re: SQl passt nicht
Beitrag von: HDM am September 28, 2017, 16:08:29
Nichts, die brauche ich nicht.
Desshalb schliesse ich diese auch weider.
docmd.Close acQuery "Name"

Falsch?

HDM
Titel: Re: SQl passt nicht
Beitrag von: MzKlMu am September 28, 2017, 16:40:14
Hallo,
warum öffnest Du diese, wenn Du diese doch nicht brauchst und gleich wieder schließt ?
Welchen Nutzen versprichst Du Dir davon (vom Öffnen) ?