LUA : Les listes liées

Voici un petit tuto pour élaborer un fomulaire contenant 2 listes liées

  • Une première liste déroulante (cbxCat) contient la liste des catégories de produit
  • La deuxième liste déroulante (cbxProduit) contient la liste de produits de la catégorie sélectionnée dans la liste déroulante précédente

La première liste est chargée à partir d'une requête (faite avec l'assistant) au chargement du formulaire (ActionOnLoaded)

function Produit:ActionOnLoaded()
  self:loadComboboxFromTable("categories","categorie","cbxCat")
end

 

La deuxième liste est  chargée lorsque la sélection de la première liste change (ActionOnChange)
On récupére la catégorie sélectionnée dans la propriété "text" de la la liste déroulante "cbxCat"
On construit la requête en conséquence
Puis on charge la liste déroulante

function Produit:cbxCatActionOnChange()
  local dataset=nsbase.datasetCreate("SQLQuery")
  local cat=self.setProperty('cbxCat.text')
  dataset.sql="select distinct produit from produits where categorie='" .. cat .. .. "' order by 1"
  self.setProperty('cbxProduit.items',dataset.getItems('produit'))
end

 

Voici le code complet :

function Produit:ActionOnLoaded()
  self:loadComboboxFromTable("categories","categorie","cbxCat")
end
function Produit:loadComboboxFromTable(tableName,fieldName,combobox)
  local dataset=nsbase.datasetCreate("SQLQuery")
  dataset.sql='select distinct ' .. fieldName .. ' from ' .. tableName .. ' order by 1'
  self.setProperty(combobox .. '.items',dataset.getItems(fieldName))
end   
function Produit:cbxCatActionOnChange()
  local dataset=nsbase.datasetCreate("SQLQuery")
  local cat=self.setProperty('cbxCat.text')
  dataset.sql="select distinct produit from produits where categorie='" .. cat .. .. "' order by 1"
  self.setProperty('cbxProduit.items',dataset.getItems('produit'))
end

LUA : Les autolistes

Les autolistes sont des listes déroulantes qui utilisent les données de la table en cours sans utiliser d'autres tables.

C'est pratique pour des petites applications, car cela simplifie la réalisation de l'application, et rend plus conviviale l'application. Certes elles ne garantissent pas l'intégrité parfaite comme dans une base de  données classique, mais assure une certaine garantie pour limiter les fautes par non resaisie des données

Les "autolistes" sont utilisées dans l'exemple "factures" et plus particulièrement dans l'exemple "vidéothéque" où il n'y a qu'une seule table et plusieurs autolistes

Exemple dans la table "contact" , il existe un champ ville, nous n'allons pas utiliser de tables suplémentaires, mais exploiter les données saisies dans la table "contacts"

on crée tout d'abord une instance de l'objet "dataset" pour pouvoir manipuler les données de la base

local dataset=nsbase.datasetCreate("SQLQuery")

 

on sélectionne le champ "ville" dans la table "contacts" par une requête SQ, noter le mot clef "distinct" pour obtenir qu'une occurence de chaque ville

dataset.sql='select ville from contacts'

 

on récupère la liste des villes dans la variable items

local items=dataset.getItems('ville')

 

on assigne la propriété "items" de notre liste déroulante "cbxVille"

self.setProperty('cbxVille.items',items)       

 

Voici le code complet

local dataset=nsbase.datasetCreate("SQLQuery")
dataset.sql='select distinct ville from contacts'
local items=dataset.getItems('ville')
self.setProperty('cbxVille.items',items)

On peut appler ce code sur ActionOnLoaded et sur ActionOnAfterEdit....
 

LUA : Remplir une liste déroulante à partir de données contenues dans la base

Remplir une liste déroulante "ville" à partir de la table ville:

on crée tout d'abord une instance de l'objet "dataset" pour pouvoir manipuler les données de la base

local dataset=nsbase.datasetCreate("SQLQuery")

 

on sélectionne le champ ville dans la table ville par une requête SQL

dataset.sql='select ville from villes'

 

on récupère la liste des villes dans la variable items

local items=dataset.getItems('ville')

 

on assigne la propriété "items" de notre liste déroulante "cbxVille"

self.setProperty('cbxVille.items',items)       

 

Voici le code complet

local dataset=nsbase.datasetCreate("SQLQuery")
dataset.sql='select ville from villes'
local items=dataset.getItems('ville')
self.setProperty('cbxVille.items',items)      

On peut appler ce code sur ActionOnLoaded et sur ActionOnAfterEdit....