Les commandes de base de données non-ORDA vous permettaient de placer des images et des blobs en dehors du fichier de données grâce à la commande SET EXTERNAL DATA PATH. Cette commande n’est pas adaptée à ORDA et c’est pourquoi nous avons décidé d’ajouter une fonctionnalité similaire dans la v20 R3 : La possibilité d’assigner à un attribut de type blob ou image un chemin sur le disque. Laissez-moi vous en dire plus à ce sujet.
Tout d’abord, regardons ce bout de code :
$myRecord:=ds.MyTable.new()
$myRecord.image:="C:/FolderWithMyFiles/myImage"
$myRecord.binary:="C:/FolderWithMyFiles/myBinary"
$myRecord.save()
Les attributs image et binary sont respectivement un attribut image et un attribut blob. En leur attribuant un chemin au lieu d’une image ou d’un blob, 4D ne placera dans le fichier de données que le chemin fourni. Ce n’est que lorsque vous utiliserez l’image ou le blob que 4D chargera le fichier depuis le disque et créera une variable image ou blob appropriée. Pour vous, ce sera complètement transparent.
Avantages et précautions
Cette façon de faire présente quelques avantages :
– Vous ne stockez pas de fichiers binaires dans votre fichier de données. Par conséquent, votre fichier de données reste petit et rapide à maintenir.
– Vous pouvez utiliser le même fichier pour plusieurs enregistrements sans dupliquer le contenu du fichier.
– Vous pouvez organiser les fichiers comme vous le souhaitez et même les utiliser avec des logiciels autres que 4D.
Mais il y a aussi quelques précautions à prendre :
– Comme 4D a besoin du fichier sur le disque, vous devez vous assurer qu’il reste accessible chaque fois que 4D y accède.
– Lorsque vous attribuez un chemin à une image ou à un blob, vous contournez la propriété du champ « Stockage » dans la structure de la base de données (la propriété « Stockage » vous permet de choisir où stocker le contenu de l’image ou du blob entre le fichier de données ou un fichier de données externe).
Chemin POSIX ou 4D.File
Le premier morceau de code attribue un chemin POSIX à l’attribut (seuls les chemins POSIX sont acceptés). Une autre solution consiste à attribuer un fichier 4D.File comme dans cet exemple :
$file:=File("/PACKAGE/FolderWithMyFiles/myImage")
$myRecord:=ds.MyTable.new()
$myRecord.image:=$file
$myRecord.save()
Ce code attribue le chemin du fichier 4D.File à l’attribut.
Que se passe-t-il si vous modifiez le fichier sur le disque ?
Il s’agit là d’une question délicate. Comme 4D stocke le contenu des blobs et des images dans son cache, il se peut très bien qu’il ne se passe rien jusqu’à ce que vous fermiez et rouvriez votre application. Si vous voulez vraiment pouvoir modifier le fichier au moment de l’exécution, il y a une astuce que vous pouvez utiliser : Attribuez à nouveau le chemin à l’attribut. Comme 4D détectera une nouvelle valeur, il nettoiera son cache et vous obtiendrez le nouveau fichier la prochaine fois que vous utiliserez l’image ou le blob.
Remarque : si vous accédez à l’image ou au blob par l’intermédiaire d’un navigateur, par exemple avec Qodly ou l’explorateur de données, n’oubliez pas de vider également le cache du navigateur.
Utilisez le forum si vous avez des questions
Vous pouvez consulter la documentation pour apprendre à utiliser cette nouvelle fonctionnalité. Et si vous avez des questions ou des commentaires, n’hésitez pas à utiliser notre forum. Nous serons ravis de vous aider.