[Résolu][Base] Absence d'actualisation formulaire form.reload
Publié : 04 août 2022 14:47
Bonjour,
Solution proposée pour contourner une absence de mise à jour d'un formulaire et son contrôle table dont la source est une requête.
Base de données MySQL avec LO Base comme interface utilisateur.
J'ai un formulaire comprenant :
Mais la demande étant plus complexe, j'ai dû créer 2 requêtes successives enregistrées avec les autres requêtes de Base. La première est actualisée à la volée par la macro, la 2e (source du formulaire) est basée sur la première. A partir de ce moment-là, la commande .reload ne met plus à jour le contrôle table (alors que les requêtes sont bien mises à jour) sans que je comprenne pourquoi.
Solution (qui est un contournement) :
dans le code, j'ai fait 2 étapes où je change chaque fois la source du formulaire plutôt que seulement mettre à jour les requêtes SQL. Le fait de changer la source du formulaire semble « obliger » à une actualisation et ça marche.
Extrait de code ci-dessous.
Ceci à toutes fins utiles si d'autres sont confrontés à ce blocage.
Et je suis bien-sûr très intéressé par les remarques qui permettrait de comprendre et d'avoir une actualisation sans cet artifice (seulement la 2e étape du code).
Solution proposée pour contourner une absence de mise à jour d'un formulaire et son contrôle table dont la source est une requête.
Base de données MySQL avec LO Base comme interface utilisateur.
J'ai un formulaire comprenant :
- Une liste déroulante dans laquelle l'utilisateur choisit un item
- un contrôle table dont le contenu est lié à la source du formulaire, en l’occurrence une requête SQL. Elle est mise à jour selon le choix fait dans la liste déroulante grâce à une macro qui modifie la requête SQL selon le choix dans la première liste et utilise l'instruction .reload pour actualiser le formulaire et le contrôle table. Classique ! Cf copies écran ci-dessous.
Mais la demande étant plus complexe, j'ai dû créer 2 requêtes successives enregistrées avec les autres requêtes de Base. La première est actualisée à la volée par la macro, la 2e (source du formulaire) est basée sur la première. A partir de ce moment-là, la commande .reload ne met plus à jour le contrôle table (alors que les requêtes sont bien mises à jour) sans que je comprenne pourquoi.
Solution (qui est un contournement) :
dans le code, j'ai fait 2 étapes où je change chaque fois la source du formulaire plutôt que seulement mettre à jour les requêtes SQL. Le fait de changer la source du formulaire semble « obliger » à une actualisation et ça marche.
Extrait de code ci-dessous.
Code : Tout sélectionner
'****1ere étape : on donne une nouvelle source au formulaire (qui n'affichera rien). Passage obligatoire pour que le formulaire prenne en compte la phase suivante.
StrSql = "SELECT `Herbier micromycètes`.`CodEspM`, `Herbier micromycètes`.`Stade`, `Herbier micromycètes`.`Etat`, `Herbier micromycètes`.`N°Her` `Herbier`, `Espèces`.`NomEsp` `Hôte`, `Espèces`.`NomSsp` `Ssp Hôte`, `Genres`.`NomGen` `Genre hôte`, `Herbier micromycètes`.`Date`, `Stations`.`Lieudit`, `Communes`.`NomCom` FROM `botamyco`.`Espèces` `Espèces`, `botamyco`.`Herbier micromycètes` `Herbier micromycètes`, `botamyco`.`Communes` `Communes`, `botamyco`.`Stations` `Stations`, `botamyco`.`Espèces micromycètes` `Espèces micromycètes`, `botamyco`.`Genres` `Genres` WHERE `Espèces`.`CodHot` = `Herbier micromycètes`.`HotEsp` AND `Communes`.`CodCom` = `Stations`.`CodCom` AND `Stations`.`CodSta` = `Herbier micromycètes`.`CodSta` AND `Espèces micromycètes`.`CodEspM` = `Herbier micromycètes`.`CodEspM` AND `Genres`.`CodGen` = `Espèces`.`CodGen` AND `Herbier micromycètes`.`CodEspM` = 0"
vForm1.command = StrSql 'attribution de la requête SQL
vForm1.reload 'rechargement du formulaire
'*****2e étape : on revient aux requêtes source qui nous intéressent.
'1ere requête pour agréger différentes valeur avec une requête UNION
StrSql = "SELECT `CodEspM` FROM `botamyco`.`Espèces micromycètes` `Espèces micromycètes` WHERE `CodEspM` = " & ctlval & " UNION DISTINCT SELECT `CodValM` FROM `botamyco`.`Espèces micromycètes` `Espèces micromycètes` WHERE `CodEspM` = " & ctlval & " UNION DISTINCT SELECT `Espèces micromycètes_1`.`CodEspM` FROM { oj `botamyco`.`Espèces micromycètes` `Espèces micromycètes_1` LEFT OUTER JOIN `botamyco`.`Espèces micromycètes` `Espèces micromycètes` ON `Espèces micromycètes_1`.`CodValM` = `Espèces micromycètes`.`CodEspM` } WHERE `Espèces micromycètes`.`CodEspM` = " & ctlval
'Mise à jour de la requête enregistrée spécifiquement pour cette instruction à partir de la formule SQL ci-dessus
oConnexion.queries.getByName("Rqtunionrechµm").Command = StrSql
'Prise en compte d'une 2e requête « ResultrechµM » qui dépend de la 1ere que l'on récupère par une phrase SQL simple :
StrSql = "SELECT * FROM `ResultrechµM`"
vForm1.command = StrSql 'attribution de la 2e requête SQL au formulaire
vForm1.reload 'rechargement du formulaireEt je suis bien-sûr très intéressé par les remarques qui permettrait de comprendre et d'avoir une actualisation sans cet artifice (seulement la 2e étape du code).