collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 40
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 2
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 13860
  • stats Beiträge insgesamt: 65013
  • stats Themen insgesamt: 8765
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 16
  • stats Am meisten online: 415

Autor Thema: Seltsames Verhalten einer Abfrage  (Gelesen 202 mal)

Offline crystal

  • Access-Profi
  • **
  • Beiträge: 382
Seltsames Verhalten einer Abfrage
« am: Februar 04, 2018, 11:11:04 »
Liebes Forum.

Ich habe da ein seltsames Verhalten einer Abfrage festgestellt.
1. Ich habe eine Tab. mit Mitarbeiter-Daten, in der für jeden Tag des Jahres (Join auf Tages-Tabelle) und jeden MA (Join auf MA-Tabelle) in einem J/N-Feld steht, ob der MA an diesem Tag Urlaub hat.
2. Für eine Übersicht möchte ich nun wissen, wie viele MA an jedem Tag Urlaub haben.
3. Dazu habe ich in der Abfrage sum(MAUrlaub) oder count(MAUrlaub) benutzt.
4. Als Resultat erhielt ich immer nur J oder N, nie aber eine Anzahl.
5. Also habe ich das Tabellenfeld auf Zahl (integer) umgestellt.
6. Die Abfrage liefert noch immer nur J oder N.
7. Dann habe ich den SQL-Text der Abfrage kopiert und in eine neue Abfrage eingefügt.
8. Siehe da, die neue Abfrage liefert die Summe, obwohl der SQL-Text völlig identisch mit der ersten Abfrage ist.
9. Wo merkt sich Access das?

Ist das nun ein Bug?

Aber allgemein: ich möchte eigentlich gern bei meinem Feldtyp J/N bleiben. Wie kann ich per Abfrage die "J-Tage" zählen? Count allein scheint nicht zu funktionieren, weil nur Datensätze gezählt werden, bei denen in diesem Feld irgendwas steht, also wird nicht zwischen J und N unterschieden. Sum scheint auch nicht zu gehen, weil die Summe mehrerer J/N-Werte natürlich auch nur J oder N zurückliefern kann, eigentlich logisch.

Würde ein Trick helfen wie summe(MAUrlaub * (-1))?

Gruß,
c.
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7093
Re: Seltsames Verhalten einer Abfrage
« Antwort #1 am: Februar 04, 2018, 11:41:03 »
Hallo,
der von Dir gezeigte Trick ist üblich für die Anzahl der Ja/Nein Werte.
Statt der Multiplikation mit -1 kann auch die Abs() Funktion verwendet werden.
=Abs(Summe(MAUrlaub)
Gruß
Klaus
 
Folgende Mitglieder bedankten sich: crystal

Offline PhilS

  • Administrator
  • Access-Profi
  • *****
  • Beiträge: 298
    • Tipps zu Access, VBA, SQL und Co.
Re: Seltsames Verhalten einer Abfrage
« Antwort #2 am: Februar 04, 2018, 14:10:32 »
[....]
4. Als Resultat erhielt ich immer nur J oder N, nie aber eine Anzahl.
5. Also habe ich das Tabellenfeld auf Zahl (integer) umgestellt.
6. Die Abfrage liefert noch immer nur J oder N.
7. Dann habe ich den SQL-Text der Abfrage kopiert und in eine neue Abfrage eingefügt.
8. Siehe da, die neue Abfrage liefert die Summe, obwohl der SQL-Text völlig identisch mit der ersten Abfrage ist.
Ich denke, das Hauptproblem ist, dass Access die Format-Eigenschaft des Tabellenfeldes in die Abfrage übernommen hat.

Du kannst im Entwurf der Abfrage das Eigenschaftsblatt einblenden, die jeweilige Spalte der Abfrage markieren und dann ein anderes Format in der Format-Eigenschaft der Abfragespalte einstellen.


 
Folgende Mitglieder bedankten sich: crystal

Online ebs17

  • Access-Meister
  • ***
  • Beiträge: 851
Re: Seltsames Verhalten einer Abfrage
« Antwort #3 am: Februar 04, 2018, 16:05:23 »
@PhilS: Da widerspreche ich. Formateigenschaften sind Anzeigeformate (Ableitungen von Inhalten), während SQL die Inhalte verarbeitet.

Wenn ich über eine Abfrage nachdenken sollte, würde ich mich zuerst der Abfragedefinition (SQL-Anweisung) zuwenden zzgl. der Datenlage.
Die Abfragedefinition beschreibt vollständig und im Zusammenhang, was genau gemacht werden soll. Ob das Geschichten rundherum leisten können, dürfte desweilen zweifelhaft sein.
Mit freundlichem Glück Auf!

Eberhard
 

Offline PhilS

  • Administrator
  • Access-Profi
  • *****
  • Beiträge: 298
    • Tipps zu Access, VBA, SQL und Co.
Re: Seltsames Verhalten einer Abfrage
« Antwort #4 am: Februar 04, 2018, 16:37:36 »
@PhilS: Da widerspreche ich. Formateigenschaften sind Anzeigeformate (Ableitungen von Inhalten), während SQL die Inhalte verarbeitet.
? - Den Widerspruch verstehe ich nicht. - Grundsätzlich stimme ich dir vollständig zu. Nur war doch das konkrete Problem, beschrieben in den von mir zitierten Punkten, dass eine SQL-Abfrage das richtige Ergebnis liefert, aber eine andere mit identischem SQL das falsche (nicht gewünschte) Ergebnis anzeigt.

Ursache ist, dass die folgende Abfrage immer nur "Yes" oder "No" anzeigt.
SELECT Format( Sum(einFeld) ,"Yes/No")
FROM eineTabelle
In dem konkreten Fall war (vermutlich) die Formatierung aber eben nicht im SQL definiert, sondern als Anzeigeformat der Spalte in der (Access-)Abfragedefiniton. - Das Ergebnis für die Ausgaben ist aber dieselbe.
 

Online ebs17

  • Access-Meister
  • ***
  • Beiträge: 851
Re: Seltsames Verhalten einer Abfrage
« Antwort #5 am: Februar 04, 2018, 17:00:57 »
Du verwendest jetzt die Format-Funktion. Diese erzeugt einen neuen Wert sowie in jedem Fall einen String bzw. Variant mit Vorrang String, was in dem Moment auf das Gleiche hinausläuft.

Den Unterschied zwischen Eigenschaft und Funktion (Anweisung) sollte einem als Basic stets präsent sein.

1, 2018, Sonntag, 16, Januar
... sind alles Formate (Anzeigeeigenschaften), mit denen ein Tabellenfeldinhalt mit Wertfüllung Now() angezeigt werden kann, also einem typischen Date-Wert mit Datums- und Zeitanteil. Wenn man hier das Anzeigeformat tauscht, ergibt das Nullkommanull Änderung am eigentlichen Wert.
Mit freundlichem Glück Auf!

Eberhard
 

Offline PhilS

  • Administrator
  • Access-Profi
  • *****
  • Beiträge: 298
    • Tipps zu Access, VBA, SQL und Co.
Re: Seltsames Verhalten einer Abfrage
« Antwort #6 am: Februar 04, 2018, 17:30:44 »
Du verwendest jetzt die Format-Funktion.
Ja, weil sie das Problem verdeutlicht und sich im Gegensatz zu der Eigenschaft im Abfragedesigner hier einfach in Textform darstellen lässt.
Ich schrieb dazu (Fettdruck nachträglich ergänzt):
Zitat
In dem konkreten Fall war (vermutlich) die Formatierung aber eben nicht im SQL definiert, sondern als Anzeigeformat der Spalte in der (Access-)Abfragedefiniton.

Den Unterschied zwischen Eigenschaft und Funktion (Anweisung) sollte einem als Basic stets präsent sein.
In der visuellen Darstellung der Werte gibt es keinen Unterschied.

Ich weiß aber ehrlich gesagt nicht worüber wir hier eigentlich diskutieren.
Hast du eine andere Erklärung als meine, wieso zwei verschiedene Abfragen mit identischem SQL verschiedene Werte "liefern"?
(Der Begriff "liefern" wäre natürlich zu präzisieren, dies kann aber nur Crystal als derjenige, bei dem das Problem aufgetreten ist.)
 

Offline crystal

  • Access-Profi
  • **
  • Beiträge: 382
Re: Seltsames Verhalten einer Abfrage
« Antwort #7 am: Februar 04, 2018, 18:21:00 »
Hallo,

@PhilS
ich denke, du hast völlig Recht, denn ich habe keinerlei Formatierung im SQL-Konstrukt verwendet. Access holt sich das Format der Ausgabe- oder Anzeige-Spalte dann initial aus dem Format des Datenfeldes und behält diese bei, wenn man sie nachträglich in der Tabelle selbst ändert.

@ebs17
Weiterer Kommentar überflüssig, hat PhilS bereits gemacht.

Mit "liefern" meinte ich übrigens schlicht die Darstellung, wenn man auf "Ausführen" klickt, also die "Datenblattansicht". Und tatsächlich sehe ich in der Entwurfs-Ansicht im Eigenschaftenblatt des Feldes "sum(MAUrlaub)" unter Format ein prangendes "Ja/Nein". Als Auswahltyp steht da sogar Feldeigenschaften ganz oben im Kopf. Ich glaube, dieses Eigenschaftenblatt hatte ich im Abfrage-Designer nie aktiviert...

Danke,
c.
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!