[Base] Données dans une table et pas dans une autre

Venez découvrir tous les tutoriels, modèles et autres foires aux questions afin de maîtriser rapidement votre suite bureautique favorite.

Modérateur : Vilains modOOs

Règles du forum
Aucune question dans cette section !
Cette section est faite pour présenter les tutoriels. Si vous avez une question sur l'installation, le fonctionnement ou l'utilisation, vous devez poster dans la section du module où se produit le problème.

Ce tutoriel vous a-t-il aidé ou répondu à votre problème ?

Oui
8
80%
Non
0
Aucun vote
En partie
2
20%
 
Nombre total de votes : 10

Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

[Base] Données dans une table et pas dans une autre

Message par Piaf »

L'opérateur EXCEPT permet d'afficher les valeurs d'un ou de plusieurs champs présentes dans une table et absentes d'une autre.
À l'inverse, l'opérateur INTERSECT permet d'afficher les valeurs communes aux deux tables.

Par exemple pour les tables 1 et 2 :
Table1 Table2
Table1 Table2
L'instruction SQL (SQL direct)

Code : Tout sélectionner

SELECT "NomArticle", "PU" FROM "Table1"
EXCEPT
SELECT "NomArticle", "PU" FROM "Table2"
Affichera :
Except
Except
Except.png (11.42 Kio) Consulté 3470 fois
Au contraire, l'instruction SQL :

Code : Tout sélectionner

SELECT "NomArticle", "PU" FROM "Table1"
INTERSECT
SELECT "NomArticle", "PU" FROM "Table2"
Affichera :
Intersect
Intersect
Intersect.png (9.62 Kio) Consulté 3470 fois
Il n'est pas nécessaire que le nom des tables ou des champs d'une table à l'autre soit le même, ni que la structure des tables soit la même.
Chaque SELECT est une instruction SELECT à part entière et permet donc d'utiliser plusieurs tables ; les liaisons ; les opérateurs ; les clauses WHERE, etc.

Un exemple d'utilisation :

Le but est, dans une liste de choix, de ne proposer à l'utilisateur que les articles ne figurant pas déjà dans la facture en cours.

Les tables de la base exemple.
Les Tables
Les Tables
Le formulaire de saisies des factures.
Factures.png
Utilisation :
  • Renseigner les données de la facture, la date par défaut est la date courante.
  • Sélectionner l'article à ajouter à la facture, la sélection se fait soit par nom d'article soit par référence (code) d'article.
  • Cliquer sur le bouton Ajouter un article, l'article est ajouté dans le détail de la facture.
  • Renseigner la quantité, la valeur par défaut est 1.
  • Pour continuer à remplir le sous-formulaire, cliquer sur le bouton Article suivant.
  • Une fois les article ajoutés, cliquer sur le bouton Afficher le total.
Le code sur l’évènement A la réception du focus des listes de sélection.

Code : Tout sélectionner

Sub FiltreArticles(oEv as Object)
Dim oForm as Object
Dim strSQL as String
	oForm = oEv.Source.Model.Parent
	Select Case oEv.Source.Model.Name
		Case "lstIdArticle"
			strSQL = "SELECT ""Article"", ""IdArticle"" FROM ""tArticles"" " & _
			" EXCEPT " & _
			"SELECT ""tArticles"".""Article"", ""tVendus"".""refArticle"" FROM ""tVendus"", ""tArticles""" & _
			"  WHERE ""tVendus"".""refArticle"" = ""tArticles"".""IdArticle"" AND ""refFacture"" = " & oForm.Columns.getByName("refFacture").Value
		Case "lstrefArticle" 
			strSQL = "SELECT ""Reference"", ""IdArticle"" FROM ""tArticles"" " & _
			" EXCEPT " & _
			"SELECT ""tArticles"".""Reference"", ""tVendus"".""refArticle"" FROM ""tVendus"", ""tArticles""" & _
			"  WHERE ""tVendus"".""refArticle"" = ""tArticles"".""IdArticle"" AND ""refFacture"" = " & oForm.Columns.getByName("refFacture").Value	
	End Select
	oEv.Source.Model.listSource = Array(strSQL)
	oEv.Source.Model.Refresh
End Sub
A+
Pièces jointes
Except.odb
La base exemple
(17.05 Kio) Téléchargé 373 fois
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Répondre