[Gelöst]Virtuelle File Tabelle

26. November 2009 19:52

Hallo zuammen,

ich habe mal wieder ein kleines (größeres) Problem. Ich habe eine SingleInstance Codeunit, die einen bestimmten Ordner auf Dateien überprüfen soll. Die Funktion hatte mal funktioniert, dann gab es ein Update auf SQL (evtl. wurden auch noch ein paar SPs oder HFs eingespielt, aber kein Major Update mehr). Jetzt geht es nicht mehr und ich hab schon alles Mögliche ausprobiert, aber ich steig nicht dahinter, wo das Problem ist. Die verwendete Version ist die 4.03.
Hier der Code der Funktion:
Code:
FileRec.SETRANGE(Path,'C:\Import');
FileRec.SETRANGE("Is a file",TRUE);
FileRec.SETFILTER(Name,'*.xml');  //<- Ich weiß, nicht ganz sauber, aber hier liegt nicht das Poblem.

IF FileRec.FINDSET THEN
  REPEAT
    CLEAR(FileRec2);
    FileRec2.COPYFILTERS(FileRec);
    FileRec2.SETRANGE(Name,FileRec.Name);
    MESSAGE('%1',FileRec.GETFILTERS);
    MESSAGE('%1',FileRec2.GETFILTERS);
    FileRec2.FINDFIRST; //<- Hier steigt NAV aus mit der Meldung, daß die Datei nicht existieren würde.

    MESSAGE('Geht!');
  UNTIL FileRec.NEXT = 0;


Ich hab schon gesucht und die Tipps mit dem CLEAR und dem Folderwechsel ausprobiert, aber das bringt alles nichts. Hat jemand noch eine andere Idee?
Zuletzt geändert von HattrickHorst am 16. Dezember 2009 22:50, insgesamt 1-mal geändert.

Re: Virtuelle File Tabelle

26. November 2009 21:13

Also in der C/Side-Referenz in Nav2009 zu FINDFIRST steht

This function should be used instead of FIND('-') when you only need the first record.

You should only use this function when you explicitly want to find the first record in a table or set. Do not use this function in combination with REPEAT..UNTIL.


Volker

Re: Virtuelle File Tabelle

26. November 2009 23:27

Ääähh... ja, das stimmt. Und wie kann mir das jetzt weiterhelfen? Ich verstehe nicht ganz, was Du mir damit sagen möchtest.

Re: Virtuelle File Tabelle

27. November 2009 00:33

Hallo HattrikHorst,

lass doch mal den SETFILTER auf '*.xml' weg, findet er dann etwas?

Falls ja, was findet er? Eine Datei '*.XML'. Man beachte die Groß- und Kleinschreibung. Falls Das nicht das Problem ist, schreib den Setfilter mal mit SETFILTER(Name,'%1','*.xml');

Bringt auch das nichts, mach mal mit dem Filerec ein Setrange nach 'c:\' mit anschließendem Find. Erst danach wieder den normalen Code.

Gruß, Fiddi

Re: Virtuelle File Tabelle

27. November 2009 09:18

Hallo!

Vielleicht funktioniert das hier:
Code:
File.RESET;
File.SETRANGE(Path,'');
IF File.ISEMPTY THEN;
File.SETRANGE(Path,'c:\Import\');   <----------Backslash hinter Import!
File.SETRANGE("Is a file",TRUE);
File.SETFILTER(Name,'*.xml');
IF File.FINDSET THEN BEGIN


Gruß
svr

Re: Virtuelle File Tabelle

27. November 2009 09:54

svr hat geschrieben:Vielleicht funktioniert das hier:

Code:
File.RESET;
File.SETRANGE(Path,'');
IF File.ISEMPTY THEN;
File.SETRANGE(Path,'c:\Import\');   <----------Backslash hinter Import!
File.SETRANGE("Is a file",TRUE);
File.SETFILTER(Name,'*.xml');
IF File.FINDSET THEN BEGIN

Der Backslash ist egal (glaube ich), aber die ersten drei Zeilen sollten helfen, damit Nav das Verzeichnis neu einliest.

Re: Virtuelle File Tabelle

27. November 2009 10:13

HattrickHorst hat geschrieben:Ääähh... ja, das stimmt. Und wie kann mir das jetzt weiterhelfen? Ich verstehe nicht ganz, was Du mir damit sagen möchtest.


Alos ich habe das so gelesen, dass man Findfirst mit Repeat...Until nicht verwenden sollte.

Re: Virtuelle File Tabelle

27. November 2009 10:41

vsnase hat geschrieben:Alos ich habe das so gelesen, dass man Findfirst mit Repeat...Until nicht verwenden sollte.

Das gilt nur, wenn bei beiden Befehlen die gleiche Recordvariable verwendet wird. Dies trifft hier jedoch nicht zu.

Re: Virtuelle File Tabelle

27. November 2009 18:13

fiddi hat geschrieben:Falls ja, was findet er? Eine Datei '*.XML'. Man beachte die Groß- und Kleinschreibung. Falls Das nicht das Problem ist, schreib den Setfilter mal mit SETFILTER(Name,'%1','*.xml');

Habe ich beides (Groß-/Kleinschreibung und mit %1) schon ausprobiert.
fiddi hat geschrieben:Bringt auch das nichts, mach mal mit dem Filerec ein Setrange nach 'c:\' mit anschließendem Find. Erst danach wieder den normalen Code.

Habe ich auch schon ausprobiert.

Aber es geht auch gar nicht um die erste Recordvariable. Hier funktioniert alles korrekt und er findet alle XML-Dateien innerhalb des Ordners. Nur bei der zweiten, wenn er sich konkret eine spezielle Datei rauspicken soll, dann knallt es, obwohl die Datei vorhanden ist.

Re: Virtuelle File Tabelle

27. November 2009 18:14

McClane hat geschrieben:
svr hat geschrieben:Vielleicht funktioniert das hier:

Code:
File.RESET;
File.SETRANGE(Path,'');
IF File.ISEMPTY THEN;
File.SETRANGE(Path,'c:\Import\');   <----------Backslash hinter Import!
File.SETRANGE("Is a file",TRUE);
File.SETFILTER(Name,'*.xml');
IF File.FINDSET THEN BEGIN

Der Backslash ist egal (glaube ich), aber die ersten drei Zeilen sollten helfen, damit Nav das Verzeichnis neu einliest.

Richtig, Backslash hin und her habe ich auch schon ausprobiert. Geht beides.

Re: Virtuelle File Tabelle

27. November 2009 18:16

Natalie hat geschrieben:
vsnase hat geschrieben:Alos ich habe das so gelesen, dass man Findfirst mit Repeat...Until nicht verwenden sollte.

Das gilt nur, wenn bei beiden Befehlen die gleiche Recordvariable verwendet wird. Dies trifft hier jedoch nicht zu.

Genau das ist der Punkt. Das Problem besteht nicht bei der allgemeinen Befilterung der ersten Recordvariable, sondern bei der speziellen Befilterung der zweiten Recordvariable.

Re: Virtuelle File Tabelle

27. November 2009 18:28

Ich hab den Code nun mal ausprobiert, und der findet drei xml-dateien problemlos (Nav5SP1 allerdings). Nur, wenn man nach dem ersten Lauf die Dateien in dem Verzeichnis ändert, muss man das Verzeichnis neu einlesen (SetRange(Path,''), findset und dann von vorne), damit die Änderungen bemerkt werden.

Re: Virtuelle File Tabelle

27. November 2009 18:43

hmmm... ich habe das auch unter 5.01 ausprobiert und bei mir geht es nicht. Ist beides ne SQL-DB!

Edit: Achso, und das REPEAT kann man im Prinzip auf getrost ignorieren, denn der Fehler tritt schon beim ersten Durchlauf auf.

Re: Virtuelle File Tabelle

16. Dezember 2009 22:42

Es lag am Kernel. Man muß mindestens die Build No. 25143 benutzen, damit das Problem behoben ist. Aber Vorsicht: Mit diesem Build werden auch andere Programmdateien aktualisiert, nicht nur die Executables. Ich habe direkt Build 25726 verwendet, aber hier werden nur die exe-Dateien ausgetauscht, daher funktionierte es erst auch nicht.

Unter 5.01 ist das Problem spätestens mit Build 29902 behoben.