@RobertG,
Yes, I work with Macros. On the other hand, many macros are used in this form, but not directly linked to this drop-down list.
The form concerned is not linked to any events. Concerning the data, there is a sort performed for the field of a table. A subform contains the control table containing this drop-down list. No event is linked to the subform, the content type for this subform is a request, the following:
SELECT "JTActeursFS".* FROM "JTActeursFS" WHERE "jIDRole" = COALESCE ( ( SELECT "RoleID" FROM "TFiltre" WHERE "ID" = 1 ), "jIDRole" ) ORDER BY ( SELECT REPLACE( "TitreAnglais1", ' ', '.' ) FROM "TFilmsSeries" WHERE "FilmSerieID" = "JTActeursFS"."jIDFilmSerie" ) --
//
// Requête [sfm-SelectionFS] dans le formulaire principal [frm-Acteurs].
//
// Elle sélectionne toutes les colonnes de [JTActeursFS] en fonction d'une condition dépendant d'une sous-requête
// dans [TFiltre]. Elle effectue un tri basé sur une valeur extraite de [TFilmsSeries], avec remplacement des
// espaces par des points.
The control table of this subform has an event linked to the mouse button pressed, the following:
' Cette procédure permet d'ouvrir un enregistrement spécifique dans un sous-formulaire.
' Elle utilise des noms de contrôles, des objets de formulaires et des filtres pour afficher les détails pertinents.
' L'argument "oEvent" est utilisé pour capturer les actions de l'utilisateur, en l'occurrence un double-clic.
Sub OpenRecordID(oEvent As Object)
Dim iID As Integer
Dim oColumnID As Object, oControl As Object, oDoc As Object, oForm1 As Object, oForm2 As Object, oSubForm As Object
Dim sCtrlTableName As String, sMainFormName As String, sObjName As String, sFilter As String
If oEvent.ClickCount <> 2 Then Exit Sub ' S'il n'y a pas eu de double-clic, on quitte la procédure.
sCtrlTableName = oEvent.Source.Model.Name ' Nom de la table de contrôle du sous-formulaire.
' Nom du formulaire.
If sCtrlTableName = gcCntrVue Then
sMainFormName = oEvent.Source.Model.Parent.Name
Else
sMainFormName = oEvent.Source.Model.Parent.Parent.Name
End If
oForm1 = ThisComponent.Drawpage.Forms.getByName( sMainFormName ) ' Récupère le formulaire principal.
' Détermine le sous-formulaire et l'objet à utiliser en fonction du nom de la table.
Select Case sCtrlTableName
Case gcCntrActeurs
oSubForm = oForm1.getByName( gcSFrmActeurs ) ' Accède au sous-formulaire [cntr-sfrmActeurs].
oControl = oSubForm.getByName( sCtrlTableName ) ' Accède à la table de contrôle du sfrm [cntr-SelectionActeurs].
oColumnID = oControl.getByName( gcColActeurID ) ' Accède à la colonne cachée "ActeurID" de la table de contrôle.
sObjName = "Acteurs"
Case gcCntrActrices
oSubForm = oForm1.getByName( gcSFrmActrices ) ' Accède au sous-formulaire [cntr-Actrices].
oControl = oSubForm.getByName( sCtrlTableName ) ' Accède à la table de contrôle du sfrm [cntr-SelectionActrices].
oColumnID = oControl.getByName( gcColActriceID )' Accède à la colonne cachée "ActriceID" de la table de contrôle.
sObjName = "Actrices"
Case gcCntrFS
oSubForm = oForm1.getByName( gcSFrmFS ) ' Accède au sous-formulaire [cntr-SelectionFS].
oControl = oSubForm.getByName( sCtrlTableName ) ' Accède à la table de contrôle du sfrm [cntr-SelectionFS].
oColumnID = oControl.getByName( "FilmID" ) ' Accède à la colonne cachée "fILMID" de la table de contrôle.
sObjName = "FilmsSeries"
Case gcCntrVue
oControl = oForm1.getByName( sCtrlTableName ) ' Accède à la table de contrôle du sfrm [cntr-SelectionFS].
oColumnID = oControl.getByName( "FilmSerieID" ) ' Accède à la colonne cachée "FilmID" de la table de contrôle.
sObjName = "FilmsSeries"
End Select
iID = oColumnID.getCurrentValue() ' ID de l'enregistrement à ouvrir.
ThisDataBaseDocument.CurrentController.Connect() ' Se connecte à la DB, par précaution.
ThisDatabaseDocument.CurrentController.loadComponent(2, sObjName, FALSE) ' Const 2 pour charger les formulaires.
' Détermine quelles actions prendre en fonction du nom de la table de contrôle
oDoc = ThisDatabaseDocument.FormDocuments.getbyname( sObjName )
Select Case sCtrlTableName
Case gcCntrActeurs
oForm2 = oDoc.getComponent().getDrawPage().getForms().getByName( gcFrmActeurs )
sFilter = "( ActeurID = " & iID & " )"
Case gcCntrActrices
oForm2 = oDoc.getComponent().getDrawPage().getForms().getByName( gcFrmActrices )
sFilter = "( ActriceID = " & iID & " )"
Case gcCntrFS, gcCntrVue
oForm2 = oDoc.getComponent().getDrawPage().getForms().getByName( gcFrmFS )
sFilter = "( FilmSerieID = " & iID & " )"
End Select
Wait 100 ' Cela donne le temps d'accéder à l'enregistrement demandé.
oForm2.Filter = sFilter ' Applique le filtre pour afficher l'enregistrement correspondant à l'ID.
oForm2.Reload() ' Recharge le formulaire pour obtenir l'enregistrement spécifié.
oForm2.Filter = "" ' Réinitialise le filtre.
End Sub
The control table column showing only two rows rather than several has no associated events, but there is a query, the following:
SELECT "TitreAnglais1", "FilmSerieID" FROM "TFilmsSeries" ORDER BY 1 --
//
// Requête pour la colonne ou liste de contrôle [cntr-SelectionFS] du [srm-SelectionFS]
// des formulaires principaux [frm-Acteurs] et [frm-Actrices]. Elle extrait deux colonnes de [TFilmsSeries]
// et les affiche dans l'ordre croissant en utilisant [TitreAnglais1].
The information I have just given is linked to the first ‘frm-Acteurs’ form of the main ‘Acteurs’ form. There is a second form linked to the main form named ‘frm-Filtre’ which is used to filter the second column named ‘Role’ of the said control table. This is a sorting query performed according to the selection of a role. The request is :
SELECT "Role", "RoleID" FROM "TRoles" UNION ALL SELECT '< Tous >', NULL FROM "TFiltre" WHERE ID = 1 ORDER BY 1 --
//
// Requête pour la liste déroulante [lst-FiltreRoles] présente dans tous les formulaires.
// Elle récupère des données de deux sources [TRoles] et [TFiltre]. Elle les fusionne en une seule liste triée
// par ordre croissant selon la colonne [Role]. Cette liste affiche les rôles avec l'option "< Tous >" en haut.
This is the details I can give you for now regarding the macros and filters used.