IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Formulaire incapable d'atteindre un nouvel enregistrement au bout d'un certain temps d'utilisation [AC-365]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Chargé de projets SIG
    Inscrit en
    Février 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chargé de projets SIG
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2020
    Messages : 5
    Par défaut Formulaire incapable d'atteindre un nouvel enregistrement au bout d'un certain temps d'utilisation
    Bonjour à toutes et tous

    En premier lieu, j'espère avoir choisi le bon forum mais si ce n'est pas le cas, n'hésitez pas à me le signifier. Je dois dire aussi que je ne comprends pas d'où vient mon bug donc pas facile à catégoriser

    Je viens donc à vous pour un problème assez particulier. J’ai créé une base Access qui communique avec un serveur PostgreSQL pour alimenter des tables à distance (via ODBC). Aucune table stockée en local. J'ai déployé cette base à différents collègues pour qu'on puisse tous alimenter la base PostgreSQL. Sur le formulaire d'accueil, il y a un bouton au-clic avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DoCmd.OpenForm "ficheoperation", , , , acFormAdd
    DoCmd.GoToRecord , , acNewRec
    DoCmd.RunCommand acCmdSaveRecord
    Et ça fonctionne bien, ça ouvre le formulaire « ficheoperation », ça atteint un nouvel enregistrement et ça sauvegarde (ce qui a pour effet de créer un identifiant unique généré grâce à une séquence de la base postgreSQL). Puis les collègues renseignent les infos de l’opération et ferment la fenêtre. Cependant, chez certains collègues, au bout d’un moment ça va bugger de manière étrange. Petite mise en situation :

    Utilisateur A utilise la base, personne n’autre ne l’alimente à ce moment-là. Il crée 4 nouvelles opérations, qui s’enregistrent automatiquement dans la table distante avec les ID uniques 950, 951, 952, 953. Tout fonctionne bien.

    Dans la continuité, il veut créer une 5ème opération MAIS cette fois ça ne marche plus, le formulaire le renvoie à l’opération ayant l’ID 953 (soit la dernière opération qu’il a créé, au lieu de l’amener vers une nouvelle). Pourtant une ligne avec l’ID 954, sans aucune information, vient de se créer dans la base PostgreSQL.

    Il réessaye encore et encore, mais ça continue à le renvoyer systématiquement à l’enregistrement 953 et en parallèle ça crée autant de lignes vides dans la base (ID 955, 956, 957, etc.)

    Puis Utilisateur B lance aussi la base pour renseigner ses opérations. Il renseigne deux opérations, qui possèderont les ID 958 et 959. Tout fonctionne bien chez lui.

    Utilisateur A a beau fermer et relancer la base, il est toujours confronté à son bug, et celui-ci continue de le renvoyer à l’enregistrement 953 alors qu’il existe dans la table de nouveaux enregistrements créés par Utilisateur B. Le bug ne semble donc pas le renvoyer à la dernière ligne de la table, mais bien au dernier enregistrement qu’il a lui-même créé…

    Voilà pour la petite histoire. Je précise qu’il peut quand même forcer la création d’opérations en ouvrant sous Access la table distante « operations » et en ajoutant une nouvelle ligne manuellement. Sa base est donc capable de créer de nouveaux enregistrements, mais le formulaire « ficheoperation » ne semble plus vouloir atteindre un nouvel enregistrement et renvoie systématiquement à la dernière opération renseignée à partir de cette base. Ce bug intervient chez certains collègues mais pas chez tous, et ne semble pas avoir de lien avec une version d’Access ou de Windows. J’ai tenté des mises à jour mais ça ne change rien.

    Voilà je me doute que l’exposition de mon problème est assez déroutante mais ce bug me laisse vraiment sans armes, je ne comprends absolument pas ce qu’il peut bien se passer. Le fait que ça fonctionne très bien pendant un certain temps PUIS que ça ne veuille plus fonctionner, le fait qu’en parallèle, les autres personnes n’ont aucun problème à ajouter des opérations (le souci ne viendrait donc pas de postgreQSL), le fait que des lignes vides se créent (comme si le formulaire parvenait à atteindre un nouvel enregistrement avant d’être renvoyé au précédent), etc…

    Est-ce que ce problème parle à quelqu’un ? Une idée d’où peut venir le soucis ?

    Merci d’avance

    Alban

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 625
    Billets dans le blog
    67
    Par défaut
    Bonjour,

    Et ça fonctionne bien, ça ouvre le formulaire « ficheoperation », ça atteint un nouvel enregistrement et ça sauvegarde (ce qui a pour effet de créer un identifiant unique généré grâce à une séquence de la base postgreSQL)
    Je ne connais pas postgreSQL, mais il s'agit bien d'une colonne auto-incrément dans cette base de données ?

    Car, habituellement dans Access pour générer un nouveau numéro-auto, on doit commencer à saisir quelque chose.

    Je suis un peu étonné que ces 2 commandes fonctionnent pour générer un nouveau numéro étant donné que rien n'a été encore saisi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DoCmd.GoToRecord , , acNewRec
    DoCmd.RunCommand acCmdSaveRecord
    Ce qui me gène un peu aussi c'est que normalement ces commandes devrait être appelées depuis le formulaire "ficheoperation" pour être sûr qu'elles s'appliquent à ce formulaire actif.

    Attention aussi à la génération de numéro-auto en mode multi-utilisateurs.
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Membre à l'essai
    Homme Profil pro
    Chargé de projets SIG
    Inscrit en
    Février 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chargé de projets SIG
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2020
    Messages : 5
    Par défaut
    Merci pour ce premier retour.

    Alors effectivement, il s'agit d'un auto incrément qui est donc géré directement par la base Postgres. C'est une règle au même titre que les valeurs non nulles, etc. Je passe par ce système car j'avais déjà remarqué qu'Access ne gère pas l'auto incrément sur des tables distantes Postgres, je ne sais plus pourquoi mais ça ne fonctionnait pas.

    Pourrait-il y avoir conflit entre les règles d'auto incrément de Postgres et la notion de "NewRec" du code VBA ?

    Concernant le positionnement de ce bout de code, je ne savais pas qu'il était conseillé de le mettre dans le formulaire cible. Je l'ai placé dans le formulaire de départ car "ficheoperation" est à la fois utilisé pour ajouter une opé (en passant par ce bouton donc) mais aussi pour consulter les opé précédemment saisies (via d'autres boutons). Je pensais donc que la façon la plus simple de gérer cette situation était d'établir depuis le formulaire de départ quel type d'affichage on voulait (entre ajout et consultation)

    Alban

  4. #4
    Membre à l'essai
    Homme Profil pro
    Chargé de projets SIG
    Inscrit en
    Février 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chargé de projets SIG
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2020
    Messages : 5
    Par défaut
    Pourrait-il s'agir d'un problème de dialogue entre Access et Postgres ? Actuellement je me penche sur le paramétrage ODBC ( https://odbc.postgresql.org/docs/config.html ) mais je ne maitrise pas et je ne sais pas si ça pourrait expliquer le problème auquel je suis confronté. Ce qui me fait aller vers cette idée c'est que la base fonctionne correctement pendant un certain temps puis bug ensuite, et donc j'ai du mal à me dire que le problème vient de VBA finalement

    Je ne suis peut-être pas dans le bon forum tout compte fait

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 849
    Par défaut
    Bonjour,

    Je pense que les données du formulaire (ou sous-formulaire) ne sont pas mises à jour après tes instructions. Nonobstant le fait que la base PostGres a bien enregistré la création de l'enregistrement.
    Je pense qu'il faut mettre à jour le formulaire avant la saisie.

    Cordialement.

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 625
    Billets dans le blog
    67
    Par défaut
    Bonjour,

    Oui, au niveau Access, j'ajouterais une information bidon puis je forcerais la création de l'enregistrement avec la méthode refresh , tout cela juste après l'ouverture du formulaire.

    Si par exemple dans votre formulaire "ficheoperation" vous avez un champ "NomOperation", je ferais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DoCmd.Close acForm, "ficheoperation" ' on s'assure que le formulaire est bien fermé avant de l'ouvrir
    DoCmd.OpenForm "ficheoperation", , , , acFormAdd
    Forms!ficheoperation!NomOperation = "" ' saisie d'une donnée bidon dans le champ NomOperation 
    Forms!ficheoperation.Refresh ' rafraîchit le formulaire et donc créé l'enregistrement
    Il faut bien s'assurer aussi que le formulaire "ficheoperation" est bien fermé avant de l'ouvrir, sinon il va rester sur le même enregistrement.
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/08/2014, 07h42
  2. Réponses: 2
    Dernier message: 12/12/2012, 23h42
  3. [AC-2007] Sous-formulaire basé sur plusieurs tables: nouvel enregistrement.
    Par ambroisine dans le forum IHM
    Réponses: 1
    Dernier message: 26/05/2010, 01h02
  4. Réponses: 19
    Dernier message: 09/04/2008, 18h05
  5. Réponses: 8
    Dernier message: 29/08/2006, 09h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo