[gelöst]Grundsatzfrage: Verhalten File-Tabelle

24. Februar 2010 15:51

Hallo zusammen,

ich stehe hier vor einem Phänomen, was ich mir nicht erklären kann. Ich prüfe bei einem Buttonpush nach, ob ein Verzeichnis existiert und gebe (wenn dem so ist, den Pfad zurück, um den weiterzuverarbeiten.

Code:
VerzeichnisL.RESET;
VerzeichnisL.SETRANGE(Path, TEXTBasispfad + parNummer + '\');
//VerzeichnisL.SETRANGE("Is a file", FALSE);  nicht notwendig
IF VerzeichnisL.FINDFIRST THEN ;


ich habe das hier mal abgekürzt. Wenn das Verzeichnis nun nicht existiert, erhalte ich nach dem FINDFIRST eine Meldung von Navision, dass dieser Pfad nicht gefunden werden kann. So ein Verhalten habe ich bisher noch nie beobachtet, wenn ich per FIND eine Tabelle durchsuche, daher meine Frage: Ist das ein spezieller Fall mit der File Tabelle? Kann ich das irgendwie unterbinden?
Zuletzt geändert von CaddyM am 24. Februar 2010 17:44, insgesamt 1-mal geändert.

Re: Grundsatzfrage: Verhalten File-Tabelle

24. Februar 2010 16:56

Auf deine Frage kann ich leider keine Antwort geben, aber ich denke meine Frage passt auch ganz gut zu dem Thema.

Eine SingleInstance-CodeUnit mit Timer durchläuft die FILE-Tabelle.
Werden die Dateien gefunden, kommen die in ein BLOB und werden anschliessend gelöscht. Beim nächsten durchlauf will er dann aber wieder auf die Dateien zugreifen.
Das sollte ja eigtl. hiermit abgefangen sein:
Code:
CLEAR(FILEREC)
FILEREC.RESET;
FILEREC.SETRANGE("Is File",TRUE);
FILERECT.SETFILTER(Name,'<>%1','blb');
IF FILEREC.FIND('-') THEN BEGIN
  ...
  FILE.ERASE(FILEREC.Path+FILEREC.Name);
END;

Re: Grundsatzfrage: Verhalten File-Tabelle

24. Februar 2010 17:09

CaddyM hat geschrieben:Wenn das Verzeichnis nun nicht existiert, erhalte ich nach dem FINDFIRST eine Meldung von Navision, dass dieser Pfad nicht gefunden werden kann. So ein Verhalten habe ich bisher noch nie beobachtet, wenn ich per FIND eine Tabelle durchsuche, daher meine Frage: Ist das ein spezieller Fall mit der File Tabelle? Kann ich das irgendwie unterbinden?

Das Verhalten kriege ich nur beim ersten Zugriff hin, danach wird das "if findfirst" korrekt abgefangen. Aber nur, insofern ich zwischendurch nicht versuche, ein anderes Verzeichnis einzulesen.
Umgehen könntest du das mit einem 'Windows Script Host Object Model'.FileSystemObject, Methode FolderExists.

Danjo hat geschrieben:Werden die Dateien gefunden, kommen die in ein BLOB und werden anschliessend gelöscht. Beim nächsten durchlauf will er dann aber wieder auf die Dateien zugreifen.

Und er sollte die Dateien nicht mehr finden? Dieselbe Sache, nur andersrum: du müsstest auf ein anderes Verzeichnis wechseln und danach das ursprüngliche nochmal einlesen, damit es aktuell ist.

Re: Grundsatzfrage: Verhalten File-Tabelle

24. Februar 2010 17:22

Danke McClane,
sieht soweit mal ganz gut aus :-)
Dann sollte er jetzt auch merken sobald neue Dateien drinnen sind.

Re: Grundsatzfrage: Verhalten File-Tabelle

24. Februar 2010 17:44

Ich denke mal dann steige ich da um auf den Scripting Host - die Meldung würde die Mitarbeiter nur irritieren :wink:

Danke sehr, somit für mich: gelöst.

Re: [gelöst]Grundsatzfrage: Verhalten File-Tabelle

25. Februar 2010 12:56

Nochmal hallo,

hier dann die einwandfrei funktionierende Lösung. Aufgabenstellung war, zu prüfen, ob ein Verzeichnis für einen Artikel auf einem Netzlaufwerk besteht. Falls es nicht existiert, sollte es angelegt werden und der Pfad zurückgegeben werden. die Variable "FileSystem" ist wie von McLane vorgeschlagen :-)

Code:
findeOrdner(parNummer : Code[10]) retOrdner : Text[250]
retOrdner := '';

IF ISCLEAR(FileSystem) THEN
  CREATE(FileSystem);

IF NOT FileSystem.FolderExists(TEXTBasispfad + parNummer) THEN
   FileSystem.CreateFolder(TEXTBasispfad + parNummer);

retOrdner := TEXTBasispfad + parNummer + '\';

CLEAR(FileSystem);
EXIT(retOrdner);