none
Anzahl Datensätze ermitteln

    Frage

  • Hallo zusammen,

    ich habe wieder mal ein Problen.

     

    In einem Report möchte ich die Summe aus einem Feld [Teilname] in dem ein "A" steht, oder nichts, ermitteln. Also nur die Dtensätze zählen in denen das "A" steht.

     

    Wenn ich [=Anzahl([Teilname]) ] verwende, kommt die falsche Anzahl (zu viele)!

    Mit [DCount("*"; "tblAnmeldg"; "Teilname = 'A' ")] wird die korrekte Anzahl ausgegeben.

     

    Gibt es dafür eine Erklärung?

    Ich habe auch schon versucht herauszufinden, ob im Feld[Teilname] noch etwas steht, Leerstring oder so etwas, aber Nein!

     

    Schon mal besten Dank

    und noch ein schönes Wochenende

     

    Richard

     

     

    Freitag, 19. November 2010 21:31

Antworten

  • Hallo,

    Hölzel Richard wrote:

    In einem Report möchte ich die Summe aus einem Feld [Teilname] in dem ein
    "A" steht, oder nichts, ermitteln. Also nur die Dtensätze zählen in
    denen das "A" steht.

    Am einfachsten schreibst du in die Datenherkunft des Berichts in einem Feld

    AnzahlA: Iif([Teilname]='A', 1, 0)

    Uebrigens, fehlt im Feldnamen nicht ein h (Teilnahme)? Ausserdem wirst du
    in der dt. Version statt Iif Wenn und statt , ; schreiben muessen. Sollte
    Teilname in mehreren Tabellen der Datenherkunft vorkommen, muessen Tabelle
    oder Alias ebenfalls angegeben werden:

    AnzahlA: Iif([tblAnmeldg].[Teilname]='A', 1, 0)

    Im Bericht verwendest du einfach =Summe([AnzahlA]) als Steuerelementinhalt
    fuer das betreffende Feld.

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Samstag, 20. November 2010 02:00
    Moderator
  • Hallo, Peter!

    Peter Doering [MVP] wrote:

    Hölzel Richard wrote:

    In einem Report möchte ich die Summe aus einem Feld [Teilname] in
    dem ein "A" steht, oder nichts, ermitteln. Also nur die Dtensätze
    zählen in denen das "A" steht.

    Am einfachsten schreibst du in die Datenherkunft des Berichts in
    einem Feld

    AnzahlA: Iif([Teilname]='A', 1, 0)

    Uebrigens, fehlt im Feldnamen nicht ein h (Teilnahme)?

    Das dachte ich mir auch gleich als 2. mögliche Ursache. ;-)
    Als 1. übrigens, dass "Anzahl" als vielfaches Schlüsselwort in Access
    gerne mal die Anzahl der Steuerelemente wiedergibt. Allerdings
    normalerweise nicht, wenn es einen Parameter hat.

    Ohne mit den echten Daten testen zu können und ohne genau zu wissen,
    was "falsche Anzahl (zu viele)" konkret heißt, wird man aus der Ferne
    kaum die Ursache des Problems finden.

    Ausserdem
    wirst du in der dt. Version statt Iif Wenn und statt , ; schreiben
    muessen. Sollte Teilname in mehreren Tabellen der Datenherkunft
    vorkommen, muessen Tabelle oder Alias ebenfalls angegeben werden:

    AnzahlA: Iif([tblAnmeldg].[Teilname]='A', 1, 0)

    Im Bericht verwendest du einfach =Summe([AnzahlA]) als
    Steuerelementinhalt fuer das betreffende Feld.

    Das lässt sich ohne Extrafeld in der Datenherkunft mit einem
    einfachen berechneten Steuerelement im Bericht erledigen:

    =Abs(Summe([Teilnahme]="A"))


    Servus
    Karl
    *******
    Access-FAQ: http://www.donkarl.com

    Samstag, 20. November 2010 09:58
  • Hölzel Richard wrote:

    ...
    Es gibt ja zu meiner Frage 3-Lösungen:

    - DCount("*"; "tblAnmeldg"; "Teilname = 'A' ") - wie ich es
    beschrieben habe

    - AnzahlA: Iif([tblAnmeldg].[Teilname]='A', 1, 0) - Peters Vorschlag

    - Karls Vorschlag : =Abs(Summe([Teilnahme]="A"))

    Nun meine Frage dazu, trifft es eigentlich zu, dass man besser die
    DCount(...) Lösung nicht verwendet, weil diese langsamer ist?

    Joo, DCount schickt extra nochmal eine eigene Abfrage an die
    Tabelle, während du bei den anderen Lösungen die eh schon
    im Bericht vorhandenen Daten nutzt. Besonders effizient ja bei
    meinem. ;-)


    Servus
    Karl
    *******
    Access-FAQ: http://www.donkarl.com

    Samstag, 20. November 2010 16:55

Alle Antworten

  • Hallo,

    bei der ersten Variante hast du keinerlei Kriterien verwendet.

    Deshalb sollten da alle Datensätze gezählt werden.

     

    Gruß,

    Jörn

    Freitag, 19. November 2010 23:04
  • Hallo Jörn,

    na und kannst Du mir auch verraten, wie ich bei der  ersten Varianten =Anzahl([Teilname]) ein Kriterium angeben kann?

     

    Danke

    Richard

    Samstag, 20. November 2010 00:29
  • Hallo,

    Hölzel Richard wrote:

    In einem Report möchte ich die Summe aus einem Feld [Teilname] in dem ein
    "A" steht, oder nichts, ermitteln. Also nur die Dtensätze zählen in
    denen das "A" steht.

    Am einfachsten schreibst du in die Datenherkunft des Berichts in einem Feld

    AnzahlA: Iif([Teilname]='A', 1, 0)

    Uebrigens, fehlt im Feldnamen nicht ein h (Teilnahme)? Ausserdem wirst du
    in der dt. Version statt Iif Wenn und statt , ; schreiben muessen. Sollte
    Teilname in mehreren Tabellen der Datenherkunft vorkommen, muessen Tabelle
    oder Alias ebenfalls angegeben werden:

    AnzahlA: Iif([tblAnmeldg].[Teilname]='A', 1, 0)

    Im Bericht verwendest du einfach =Summe([AnzahlA]) als Steuerelementinhalt
    fuer das betreffende Feld.

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Samstag, 20. November 2010 02:00
    Moderator
  • Hallo, Peter!

    Peter Doering [MVP] wrote:

    Hölzel Richard wrote:

    In einem Report möchte ich die Summe aus einem Feld [Teilname] in
    dem ein "A" steht, oder nichts, ermitteln. Also nur die Dtensätze
    zählen in denen das "A" steht.

    Am einfachsten schreibst du in die Datenherkunft des Berichts in
    einem Feld

    AnzahlA: Iif([Teilname]='A', 1, 0)

    Uebrigens, fehlt im Feldnamen nicht ein h (Teilnahme)?

    Das dachte ich mir auch gleich als 2. mögliche Ursache. ;-)
    Als 1. übrigens, dass "Anzahl" als vielfaches Schlüsselwort in Access
    gerne mal die Anzahl der Steuerelemente wiedergibt. Allerdings
    normalerweise nicht, wenn es einen Parameter hat.

    Ohne mit den echten Daten testen zu können und ohne genau zu wissen,
    was "falsche Anzahl (zu viele)" konkret heißt, wird man aus der Ferne
    kaum die Ursache des Problems finden.

    Ausserdem
    wirst du in der dt. Version statt Iif Wenn und statt , ; schreiben
    muessen. Sollte Teilname in mehreren Tabellen der Datenherkunft
    vorkommen, muessen Tabelle oder Alias ebenfalls angegeben werden:

    AnzahlA: Iif([tblAnmeldg].[Teilname]='A', 1, 0)

    Im Bericht verwendest du einfach =Summe([AnzahlA]) als
    Steuerelementinhalt fuer das betreffende Feld.

    Das lässt sich ohne Extrafeld in der Datenherkunft mit einem
    einfachen berechneten Steuerelement im Bericht erledigen:

    =Abs(Summe([Teilnahme]="A"))


    Servus
    Karl
    *******
    Access-FAQ: http://www.donkarl.com

    Samstag, 20. November 2010 09:58
  • Hallo Peter,

    Hallo Karl,

    besten Dank für die schnellen, wie immer sehr kompetenten und gut beschriebenen Antworten.

     

    Hier meine Antworten zu Euren Fragen und nochmal eine Nachfrage von mir

    1. Teilname ist schon richtig geschrieben, das habe ich in der vorhandenen DB so übernommen, gemeint ist der Teilnehmer-Name.

    2. mit falscher Anzahl ist gemeint, es kommen auch Sätze in denen kein "A" steht. Aber das ist ja durch Eure Unterstützung gelöst, danke.

    3. darf ich noch nachfragen, nur so zu meinem Verständnis:

        Es gibt ja zu meiner Frage 3-Lösungen:

    - DCount("*"; "tblAnmeldg"; "Teilname = 'A' ")  - wie ich es beschrieben habe

    - AnzahlA: Iif([tblAnmeldg].[Teilname]='A', 1, 0)  - Peters Vorschlag

    - AnzahlA: Iif([tblAnmeldg].[Teilname]='A', 1, 0) - Karls Vorschlag

    Nun meine Frage dazu, trifft es eigentlich zu, dass man besser die DCount(...) Lösung nicht verwendet, weil diese langsamer ist?

     

    Nun noch ein schönes Wochenende

    Gruss / Richard

     

     

     

    Samstag, 20. November 2010 16:45
  • Sorry,

    da ist mir ein Fehler unterlaufen!

    Natürlich meinte ich mit Karls Vorschlag :  =Abs(Summe([Teilnahme]="A"))

    Gruss

    Richard

     

     

    Samstag, 20. November 2010 16:49
  • Hölzel Richard wrote:

    ...
    Es gibt ja zu meiner Frage 3-Lösungen:

    - DCount("*"; "tblAnmeldg"; "Teilname = 'A' ") - wie ich es
    beschrieben habe

    - AnzahlA: Iif([tblAnmeldg].[Teilname]='A', 1, 0) - Peters Vorschlag

    - Karls Vorschlag : =Abs(Summe([Teilnahme]="A"))

    Nun meine Frage dazu, trifft es eigentlich zu, dass man besser die
    DCount(...) Lösung nicht verwendet, weil diese langsamer ist?

    Joo, DCount schickt extra nochmal eine eigene Abfrage an die
    Tabelle, während du bei den anderen Lösungen die eh schon
    im Bericht vorhandenen Daten nutzt. Besonders effizient ja bei
    meinem. ;-)


    Servus
    Karl
    *******
    Access-FAQ: http://www.donkarl.com

    Samstag, 20. November 2010 16:55