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 :

[Utilis. Avertis] Types de données et interface utilisateur intelligente: vos solutions ?


Sujet :

VBA Access

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 39
    Points : 80
    Points
    80
    Par défaut [Utilis. Avertis] Types de données et interface utilisateur intelligente: vos solutions ?
    Bonjour,
    Prenons un exemple conceptuel de création d'une application
    Cahier des charges:
    • Statistiques épidémiologiques
    • Fournisseur de donnés externe
    • Interface utilisateur de sélection de critères
    • ...

    Modélisation:
    • Données
      • id_Individu
      • id_individu.DateNaissance
      • id_individu.DateNaissance.type
      • ...
      • id_Affection
      • ...
    • ...

    Création de la BD:
    • créer les tables
    • créer les champs (des tables)
    • définir le type de champs
    • ...

    Création interface utilisateur, modules...
    • ...

    Test:
    (suivant le modèle: Données ->Intervention Utilisateur ->Traitement ->résultat
    • Exemple de problèmes Type de Données conceptuels:
      • Erreur: Id_Individu.DateNaissance.Type incompatible avec les données
      • Données: 00/00/1959
      • Infos auprès du fournisseur de données : "Certains pays ont des registres nationaux ne précisant pas le jour et même parfois le mois de naissance.
      • solution 1
        • si 00/00/yyyy mettre 01/01
        • Acceptable: Non
        • Raisons : perturbation de statistiques basées sur le mois de naissance
        • Exemple (non il ne s'agit pas d' horoscope) Corrélation entre les affections allergiques saisonnières et la date de naissance.
      • solution 2
        • Créer un champ YYYY, un champ MM et un champ DD
      • Conclusion:
        • Typer les données en situation réelle n'est pas aisé.

      .
    • Exemple de problèmes Type de Données et interface Utilisateur :
      • Erreur: incompatibilité de Type (de données)
      • But: Augmenter la productivité
      • Outils de développements: CREATION D'UNE INTERFACE "INTELLIGENTE"
      • solution 1
        • Agir sur l'événement avant mise à jour
        • Acceptable : non
        • Pourquoi : impossible de modifier un champ pendant la mise à jour.
      • solution 2
        • Agir sur l'événement après mise à jour
        • Accettable: non
        • Pourquoi : impossible de mettre à jour si erreur de type( de données)
      • Autres solutions
        • Formulaires indépendants
        • Tables temporaires
        • EN CONNAISSEZ VOUS D'AUTRES ?


    Question:

    Lorsque la source d'une [zone de saisie de texte] est liée à un champ dont le type n'est pas texte, quels sont les moyens d'automatiser la correction d'une saisie générant une erreur de type ?

    exemple:
    • contrôle.lbl= "cotez ce travail sur dix, entrez un chiffre de un à dix:"
    • source contrôle.Type = integer
    • données saisies = "huit" ou 80% ou 8/10 ...
    • Traitement automatisé : "huit"=>8 "80%"="8/10"=>8 Me.contrôle=8


    (PS:Je travaille sur access depuis 20 ans (inutile de me réinventer l'eau chaude), restez concis , merci)

    D'avance, merci de m'avoir lu jusqu'ici
    Alain.

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Euh ...
    et c'est quoi la problématique ?
    "Always look at the bright side of life." Monty Python.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 39
    Points : 80
    Points
    80
    Par défaut
    Bonjour,
    Une (re)présentation s'impose. (cfr http://www.developpez.net/forums/.../presentations/neurotransmetteur-bonjour/
    Je suis concepteur/développeur gestionnaire et utilisateur de ma propre application de ma propre entreprise depuis 20 ans.

    J'ai le meilleur outil d'analyse comportemental des "End-Users" face à l'application : mes yeux (car ce sont mes employés).

    J'ai subi UNE seule destruction totale de la db en 20 ans. Mais je n'ai perdu aucune donnée car j'ai une classe M.E.L.A à ma sauce : exporter toute Modification, Effacement, Ajoute dans un fichier texte (effacé à chaque sauvegarde réussie).

    Access m'a toujours pleinement satisfait SAUF sur un point: EVENEMENT AVANT MISE A JOUR D'UN CONTROLE.

    ET le but de ce post est de m'enquérir de vos éventuels "trucs et astuces".
    Pour illustrer le cadre de mon interrogation où même Microsoft s'y perd, je vous affiche une page de l'aide ACCESS et leur exemple qui provoque un beau plantage. Options de Verrouillage général et du formulaire réglés sur AUCUN.

    Illustration de cette ambiguïté et de la propre confusion de M.S. à ce sujet


    <<Extrait de l'aide VBA au sujet de OldValue>>

    La propriété OldValue contient la valeur non modifiée d'un contrôle dépendant et n'est accessible qu'en lecture seule dans tous les modes.

    Vous ne pouvez accéder à cette propriété qu'à partir d'une macro ou de Visual Basic.

    Vous pouvez affecter la valeur de la propriété OldValue à une variable en utilisant la syntaxe suivante :

    OriginalValue = Forms!Customers!AmountPaid.OldValue
    Microsoft Access utilise la propriété OldValue pour stocker la valeur d'origine d'un contrôle dépendant. Lorsque vous modifiez un contrôle dépendant sur un formulaire, les modifications ne sont enregistrées que lorsque vous passez à un autre enregistrement. La propriété OldValue contient la version non modifiée des données sous-jacentes.

    Vous pouvez créer votre propre fonction d'annulation en attribuant à un contrôle la valeur de la propriété OldValue. L'exemple suivant vous montre comment annuler les modifications dans un contrôle de type zone de texte sur un formulaire :

    Exemple
    L'exemple suivant vérifie que la modification apportée à la valeur d'origine d'un champ est égale ou inférieure à 10 pour cent. Si elle est supérieure à 10 pour cent, la valeur d'origine est restaurée au moyen de la propriété OldValue. Vous pouvez aussi appeler cette procédure à partir de l'événement BeforeUpdate du contrôle qui contient les données à valider.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Public Function Validate_Field()
     
        Dim curNewValue As Currency
        Dim curOriginalValue As Currency
        Dim curChange As Currency
        Dim strMsg As String
     
        curNewValue = Forms!Products!UnitPrice
        curOriginalValue = Forms!Products!UnitPrice.OldValue
        curChange = Abs(curNewValue - curOriginalValue)
     
        If curChange > (curOriginalValue * .1) Then
            strMsg = "Change is more than 10% of original unit price. " _ 
            & "Restoring original unit price."
            MsgBox strMsg, vbExclamation, "Invalid change."
            Forms!Products!UnitPrice = curOriginalValue
        End If
    End Function
    Eh bien, cet exemple est une fameuse ineptie et cause un message d'erreur du genre "impossible de modifier les données pendant la mise à jour" ou "Erreur 2115 La macro ou fonction attribuée à la propriété Avant MAJ ou Valide si pour ce champ empêche Microsoft Access d'enregistrer les données dans le champ."

    En réalité, malgré ce que M.S. prétend, ce n'est pas réellement un événement avant mise à jour mais plutôt un événement pendant mise à jour( et donc limité à cancel=True/False ).

    Merci de vos lumières et de préciser si vous avez trouvé un moyen ou non de modifier les données avant mise à jour.(Voici une formulation plus simple de ma question.)

    Alain

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonsoir à tous,

    Il n'y a pas d'ineptie dans le code proposé, tu oublies sûrement un mot important dans la phrase que tu soulignes
    Vous pouvez aussi appeler cette procédure à partir de l'événement BeforeUpdate du contrôle qui contient les données à valider.
    Ici, le code est appelé suite à la modification de la valeur donc lors de l'événement AfterUpdate.
    Lors de l'événement BeforeUpdate, il faut juste remplacer la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Forms!Products!UnitPrice=curOriginalValue
    par

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 39
    Points : 80
    Points
    80
    Par défaut To cancel or Not to cancel ...
    Bonjour,
    Tout d'abord merci pour cette réponse.

    La problématique du code étant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms!Products!UnitPrice = curOriginalValue
    qui ne peut être modifiée QU'APRES update.
    Vous pouvez aussi appeler cette procédure à partir de l'événement BeforeUpdate du contrôle qui contient les données à valider.
    devrait en réalité être:

    Vous pouvez seulement appeler cette procédure à partir des événements AfterUpdate et postérieus du contrôle qui contient les données à valider (et donc avant la sauvegarde de l'enregistrement)

    Il est cependant décevant de ne pouvoir utiliser que UNDO (ou cancel) sur un événement BeforeUpdate.

    Il reste les procédures "keydowm" et la surveillance du survol de la souris vers un autre contrôle pour agir avant que la procédure update ne "cancel pas toute notre créativité"

    Point positif à l'actif d' Access c'est une meilleur gestion des saisies : (Par exemple : les anciennes versions n'acceptaient pas la saisie de date sous forme "01-03-2012", provoquant un message d'erreur.) les versions >2000 transforment le "01-03-2012" en 01/03/2012 . Preuve qu'il y a quand même moyen d'agir avant la mise à jour.

    Alain

Discussions similaires

  1. Réponses: 13
    Dernier message: 20/03/2014, 11h07
  2. Type de données utilisateur - taille bizarre
    Par Philippe Robert dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/09/2010, 15h29
  3. Quel CMS pour un interface utilisateur d'une base de données
    Par Ytupid dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 10
    Dernier message: 28/01/2008, 21h10
  4. Convertir un type de donnée sous SQL Server
    Par Fleep dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/08/2003, 15h15
  5. interface utilisateur avec OpenGL
    Par demis20 dans le forum OpenGL
    Réponses: 6
    Dernier message: 03/10/2002, 12h27

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