Rash thoughts about .NET, C#, F# and Dynamics NAV.


"Every solution will only lead to new problems."

Saturday, 23. September 2006


Navision: Unnötiges Count vermeiden

Filed under: Navision — Steffen Forkmann at 10:40 Uhr

Wenn man im Navision prüfen will ob beispielsweise nur genau ein Datensatz auf den Filterausdruck passt. Schreibt man das oft so:

SETCURRENTKEY(Field); SETFILTER(Field,Filter); IF COUNT = 1 THEN BEGIN // Do something END ELSE BEGIN // Do something else END;

Wenn tatsächlich nur ein Datensatz in der Menge liegt ist dieser Ausdruck auch schon optimal und gut lesbar. Wenn jedoch viele Datensätze in der Menge liegen bekommt man schnell ein Performance-Problem. Mit dem folgenden Trick kann man das relativ einfach umgehen:

SETCURRENTKEY(Field); SETFILTER(Field,Filter); IF FIND('-') AND NEXT = 0 THEN BEGIN FIND('-'); // Do something END ELSE BEGIN // Do something else END;

Man macht zwar an der Stelle 2 Find’s und 1 Next, aber wenn die Datenmenge groß ist, dann macht das einen enormen Unterschied.

3 Comments »

  1. Das ist sicher richtig, doch manchmal braucht man die tatsächliche Anzahl der Datensätze (z.B. für eine Fortschrittsanzeige), dann kommt man um ein count nicht herum.

    Comment by vanilla-flavour — Monday, 25. September 2006 um 14:11 Uhr

  2. Ja da hast du Recht.

    Aber das ist ja meistens nur die äußere Schleife. Wenn du tief in irgendwelchen Berechnungsfunktionen steckst brauchst du jedoch oftmals nur eine Aussage in der Art: “0, 1 oder viele Datensätze”.

    Comment by Steffen Forkmann — Monday, 25. September 2006 um 14:20 Uhr

  3. In dem Fall bin ich bei Dir.

    Comment by vanilla-flavour — Monday, 25. September 2006 um 14:32 Uhr

RSS feed for comments on this post. | TrackBack URI

Leave a comment

XHTML ( You can use these tags): <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> .