Ceci est une ancienne révision du document !
Ajout de fichiers dans NSBase de type PDF, image…. NSBase peut gérer des fichiers dans sa base. Pour cela il faut créer une table contenant des champs de type image ou fichier
Créer ensuite un formulaire
Mettre dans la propriété datasource du formulaire, le nom de la table précédemment créée
1 Cas des images
Pour les images, on peut les afficher directement par le composant image. il faudra documenter la propriété fieldname de cette image en relation avec le champ image de la table. Le composant image gère l'importation des images directement dans la base (click).
On peut également le réaliser par code LUA, exemple sur le clic d'un bouton (code extrait de la base Contact.nsb):
function frmContacts:btnLoadImageActionOnClick() local ok,filename=nsbase.dialog.fileOpen('Open image','All files|*.*','','') if ok then self.dataset.edit() local img=nsbase.fileSystem.readFile(filename,'bin') self.dataset.setFieldname('Photo',img) end endOn remarque, que l'on sélection l'image par une boite de dialogue.
local ok,filename=nsbase.dialog.fileOpen('Open image','All files|*.*','','')Il faut mettre la table édition par
self.dataset.edit()
Lire le fichier image en format binaire dans une variable “img”
local img=nsbase.fileSystem.readFile(filename,'bin')
Affecter l'image dans le champ de la table
self.dataset.setFieldname('Photo',img)
Pour supprimer l'image de la base sans supprimer l'enregistrement complet:
function frmContacts:btnClearImageActionOnClick() self.dataset.edit() self.dataset.setFieldname('Photo','') end
2 Cas des fichiers PDF
NSBase n'affiche pas les PDF(autres que les rapports) dans l'application. On va les visualiser via le système d'exploitation par Acrobat Reader ou autre.
On procède pratiquement de la même manière que pour une image
function frmText:btnLoadPDFActionOnClick() local ok,filename=nsbase.dialog.fileOpen('Open PDF|*.pdf|All files|*.*','','') if ok then self.dataset.edit() local pdf=nsbase.fileSystem.readFile(filename,'bin') self.dataset.setFieldname('PDFFile',pdf) end end
Pour les afficher on utilisera une fonction système
function frmText:btnShowPDFActionOnClick() local pdf= self.dataset.setFieldname('PDFFile') local filename=os.getenv ('TEMP') .. '\\tmp.pdf' nsbase.fileSystem.writeFile(filename,pdf,'bin') nsbase.system.openDoc(filename) end
Extraction du fichier de la base
local pdf= self.dataset.setFieldname('PDFFile')
Récupération de la variable d'environnement contenant le chemin des fichiers temporaires, ect concaténation avec le nom du fichier PDF que l'on va créer
local filename=os.getenv ('TEMP') .. '\\tmp.pdf'
Ecriture du fichier sur le disque en format binaire
nsbase.fileSystem.writeFile(filename,pdf,'bin')
Soumission au système pour ouvrir le PDF
nsbase.system.openDoc(filename)
Bien sur il faudra supprimer le fichier temporaire ainsi créé.
Pour les autres type fichiers, il faudra adapter le code dans le même esprit.