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 :

[AC-2003-2007] Problèmes RecordSet


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 63
    Par défaut [AC-2003-2007] Problèmes RecordSet
    Bonjour, après plusieurs jours à m'arracher les cheveux sur la même partie de code, et après des centaines de requête à mon ami google, je reviens vous ennuyer avec ACCESS...

    I) Introduction
    J'ai un bouton sur le formulaire, qui permet de supprimer une station.
    Problème, il n'allait pas supprimer les champs équivalent dans d'autres tables, et ne faisait pas de vérifications.

    J'ai donc été chargé de régler cela.

    La partie suppression dans les autres tables, pas de problème.
    Mais je coince sur la vérification.

    II) Code actuel (seulement le 1er If, les autres feront la même chose)

    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
     
    Private Sub Bouton118_Click()
    Dim msg As Integer
    Dim db As DAO.Database
    Dim requete As String
    Dim verif As DAO.Recordset
     
    Set db = CurrentDb
     
    requete = "SELECT [Numéro polygone] FROM [station] WHERE [Numéro station] = '" & Forms![station]![Numéro station] & "';"
     
    Set verif = db.OpenRecordset(requete)
     
    If verif.RecordCount = 0 Then
    'If Not verif.EOF And Not verif.BOF Then
    III) Les solutions
    J'ai utilisé le recordcount, le EOF/BOF, 'is Nothing', le nomatch, isnull().
    Aucun ne réalisé le résultat escompté.

    Si la station n'a pas de N° de polygone, il passe dans la boucle, sinon il sort et met une erreur (plus bas dans mon code)

    Or là, il ne tient compte de rien.

    1er cas : il rentre dans boucle (cas du EOF/BOF) :
    Il y a un N° polygone, et devrait sortir en erreur, mais il rentre tout de même dans la boucle.

    2nd cas : il sort toujours de la boucle pour aller en erreur (cas du recordcount - is Nothing) :
    Là j'enlève le N° polygone, et devrait rentrer dans la boucle pour aller supprimer la station, mais non il sort et va dans l'erreur.

    Chaque solution rentre dans l'un de ces 2 cas.
    Aucun ne fait ce qu'il faut.

    Le EOF/BOF reste toujours à Faux
    Le recordcount reste toujours à 1
    Le is Nothing est toujours faux
    Le nomatch est toujours faux
    Le isnull() est toujours faux

    De plus je ne connais pas le moyen pour afficher verif et ainsi voir ce qui se trouve dedans.

    IV) Liens
    Voici les liens que j'ai suivi (et que j'ai gardé sinon il y en aurait pas mal ^^)
    http://www.developpez.net/forums/d49...em-rs-nomatch/
    http://www.access-programmers.co.uk/...d.php?t=138527

    V) DAO/ADO?
    J'ai vu qu'il y avait ces références sous ACCESS
    Je ne sais pas si j'ai l'ADO (je ne sais même pas si c'est la même références, ou 2 différentes)
    Voici les références que j'ai :
    - VB
    - Microsoft Access 12.0
    - Microsoft DAO 3.6
    - OLE
    - VB for applications Extensibility 5.3

    Merci d'avance pour ce nouveau casse tête chinois... plutôt ricain

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour d'après moi ton problème vient de la source de données donc :

    • As-tu vérifié que
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      "SELECT [Numéro polygone] FROM [station] WHERE [Numéro station] = '" & Forms![station]![Numéro station] & "';"
      donne bien des résultats dans l'éditeur de requête ? (en remplaçant : " & Forms![station]![Numéro station] & " par une donnée valide, évidement :-)
    • As-tu fait afficher Forms![station]![Numéro station] au moment où tu l'utilises et vérifié que c'était bien ce que tu voulais ?
    • Dernier point ton numéro de station est-il alphanumérique ou seulement numérique ?


    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 63
    Par défaut
    Oui la requête fonctionne quand je fais mon teste avec ma station de teste (la 1ère de la table).

    Oui, quand je met Forms![station]![Numéro station] dans un MsgBoxn j'ai bien ma donnée.

    Le champ est alphanumérique.

  4. #4
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 186
    Par défaut
    Pourquoi ne pas utiliser un dcount ?

    Ou de façon générale pour répondre au problème initiale, pourquoi ne pas utiliser les clés étrangères sur la base ?
    [Access] Les bases du débogage => ici

  5. #5
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Bonjour,

    je suis peut-être un peu pinailleur, mais je ne comprend pas ceci ?

    La partie suppression dans les autres tables, pas de problème.
    Mais je coince sur la vérification.
    Pourquoi vérifier si la suppression ne pose pas de problème ?

    Es-tu certain que si ton form affiche le numéro a contrôler, tu n'as pas verouillé un quelconque record qui empêche ton code de fonctionner ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 63
    Par défaut
    Je ne sais pas à quoi faire le dcount, mais j'ai déjà utilisé le recordcount.

    Le but est de savoir si le champ que la requête va aller sélectionné est vide ou non.

    S'il est vide, il n'y a pas de polygone, on peut passer à la vérification suivante.
    Si le champ n'est pas à Null (en langage SGBD), il y a donc un résultat, donc un polygone est associé à la station. Si c'est le cas, l'utilisateur est alors reconduit à un message d'erreur : il n'a pas le droit de supprimer une station ayant un polygone.

    Si je fais une vérification, c'est pour que les utilisateurs ne suppriment pas n'importe quoi.

    Le champ n'est pas verrouillé.



    En gros, je viens de comprendre que le recordset est toujours rempli (je n'avais pas encore compris le fonctionnement de EOF/BOF).

    C'est pour cela que je voulais afficher le résultat de la requête, pour voir ce qu'il y avait dans verif.

    Quand je passe la souris sur verif en mode debogage, soit rien ne s'affiche, soit j'ai toute la requête. Mais je ne suis pas sur que cela soit un résultat convaincant.

  7. #7
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 186
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if dcount("[Numéro polygone]", "[station]", "[Numéro station] = '" & Forms![station]![Numéro station] & "'") = 0 then
        ' Pas de polynome
    else
        ' Un ou des polynome(s)
    end if
    [Access] Les bases du débogage => ici

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2010
    Messages : 56
    Par défaut
    Salut à toi,

    Si je comprends bien, ton champs polygone contient soit :
    - un alphanumérique ex :"qfzegzgZZ4445"
    - ou rien => ""

    As-tu essayer de changer ton test avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF Verif!Numéro_polygone<>"" then ...
    Le but est de vérifier que le champs est VIDE.

    Je suppose que le champs polygone est unique dans ta table pour chanque station.

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

Discussions similaires

  1. [XL-2003] [XL-2003 & 2007] Problème pour redimensionner une plage nommée
    Par panda31 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/01/2012, 17h05
  2. Réponses: 10
    Dernier message: 02/02/2011, 16h45
  3. VBA Problème Picture/image (problème passage 2003 => 2007 => 2003)
    Par david_atx dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 12/10/2009, 14h50
  4. [Migration 2003 - 2007] problème de routage des mails
    Par nicoda dans le forum Exchange Server
    Réponses: 0
    Dernier message: 15/01/2008, 11h03
  5. [VBA-2007]Problèmes affichage Shapes - Passage 2003 -> 2007
    Par Kitty-cat dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/12/2007, 13h52

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