Merkwürdigesverhalten Setfilter CC [gelöst]

3. Dezember 2010 16:02

Hallo zusammen,

ich habe folgendes Problem.
Bei uns ins Navision kommen Registriernummern von 2 verschiedenen Stellen an. Einmal kann die Nummer mit | und einmal mit - getrennt.
Also muss bei jedem Import geprüft werden, gibt es die Nummer schon.
Wenn ich folgenden Code zum filtern verwende klappt die Suche auch in> 90% aller Fälle.

Code:
  Help := CONVERTSTR(Record.Registriernummer,'|','?');
  Help := CONVERTSTR(Help,'-','?');
  Record.SETCURRENTKEY(Registriernummer);
  Record.SETFILTER(Registriernummer,'%1',Help);
  IF NOT Record.FINDFIRST THEN BEGIN


Hier eine Nummer, bei der die Suche klappt und der existierende Datensatz auch gefunden wird.
HAA79|I6IEA|SNEIU|717K7|IH4CN
Bei der folgender Nummer wird der Datensatz nicht gefunden
HABRS|KDK82|Y0WC9|U4R6J|3GFV7

Sobald ich in der Tabelle manuell ein Feldfilter mit der zweiten Nummer setze (| durch ? ersetzt) wird mir der Datensatz auch korrekt angezeigt.
Dieser Datensatz ist in der Tabelle mit | als Trenner enthalten.
Wenn ich ein SETRANGE verwende, wird der Datensatz ebenfalls gefunden.

Ich habe es auch probiert ein @ vor dem Suchbegriff zu stellen. Dann wird der Datensatz gefunden. Aber die Laufzeit geht unwarscheintlich in die Höhe, obwohl ich vorher den passenden Schlüssel ausgewählt habe.


Hat einer von euch eine Idee, woran es liegen könnte? Oder wie man hier Abhilfe schaffen kann?
Vielen Dank im Voraus.


Gruß

Christian
Zuletzt geändert von cdziewas am 3. Dezember 2010 18:23, insgesamt 2-mal geändert.

Re: Merkwürdigesverhalten Setfilter CC

3. Dezember 2010 16:42

Vielleicht wird hier das ? nicht als Operator erkannt?
Schon einmal statt ? das * probiert?

oder statt:
Code:
Record.SETFILTER(Registriernummer,'%1',Help);

folgendes probiert?
Code:
Record.SETFILTER(Registriernummer, Help);


Ich glaub ein ähnliches Problem hatten wir die letzten Tage schon einmal mit &.

viewtopic.php?f=8&t=11738

mfg,
winfy

Re: Merkwürdigesverhalten Setfilter CC

3. Dezember 2010 17:06

Hi winfy,

danke für die Antwort. Habe es gerade mit * an Stelle eines ? versucht. Leider mit dem gleichen Ergebnis. Ich finde es komisch, dass ich es immer wieder mit dem gleichen Datensatz nachstellen kann. Zumal ich augenscheinlich keinen Unterschied zu den funktionierenden Datensätzen feststellen kann.
Auch ein
Code:
Record.SETFILTER(Registriernummer,Help);

hat keine Abhilfe geschaffen.

Ich bin gerade am überlegen, ob es viel Performance kostet, wenn ich zweimal mit einem SETRANGE drüber laufe (Einmal mit | und einmal mit -).

Gruß

Christian


Nachtrag:

Ich habe nun im Code folgendes nacheinander versucht:

Code:
 Record.SETFILTER(Registriernummer,'%1','HABRS?KDK82?Y0WC9?U4R6J?3GFV7'); 

Code:
 Record.SETFILTER(Registriernummer,'%1','HAB8R?ECCBD?G2JXB?IC6VE?9ZFEW');


Im ersten Fall wird der Datensatz nicht gefunden, obwohl existent. Im zweiten Fall wird der Datensatz gefunden.
Es scheint so, dass Navision nicht immer das ? oder den * als Operatoren erkennt.

Re: Merkwürdigesverhalten Setfilter CC

3. Dezember 2010 18:23

Ich habe mich nun für den doppelten SETRANGE entschieden. Im schlimmsten Fall gibt es 2 Serveranfragen. Aber die Abfragen sind immer noch viel schneller als ein SETFILTER mit * oder @ voran gestellt.

Kann dies jedem, der ähnlich filtern muss oder möchte nur empfehlen. Werde einen Test mit einer Masse an Daten durchführen, um sicherzustellen, dass es hier nicht auch wieder ein Schlupfloch gibt.