Bonjour
Un petit exemple à tester.
Les listes en cascades sont gérées par macros donc celles-ci doivent être activées.
Pour avoir des listes, tu dois d'abord avoir renseigné les données qui vont les alimenter.
fCategories.png
Ensuite il est possible de les utiliser pour sélectionner l'enregistrement voulu
fPannes.png
Code : Tout sélectionner
Option Explicit
Sub Change(oEv as Object)
Dim oForm as Object, ListeMarques as Object, ListeModeles as Object
Dim Identifiant as Integer, strSQL as String
oForm = oEv.Source.Model.Parent
ListeMarques = oForm.getByName("lstMarques")
ListeModeles = oForm.getByName("lstModeles")
Select Case oEv.Source.Model.Name
Case "lstCat"
Identifiant = RecupererIdentifiant("tCategories","IdCat","Categorie",oEv.Source.SelectedItem)
strSQL = "SELECT ""Marque"", ""IdMarque"" FROM ""tMarques"" WHERE ""refCat"" = " & Identifiant
listeMarques.ListSource = Array(strSQL)
ListeMarques.Refresh
Case "lstMarques"
Identifiant = RecupererIdentifiant("tMarques","IdMarque","Marque",oEv.Source.SelectedItem)
strSQL = "SELECT ""Modele"", ""IdModele"" FROM ""tModeles"" WHERE ""refMarque"" = " & Identifiant
ListeModeles.ListSource = Array(strSQL)
ListeModeles.Refresh
End Select
End Sub
Sub Afficher(oEv as Object)
Dim oForm as Object, rst as Object, EnregistrementEnCours as Object, ctrlPanne as Object, vueCtrl as Object
Dim Cherche as String, Trouve as Boolean
oForm = oEv.Source.Model.Parent
Cherche = oEv.Source.SelectedItem
rst = oForm.createResultSet()
rst.beforeFirst
Trouve = False
Do While rst.Next() And Trouve = False
EnregistrementEnCours = rst.columns.getByName("Modele")
If EnregistrementEnCours.String = Cherche Then
Trouve = True
Exit Do
End If
Loop
If Trouve = True Then
oForm.moveToBookmark(rst.Bookmark)
Else
MsgBox("Enregistrement non trouvé", 64, "DSMobile")
End If
oForm.getByName("sfmPannes").Reload
ctrlPanne = oForm.getByName("sfmPannes").getByName("txtPanne")
vueCtrl = thisComponent.CurrentController.getControl(ctrlPanne)
vueCtrl.setFocus
End Sub
Function RecupererIdentifiant(NomTable as String,NomChampId as String, nomChampCritere as String, Critere as Variant)
Dim maConnexion as Object, maRequete as Object,resuQuery as Object
Dim instrSQL as String
maConnexion = ThisDatabasedocument.CurrentController.ActiveConnection
instrSQL = "SELECT " & NomChampId & " FROM " & NomTable & " WHERE " & nomChampCritere & " = '" & Critere & "'"
maRequete = maConnexion.createStatement()
resuQuery = maRequete.executeQuery(instrSQL)
With resuQuery
.Next
RecupererIdentifiant = .Columns(0).Int
End With
End Function
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.