Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Membre du Club
    Homme Profil pro Alain
    Inscrit en
    janvier 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Nom : Homme Alain
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : janvier 2012
    Messages : 39
    Points : 59
    Points
    59

    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
    Membre Expert
    Homme Profil pro Michel
    Ingénieur développement logiciels
    Inscrit en
    mai 2005
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Nom : Homme Michel
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2005
    Messages : 1 705
    Points : 2 236
    Points
    2 236

    Par défaut

    Euh ...
    et c'est quoi la problématique ?
    "Allways, look at the bright side of life." Monty Python.

  3. #3
    Membre du Club
    Homme Profil pro Alain
    Inscrit en
    janvier 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Nom : Homme Alain
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : janvier 2012
    Messages : 39
    Points : 59
    Points
    59

    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 :
    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 Expert
    Homme Profil pro
    Inscrit en
    avril 2006
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2006
    Messages : 1 058
    Points : 1 268
    Points
    1 268

    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 :
     Forms!Products!UnitPrice=curOriginalValue
    par

  5. #5
    Membre du Club
    Homme Profil pro Alain
    Inscrit en
    janvier 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Nom : Homme Alain
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : janvier 2012
    Messages : 39
    Points : 59
    Points
    59

    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 :
    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •