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

Access Discussion :

Message d'erreur pour validation de données sous access 2003


Sujet :

Access

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Message d'erreur pour validation de données sous access 2003
    Bonjour,

    J'ai créé une base de données sous access controlant de la production audiovisuelle (voilà pour le contexte). Un de mes formulaire me pose problème. Ce formulaire concerne l'utilisation du matériel de l'entreprise. Ainsi, l'utilisateur rentre : quelle personne utilise quel matériel à quel moment de la journée et à quelle date. (permet par la suite d'obtenir des plannings)

    Ce que je voudrais mettre en place ce serait un procédé qui permettrait d'indiquer à la personne qui rentre les données sous la bdd qu'un meme matériel ne peut pas être utilisé par deux personnes en meme tps, le même jour etc... mais comment faire ???

    J'espere que c'est assez clair et que vous pourrez m'aider ! ça serait super!!
    Merci d'avance!

    Audrey

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Il te faut une fonction qui vérifie par le biais d'une requête qui associe Utilisateur/Matériel/Jour, retourne True ou False...
    Si c'est True, c'est que c'est déjà utilisé.
    Ce contrôle se fait sur l'événement BeforeUpdate et pour lequel tu passes Cancel à True si le matériel est déjà utilisé.

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci pour tes conseils, mais comme je te l'ai dit dans le mail que je t'ai envoyé...je n'y comprends rien du tout...c'est assez désolant d'ailleurs!

    pourrais tu m'expliquer la procédure à accomplir de manière plus explicite pour que la novice que je suis y parvienne ?

    Merci d'avance!

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Ah...
    Bon, tu construits une requête qui reprend les éléments à vérifier, par exemple, imaginons que l'utilisateur s'appelle DUPONT, que le matériel est un TRUC et que le jour souhaité est demain.

    Cela donne par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT COUNT TBLUtilisateurs .Utilisateur, TBLUtilisateurs.Materiel, _
    TBLUtilisateurs.Jour
    FROM TBLUtilisateurs 
    WHERE TBLUtilisateurs.Utilisateur = 'DUPONT' _
    AND TBLUtilisateurs.Materiel ='TRUC' _
    AND TBLUtilisateurs.Jour = #08/16/2006# ;
    Cette requête renvoie ou non un enregistrement. De là, on peut en conclure que s'il y a un enregistrement, c'est True sinon, c'est False, OK ???

    Eh bien il suffit de mettre en application via une fonction. Le problème, c'est que si tu n'a jamais développé en VBA Access, c'est pas gagné.

    Que faut-il faire alors ? Car donner des cours dans le forum n'est pas sa politique, il y a des tutoriels pour cela... Il est impératif que tu bidouilles ne serait-ce un peu le code VBA pour mettre en place ce que tu souhaites...

    Où en es-tu en VBA ?

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Alors pour la requête ok, j'ai pigé le truc !

    Pour le VBA, je "bidouille" un peu !
    Pour te donner un exemple je suis capable d'installer un bouton liste déroulante qui lorsque l'on clique sur l'un des éléments de la liste, renvoie à la page du formulaire correspondante... par exemple...

    enfin ça reste basique! mais si tu connais un tutoriel capable de m'expliquer comment faire, pas de problème je m'y plonge! c'est juste que là jusqu'à présent j'ai rien trouvé qui puisse m'aider...tu es un peu ma bouée de sauvetage lol !!

  6. #6
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Hummm, mouais, c'est un peu plus élévé comme niveau mais bon...
    Il te faut savoir utiliser DAO. je te laisse le soin de t'y plonger.

    Pour résumer, DAO est un objet auquel tu affectes un jeu d'enregistrements.
    Ensuite, tu peux manipuler cet objet pour ajouter, modifier ou supprimer des valeurs ou l'enregistrement entier...
    Pour le coté difficile, c'est les ptis trucs à savoir qui le concernent.

    Revenons au problème, voilà une fonction qui te revoie True ou False selon le cas précité:

    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
    19
    20
    21
    22
    23
    Public Function MaterielNonDisponible(ByRef Utilisateur As String, _
    ByVal Matériel As String, ByVal Jour As Date) As Boolean
    Dim SQL As String
    Dim oRS As dao.Recordset
     
      SQL = "SELECT COUNT TBLUtilisateurs.Utilisateur"
      SQL = SQL & vbCrLf & "FROM TBLUtilisateurs"
      SQL = SQL & vbCrLf & "WHERE TBLUtilisateurs.Utilisateur = " & Chr(34) & _
    Utilisateur  & Chr(34) & _
    " AND TBLUtilisateurs.Materiel = " & Chr(34) & Matériel & Chr(34) &  _
    " AND TBLUtilisateurs.Jour = #" & Format(Jour, "mm/dd/yyyy") & "# ;"
      Set oRS = CurrentDb.OpenRecordset(SQL, dbOpenDynaset)
      With oRS
        If Not .EOF Then
          Utilisateur = .Fields("Utilisateur")
          MaterielNonDisponible = True
        Else
          MaterielNonDisponible = False
        End If
        .Close
      End With
      Set oRS = Nothing
    End Function
    Bon, là, on utilise le Chr(34) car on cherche une chaîne. dans l'idéal, on doit utiliser le IDUtilisateur, le IDMateriel qui seraient numériques car rien n'empêche d'avoir deux DUPONT dans la table et deux matériels avec un libellé identique...
    Il faut que tu comprennes la philosophie de l'usage des chaînes de caractères en VBA pour une requête associé à l'usage des clés primaires dans les tables.

    Pour l'usage, tu procèdes ainsi dans ton formulaire (exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub cmbUtilisateurs_BeforeUpdate(Cancel As Integer)
    Dim strUtilisateur As String
     
        If MaterielNonDisponible(strUtilisateur, Me!Materiel, Me!Jour) = True Then
          MsgBox "Ce matériel ne peut pas être affecté à " & strUtilisateur & _
          " pour le jour sélectionné !" & vbCrLf & "Veuillez choisir un autre _
     matériel...", vbExclamation
          Cancel = True
        End If
    End Sub
    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Je te remercie infiniment pour toutes ces précisions !! je viens de télécharger l'article sur le DAO je vais m'y plonger pour essayer de mettre en applications tous tes conseils!

    Juste une dernière question... chaque fois que j'ai saisi des codes sous VBA c'était relié à un bouton de commande, dans ce cas précis je le base directement sur le formulaire... ?? si oui faut-il que je sélectionne un des endroits précis dans les propriétés ?

    Pour la fonction c'est pareil ou pas? j'intègre le code à quel endroit? la requete doit elle etre intégrée sur le forrmulaire également pour que l'ensemble fonctionne ??

  8. #8
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Le fait que la fonction soit Public, il faut la poser dans un module que tu ajoutes à ton projet.
    En fait, dans le cas présent, elle n'est pas vraiment générique du fait que le SELECT est écrit en dur dedans et donc tu peux la poser dans le module du formulaire auquel cas il faut substituer Private à Public...
    Une fonction générique est réutilisable dans un autre contexte, c'est l'avantage.

    Il n'y a pas de requête à proprement parler dans l'exemple...
    Il y a un SELECT utiliser dynamiquement dans un Recordset...

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    bon alors là je crois que mon cas est désespéré! parce qu'apparement si j'ai bien compris ya plus besoin d'une requête mais d'un "select"...quesaco?? et alors pour le "recordset"...

    là je t'avoue que je suis completement dépassée...je vois pas du tout où je dois intégrer les codes que tu m'as donné...

  10. #10
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Hummm...
    Non il n'y a pas de requête à proprement parler, je veux dire par là qu'il n'y a pas "d'objet requête" avec un nom dans la liste des requêtes.
    Là, on prend un objet issue de la collection des objets de DAO à savoir un Recordset qui permet de jouer avec un jeu d'enregistrement défini justement par un SELECT, celui qui va te permettre de sélectionner le matériel et vérifier qu'il n'a pas été affecté à un utilisateur...

    La fonction que je t'ai proposé est à adapter avec lesbonne tables et les bons champs en fait car je ne connais pas ta base et ni ton formulaire.
    Si tu poses la fonction dans un module, tu peux la tester en mode DEBUG (F8) avec des paramètres particuliers.

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

Discussions similaires

  1. message d'erreur pour la validation d'un formulaire
    Par cyriane dans le forum VB.NET
    Réponses: 1
    Dernier message: 15/05/2012, 11h26
  2. Réponses: 1
    Dernier message: 17/05/2006, 15h27
  3. Message d'erreur pour débutant
    Par PhpDeb dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 27/04/2006, 12h14
  4. [MySQL] Message d'erreur pour atteindre ma base
    Par leloup84 dans le forum Installation
    Réponses: 7
    Dernier message: 04/02/2006, 01h51
  5. [DOM] Erreur pour valider une DTD
    Par lenghh dans le forum Format d'échange (XML, JSON...)
    Réponses: 13
    Dernier message: 19/05/2004, 18h15

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