En complément des manipulations expliquées dans la vidéo, il faut noter que :
Au début, on se pose toujours les questions suivantes :
À quoi peut me servir un Blob et dans quelles circonstances ?
Mettre des "informations" dedans c'est facile, mais comment et surtout dans quel ordre les ressortir ?
Répondons d’abord à la deuxième question :
Bien qu’on puisse accéder à n’importe quel octet du Blob, dans la plupart des traitements vous ferez du FIFO (First In First Out) c’est-à-dire que vous récupérerez le contenu du Blob dans l’ordre dans lequel vous l’avez rangé. Pour faire un parallèle simple, prenez une étagère dans laquelle vous rangez des livres de gauche à droite. Vous commencez par ranger un petit livre à gauche puis un gros livre collé au premier puis encore un gros livre puis une photo puis un bibelot rapporté de vacances, etc. Lorsqu’il faut faire les poussières sur cette étagère, vous ne vous posez pas la question de savoir à combien de centimètres du bord gauche est rangé tel ou tel livre. Vous les prenez dans l’ordre et vous décalez votre regard et vos mains au fur et à mesure, en fonction de la taille du dernier objet enlevé.
Dans un Blob, c’est pareil.
Notamment parce que vous savez ce que vous rangez dans le Blob.
Si vous rangez :
un entier c’est 2 octets
un entier long, ce sera 4
une date 6 octets
...
Pour un texte, vous indiquerez la manière dont vous voulez qu’il soit rangé et comment est indiquée la longueur du texte (chaîne C, chaîne Pascal, etc.).
À la relecture, vous reprendrez les informations dans le même ordre et les rangerez dans des variables adaptées au contenu attendu (typées correctement).
Donc la lecture du Blob se fera de manière cohérente. Voici maintenant la réponse à la première question (à quoi peut servir un Blob ?). Vous pouvez les utiliser par exemple dans les cas suivants :
stockage de variables, liste hiérarchiques, tableaux
échange de documents entre le client et le serveur
protection de certaines données confidentielles dans un blob crypté
enregistrement des variables contenant des plugins
envoi d’images, textes ou documents vers un navigateur web
communication avec un web service
La commande VARIABLE VERS BLOB stocke les données dans un format interne 4D, c’est la raison pour laquelle l’espace requis est légèrement supérieur au volume brut de données. L’avantage de cette commande est qu’elle vous évite de gérer le Byte Swapping (position de l’octet de poids fort) en cas de travail multi plate-forme.
Lorsque vous remplissez un Blob, vous pouvez utiliser le caractère * à la place de la variable $PositionDansBlob que nous avons utilisée.
4D comprend avec ce paramètre qu’il doit stocker la variable à la fin du Blob et l’agrandir en conséquence.
Imaginons maintenant que dans votre base de données, vous ayez un certain nombre de paramètres dont il faut tenir compte pour chaque utilisateur (ou chaque site d’installation de votre application) :
l’écran de démarrage
la couleur des fonds d’écran
la police et la taille des caractères
... Il s’agit en fait des préférences utilisateurs.
Pour les conserver, il existe plusieurs solutions (créer une table, un fichier texte, un fichier XML, etc.).
Dans notre cas, nous pouvons conserver ces préférences dans un Blob, lui-même stocké dans un fichier sur le disque.
et la position à laquelle stocker la variable dans le blob
Il se trouve que cette variable PositionDansBlob sert à la fois d'entrée et de sortie, c'est-à-dire :
qu'elle indique avant le stockage de la variable à quel endroit on souhaite la stocker
et après que la commande ait été exécutée cette variable contient la position dans le blob juste après la variable de manière à pouvoir stocker les éléments suivants.
Une fois que les données ont été stockées dans le blob on peut faire tout une série de traitements puis ensuite extraire les données du BLOB en écrivant ceci on redéfinit le départ dans le blob à la positoin 0 on va extraire du blob la première variable qui a été entrée
puis la 2è et la 3è
et en général après avoir utilisé un blob, on l'efface en fixant sa taille à 0
Nous allons tracer cette méthode pour voir comment se remplit le blob et comment il restitue les variables.
A ce niveau-là, :
toutes les initialisations ont été faites.
le blob est vide
lorsqu'on est passé sur le 1ère ligne le blob contient un certain nombre d'octets
et au fur-et-à-mesure il se remplit.
Pour extraire les données du Blob
on repart de la position 0 dans le blob
puis on extrait la valeur entière
la date
et le texte qui avaient été stockés
et on vide le blob.
Ce petit exemple permet de comprendre l'entrée et la sortie des données dans un blob.
On pourrait envisager, à partir du tableau statistiques de stocker les résultats dans un blob de manière à les réutiliser ultérieurement. On peut donc :
créer un blouton Blob (normalement il faut aller le mettre dans le fichier XLIFF)
et dans ce bouton on va créer un blob
et transférer les 2 tableaux.
ultérieurement lorsqu'on voudra récupérer le contenu des tableaux il faudra le programmer de cette manière :
Initialisation d'un tableau
de l'autre
positionnement dans le blob
récupération des 2 tableaux à partir du blob.
A l'exécution :
nos tableaux contiennent bien chacun 7 élements,
le blob est vide
on charge le blob avec les informations provenant des tableaux
puis lorsqu'on veut récupérer ultérieurement le contenu du bob
on part de 2 tableaux vides
on se positionne au début du blob
puis on recharge les tableaux (les techniciens puis les interventions)