Gestion de fichiers,images, pdf dans NSBase

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
end

On 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 ansi créé.


Pour les autres type fichiers, il faudra adapter le code dans le même esprit.

 

Ma vidéothèque

Un nouvel exemple de base de données (Vidéothèque) créé avec NSBase, est en ligne. Cet exemple met en oeuvre les APIs de nsbase.internet et la gestion des erreurs.

Cette exemple permet de répertorier ses DVDs avec beaucoup d'informations. Il n'est pas complet, mais il servira de départ pour votre application.

Il permet de recherche des informations sur DVF.fr et de charger rapidement vos fiches, titre complet,année, acteurs, synopsis, téléchargement des images...

Il nécessite NSBase V.1.0.5 ou supérieure

 

 

LUA : Changer le style de la police de caractéres d'un label

Pour changer le style de la police de caractères d'un label :

  • Mettre gras
    • self.setProperty('Label1.font.style','[fsbold]')
  • Mettre en gras et italique
    • self.setProperty('Label1.font.style','[fsbold,fsItalic]')
  • Mettre en normal
    • self.setProperty('Label1.font.style','[]')

Vous trouverez l'ensemble des valeurs dans l'éditeur visuel des propriétés.