[Résolu][Base] sql alternatif dans listbox existant/nouveau

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur: Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !

[Résolu][Base] sql alternatif dans listbox existant/nouveau

Messagepar martinbrait » 19 Mai 2018 15:42

Bonjour,

Je souhaite irriguer la listbox d'un formulaire référençant une table table personnel promouvable t_h_per>promov_prv
qui hérite de la table état civil du personnel t_e_personnel_per.
Le champ clef primaire partagé entre les deux tables est "kt_matric_per"

Ma listbox devrait contenir deux instructions sql différentes,
selon que je me situe sur un enregistrement courant,
ou que je suis en ajout d'un nouvel enregistrement.

J'ai un héritage, entre une table mère : état civil du personnel t_e_personnel_per,
et une table fille : personnel promouvable : t_h_per>promov_prv
Le matricule que je trouve dans ma table personnel promouvable t_h_per>promov_prv,
est une clef primaire unique, en provenance de la table mère état civil du personnel t_e_personnel_per.

Comment implémenter ça très concrètement sur mon formulaire ? :oops:

Par macro, probablement, mais je n'ai pas les idées très affutées,
pour manipuler l'irrigation de mes listbox..
L'idée est qu'à chaque nouvel enregistrement d'un matricule dans t_h_per>promov_prv, héritant
du même matricule dans t_e_personnel_per je propose uniquement un matricule
pas encore présent dans t_h_per>promov_prv.

Code : Tout sélectionner   AgrandirRéduire
deux irrigations pour la liste de choix :
si ajout d'un nouvel enregistrement, dans t_h_per>promov_prv
alors :
sql liste de choix ->

SELECT "t_nomfam" || ' ' || "t_prnomfam" || ' [' || "kt_matric_per" || ']', "kt_matric_per" FROM "t_e_personnel_per"
where "kt_matric_per" not in
(
SELECT "kt_matric_per" FROM "t_h_per>promov_prv"
)


si sélection d'un enregistrement, dans t_h_per>promov_prv,
alors :
sql liste de choix ->

SELECT "t_nomfam" || ' ' || "t_prnomfam" || ' [' || "kt_matric_per" || ']', "kt_matric_per" FROM "t_e_personnel_per"



Dans la base jointe ci-dessous, il me semble être parvenu à mes fins,
notamment grâce à des éléments codés par Piaf.
Qu'en pensez-vous ?

Code : Tout sélectionner   AgrandirRéduire
'à déclencher sur l'événement Après le changement d'enregistrement du formulaire.
Sub NouvelEnregistrement
    Dim oForm as Object,lstmatric_per As Object
    Dim strSQL As String
       oForm = thisComponent.Drawpage.Forms(0)
       lstmatric_per = oForm.getByName("txtkt_matric_per")
       if oForm.IsNew = true Then
        Print "ma listbox kt_matric_per propose uniquement les matricules inconnus de t_h_per>promov_prv (enregistrement nouveau)"
    strSQL = _   
   "SELECT ""t_nomfam"" || ' ' || ""t_prnomfam"" || ' [' || ""kt_matric_per"" || ']', ""kt_matric_per"" FROM ""t_e_personnel_per"" " & _
   " where ""kt_matric_per"" not in " & _
   "( " & _
   " SELECT ""kt_matric_per"" FROM ""t_h_per>promov_prv"" " & _
   ")"
   lstmatric_per.ListSource = Array(strSQL)
   lstmatric_per.Refresh     

       Else
        Print "Ma listbox kt_matric_per propose tous les matricules (enregistrement existant)"
       
    strSQL = _         
"SELECT ""t_nomfam"" || ' ' || ""t_prnomfam"" || ' [' || ""kt_matric_per"" || ']', ""kt_matric_per"" FROM ""t_e_personnel_per"""
   lstmatric_per.ListSource = Array(strSQL)
   lstmatric_per.Refresh 
   
'je récupère l'enregistrement actuellement stocké dans la table t_h_per>promov_prv
    strSQL = _         
"SELECT ""t_nomfam"" || ' ' || ""t_prnomfam"" || ' [' || ""kt_matric_per"" || ']', ""kt_matric_per"" FROM ""t_e_personnel_per"" " & _
"where ""kt_matric_per"" like  '" & lstmatric_per.currentValue & "' " & _
"UNION "  & _
   "SELECT ""t_nomfam"" || ' ' || ""t_prnomfam"" || ' [' || ""kt_matric_per"" || ']', ""kt_matric_per"" FROM ""t_e_personnel_per"" " & _
   " where ""kt_matric_per"" not in " & _
   "( " & _
   " SELECT ""kt_matric_per"" FROM ""t_h_per>promov_prv"" " & _
   ")"
   lstmatric_per.ListSource = Array(strSQL)
   lstmatric_per.Refresh     

'xray oForm.getByName("txtkt_matric_per")
'strRecupValeur  = oForm.getByName("txtkt_matric_per").currentValue
'Print strRecupValeur       'vérification accès valeur
       End If
End Sub




Merci et à bientôt !
Pièces jointes
heritage_test.odb
(14.01 Kio) Téléchargé 3 fois
LibreOffice version 5.1.6.2
Windows 10
+
LibreOffice version 4.3.6.2.0
Windows 7

#HSQL Database Engine 1.8.0
version=1.8.0


Bonjour, merci et à bientôt !
Avatar de l’utilisateur
martinbrait
PassiOOnné
PassiOOnné
 
Message(s) : 729
Inscrit le : 09 Avr 2013 08:15
Localisation : T'as pas dit bonjour, merci et à bientot !

Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 6 invité(s)