Der Befehl SET EXTERNAL DATA PATH setzt oder ändert den externen Speicherort für das im Parameter Feld übergebene Feld für den aktuellen Datensatz.
In 4D lassen sich Datenfelder vom Typ Text, BLOB, Bild und Objekt außerhalb der Datendatei speichern. Weitere Informationen dazu finden Sie im Abschnitt Daten extern speichern des Handbuchs 4D Designmodus.
Die über diesen Befehl definierten Einstellungen gelten nur, wenn der aktuelle Datensatz auf der Festplatte gespeichert wird. Speicherparameter, die in der Struktur der Anwendung gesetzt wurden, werden nicht verändert. Wird der aktuelle Datensatz abgebrochen, führt der Befehl nichts aus.
In Pfad können Sie entweder einen eigenen Pfadnamen übergeben, oder eine Konstante, die einen automatischen Speicherort angibt:
- Eigener Pfadname zur Datei
In diesem Fall nutzen Sie das externe Speichern im "eigenen Modus". Hier sind einige 4D Datenbankfunktionen nicht automatisch verfügbar (siehe Handbuch 4D Designmodus). Insbesondere das Erstellen oder Ändern der Dateien müssen Sie selbst verwalten.
Sie können entweder einen Pfad in Bezug auf die Datendatei oder einen absoluten Pfad übergeben, er muss Name und Endung der Speicherdatei enthalten. Sie müssen die Syntax des Systems verwenden. Für einen relativen Pfad übergeben Sie "../" (Windows) oder "..:" (OS X) am Textanfang. Sie können einen beliebigen Ordner festlegen, das kann auch der Standardordner für externe Dateien der Datenbank sein (DatenbankName.ExternalData) - In diesem Fall sind die Dateien beim Sichern der Datenbank enthalten.
Die im Parameter Pfad angegebene Datei muss vorhanden und zugänglich sein, wenn der Befehl ausgeführt wird. Beachten Sie, dass bei einem ungültigen Pfad (Datei oder Ordner fehlt) ein Fehler nur bei einem als absolut definierten Pfad zurückgegeben wird. Ist ein relativer Pfad angegeben, müssen Sie selbst für die Gültigkeit sorgen, da kein Fehler generiert wird, wenn die Datei nicht gefunden wird.
Sichern Sie die externe Datei im gleichen Ordner wie die Datendatei oder einen ihrer Unterordner, bewertet 4D den angegebenen Pfad als relativ zur Datendatei und behält den Link bei, selbst wenn der Datendateiordner bewegt oder umbenannt wird.
Folglich ist es möglich, dass mehrere Datensätze die gleiche externe Datei gemeinsam nutzen können. Alle Änderungen in dieser Datei sind dann in allen Datensätzen verfügbar. Wenn in solchen Fällen mehrere Prozesse dieselben Felder gleichzeitig im Schreibmodus verwenden können, müssen Sie konkurrierende Zugriffe über Semaphoren steuern, um die evtl. Beeinträchtigung externer Dateien zu vermeiden.
- Automatischer Speicherort
Sie können zwei automatische Speicherorte über folgende Konstanten unter dem Thema Datendatei Wartung angeben:
Konstante |
Typ |
Wert |
Kommentar |
Use default folder |
Lange Ganzzahl |
1 |
Die Daten des Feldes, das als Parameter übergeben wird, werden im Standardordner mit Namen DatenbankName.ExternalData gesichert und neben die Datendatei gelegt. In diesem Modus verwaltet 4D externe Daten wie Daten innerhalb der Datendatei. |
Use structure definition |
Lange Ganzzahl |
0 |
4D verwendet die Parameter, die in der Struktur zum Speichern des Felds angegeben sind (siehe Handbuch 4D Designmodus). Wechseln Sie vom externen Speichern zum internen Speichern, wird die externe Datei nicht gelöscht. |
Wurde dieser Befehl einmal ausgeführt, behält 4D den Link zwischen dem Datenfeld des Datensatzes und der Datei auf der Festplatte automatisch bei. Sie müssen den Befehl nicht erneut ausführen - außer, der Pfad ändert sich. Kann 4D nicht mehr auf die Daten im Feld zugreifen (Speicherdatei wurde umbenannt oder gelöscht, Pfad wurde gelöscht, o.ä.), is das Feld leer, es wird jedoch kein Fehler generiert.
Hinweis: SET EXTERNAL DATA PATH lässt sich nur auf einem lokalen 4D oder 4D Server ausführen. Bei Ausführung auf einem remote 4D wird der Befehl ignoriert.
Den Inhalt eines Bildfeldes außerhalb der Datendatei, in Ordner neben der Strukutrdatei speichern:
CREATE RECORD([Photos])
[Photos]Name:="Paris.png"
SET EXTERNAL DATA PATH([Photos]Thumbnail;Get 4D folder(Database folder)+"custom"+Folder separator+[Photos]Name)
SAVE RECORD([Photos])