COUNT-Funktion auf temporären Tabellen (CC) [Gelöst]

26. September 2011 11:31

Hi zusammen,

ich habe zwar jede Menge interessante Beiträge und Links zum Count-Befehl gefunden, jedoch stehe ich derzeit vor einem ganz spezifischen Problem, welches ich auch durch intensive Nutzung der Forensuche und Konsultation des C/SIDE Reference Guide noch nicht befriedigend lösen konnte:

Ich habe eine temporäre Tabelle, setze einige Filter und möchte dann feststellen, wieviele Datensätze den Filterkriterien entsprechen. Meines Wissens reicht doch in diesem Fall der Aufruf der Count-Funktion (natürlich nach dem Setzen der Filter), oder? Oder ist das bei temporären Tabellen anders? Der Aufruf der Count-Funktion liefert mir in meinem konkreten Fall nämlich die Anzahl ALLER Datensätze und ignoriert die Filter völlig. Erst wenn ich vorher (d.h. nach dem Setzen der Filter und vor dem Aufruf von COUNT) den FINDSET-Befehl anwende erhalte ich ein korrektes Ergebnis. Ist das normal? Liegt es am SQL-Server?
Zuletzt geändert von Alex Gilch am 29. September 2011 13:54, insgesamt 2-mal geändert.

Re: COUNT-Funktion auf temporären Tabellen (CC)

26. September 2011 11:43

Hi,

ich denke sobald der Zeiger auf einen Datensatz gesetzt wird, dann kann die Anzahl der Datensätze ermittelt werden.
Ansonsten steht der Zeiger nirgendswo.

Gruß
Aydin

Re: COUNT-Funktion auf temporären Tabellen (CC)

26. September 2011 12:01

Also bei mir funktioniert das Ganze mit einer Temp-Tabelle.
COUNT funktioniert auch ohne das der Zeiger auf einem bestimmten Datensatz steht.
Bist du denn 100% sicher, dass die Filter richtig greifen?

Re: COUNT-Funktion auf temporären Tabellen (CC)

26. September 2011 12:06

Hallo,


vielleicht zeigst du mal den Code. Kann sein, dass da ein Denkfehler ist:-)

Gruß
Aydin

Re: COUNT-Funktion auf temporären Tabellen (CC)

29. September 2011 09:59

Hi zusammen,

war leider ein paar Tage außer Gefecht - aber vielen Dank schon mal für Eure Antworten!

Also hier mal ein beispielhaftes (!) Codeschnipsel, welches von der Struktur und den verwendeten Befehlen her aber dem tatsächlichen Code entspricht, wobei TmpTable und TmpTable2 Recordvariablen mit dem gleichen Subtyp sind:


Code:
(...)
TmpTable.RESET;
TmpTable2.RESET;
TmpTable.SETRANGE("FeldEins",WertEins);
TmpTable.SETRANGE("FeldZwei",WertZwei);
TmpTable2.COPYFILTERS(TmpTable);
TmpTable.SETRANGE("FeldDrei",'');

//WARUM IST HIER EIN FINDSET NOTWENDIG????
IF TmpTable.FINDSET THEN;
IF TmpTable2.FINDSET THEN;

IF TmpTable.COUNT <> TmpTable2.COUNT THEN
(...)


Meine dazugehörige Frage steht auch nochmal im Code - wenn ich die beiden FINDSET-Befehle weglasse, liefert COUNT mir jeweils immer die Anzahl der Datensätze der ungefilterten Recordvariablen. Weiß jemand, warum das so ist?

Re: COUNT-Funktion auf temporären Tabellen (CC)

29. September 2011 10:05

Hallo,

sind in TmpTable und TmpTable2 denn die gleichen Daten? Denn bei einer temporären Tabelle hat jede Tabelle ihre eigenen Daten, nicht so wie bei einer richtigen Record- Variablen, wo alle Record- Variablen auf die gleichen Daten verweisen.

Gruß, Fiddi

Re: COUNT-Funktion auf temporären Tabellen (CC)

29. September 2011 10:13

Hi Fiddi,

sorry, das hab ich vergessen zu erwähnen:
Beide Tabellen enthalten unterschiedliche Daten, genauer gesagt gehört zwar jeweils ein Record aus TmpTable "inhaltlich" zu einem Record aus TmpTable2, die Datensätze unterscheiden sich aber jeweils im Inhalt zweier Felder. Und mit dem Stück Code möchte ich quasi abprüfen, ob zu jedem Record aus TmpTable auch ein "Pendant" in TmpTable2 existiert.

Edit: Jetzt muss ich doch nachfragen, nix für ungut: Die COUNT-Funktion sollte aber doch unabhängig vom Inhalt der beiden Variablen korrekte Werte liefern, zumindest dahingehend dass sie die Anzahl der den Filtern entsprechenden Datensätze auch ohne vorherigen Aufruf von FINDSET zurückgibt (ob das jetzt inhaltlich Sinn macht oder nicht sei mal dahingestellt :wink:), oder?

Re: COUNT-Funktion auf temporären Tabellen (CC)

29. September 2011 13:10

Hallo Alex,


mal blöd gefragt, wo werden die temp Tabellen gefüllt?
Ich seh keinen Insert, daher können da keine Daten enthalten sein:-)


Gruß
Aydin

Re: COUNT-Funktion auf temporären Tabellen (CC)

29. September 2011 13:19

Hi Aydin,

berechtigte Frage :lol: Also das passiert weiter "vorne" im Code, da gibt's ne eigene Funktion für, die hab ich jetzt gar nicht explizit geposted. Beide temporäre Tabellen enthalten Werte, das kann ich sehen. Und solange ich vorher jeweils einen FINDSET absetze liefert die COUNT-Funktion ja auch korrekte Ergebnisse. Ich weiß auch nicht mehr weiter, vielleicht sollte ich das FINDSET einfach stehen lassen und fertig...

Edit: Typo

Re: COUNT-Funktion auf temporären Tabellen (CC)

29. September 2011 13:25

Alex Gilch hat geschrieben:...vielleicht sollte ich das FINDSET einfach stehen lassen und fertig...

Würde ich sagen. Nicht den Kopf zerbrechen und akzeptieren, dass sich temporäre Tabellen eben manchmal anders verhalten als man denkt.

Re: COUNT-Funktion auf temporären Tabellen (CC)

29. September 2011 13:48

m_schneider hat geschrieben:Würde ich sagen. Nicht den Kopf zerbrechen und akzeptieren, dass sich temporäre Tabellen eben manchmal anders verhalten als man denkt.


:lol:
Michael, ich glaube Du hast recht. Ich lass das jetzt mal gut sein, temporäre Tabellen sind halt einfach ein bißchen anders. Und es funktioniert ja soweit ganz gut. Daher - danke für all Eure Mühen, das Thema kann meinetwegen geschlossen werden.

Re: COUNT-Funktion auf temporären Tabellen (CC)

29. September 2011 13:53

Hi Natalie,

da hast Du natürlich recht, sorry. Gibt's auch einen Status wie "Geschlossen" oder so? Gelöst ist das Problem ja nicht wirklich... :roll:

Re: COUNT-Funktion auf temporären Tabellen (CC) (gelöst)

29. September 2011 13:54

Nee, gibt nur "gelöst" im Sinne von "erledigt" :-)

Re: COUNT-Funktion auf temporären Tabellen (CC) [Gelöst]

29. September 2011 13:57

Alles klar, dann lassen wir das "Gelöst" stehen :wink:

Re: COUNT-Funktion auf temporären Tabellen (CC) [Gelöst]

30. September 2011 08:27

Hallo Alex,

ich möchte das eigentlich nicht so stehen lassen 8-)

Mit welchem Build hast du getestet? Ich hab das grad mit 32752 getestet, das läuft mit unten stehendem Code.

Code:
IF Cust.FIND('-') THEN REPEAT
  TempCust := Cust;
  TempCust.INSERT;
UNTIL Cust.NEXT = 0;

MESSAGE('Count all: ' + FORMAT(Cust.COUNT)); // 68
MESSAGE('Temp Count all: ' + FORMAT(TempCust.COUNT)); // 68

TempCust.SETRANGE("Country/Region Code", 'CH');
MESSAGE('Temp Count CH: ' + FORMAT(TempCust.COUNT)); // 3


TempCust.SETRANGE("Country/Region Code");
TempCust.SETRANGE("Salesperson Code", 'PS');
MESSAGE('Temp Count PS: ' + FORMAT(TempCust.COUNT)); // 26


Kannst du das bitte mal in einer Codeunit prüfen, ob du die korrekten (oben CRONUS AG Werte) Werte bekommst?

Re: COUNT-Funktion auf temporären Tabellen (CC) [Gelöst]

30. September 2011 11:41

Hi Carsten,

also wir verwenden hier Build 29626. Und ich hab Dein Codebeispiel mal getestet - es funktioniert. Jetzt bin ich ratlos. :shock:

Re: COUNT-Funktion auf temporären Tabellen (CC) [Gelöst]

30. September 2011 11:54

Hat es vielleicht damit zu tun, dass der Temporäre Record in einer anderen Funktion gefüllt wird, als er dann ausgewertet werden soll?

Re: COUNT-Funktion auf temporären Tabellen (CC) [Gelöst]

30. September 2011 11:59

m_schneider hat geschrieben:Hat es vielleicht damit zu tun, dass der Temporäre Record in einer anderen Funktion gefüllt wird, als er dann ausgewertet werden soll?


Diese Möglichkeit hatte ich vorhin auch schon mal in Betracht gezogen, schien mir dann aber doch unrealistisch. Aber wenn Du jetzt auch darüber nachgedacht hast... Ich werde den Code mal umbauen, so dass INSERT und COUNT innerhalb der gleichen Funktion aufgerufen werden.

Re: COUNT-Funktion auf temporären Tabellen (CC) [Gelöst]

30. September 2011 13:00

Jetzt geht's. Auch im ursprünglichen Code. Weiß der Geier warum, ich bin jetzt wirklich konsterniert :shock:

Wie dem auch sei - das ursprüngliche Problem besteht also gar nicht mehr. COUNT funktioniert auch ohne vorheriges FINDSET. Trotzdem danke für's Mitsuchen. Wünsche Euch ein schönes Wochenende!