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 :

[VBA][ACCESS 2003] Test d'existance d'une requête/table


Sujet :

VBA Access

  1. #1
    En attente de confirmation mail

    Profil pro
    Inscrit en
    Février 2003
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 126
    Points : 127
    Points
    127
    Par défaut [VBA][ACCESS 2003] Test d'existance d'une requête/table
    Bonjour à tous,
    en m'inspirant des différentes sources des FaQ et du forum, et après quelques essais infructueux, je souhaite faire une petite fonction qui me retourne vrai/faux en fonction de l'existance d'une requête.

    Le problème est que le code ci dessous n'a pas l'air de prendre en compte le On Error Goto err.

    Et du coup je me retrouve avec un plantage "3265 Item not found in this collection" sur le Set oQdf = oDb.QueryDefs(strQname)

    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
    24
    25
    26
    27
    28
    Public Function TestExistQuery(strQname As String) As Boolean
    '-------------------------------------------------------------------------------------------------------------'
    '|  Purpose                : Test if a query is existing within the DB
    '|  Linked Function(s)     :
    '|  Parameters             : strQname
    '-------------------------------------------------------------------------------------------------------------'
        On Error GoTo err
        Dim oDb As DAO.Database
        Dim oQdf  As DAO.QueryDef
     
        'access to the db
        Set oDb = CurrentDb
        Set oQdf = oDb.QueryDefs(strQname)
        'return true
        TestExistQuery = True
        Resume fin
    fin:
        Set oDb = Nothing
        Set oQdf = Nothing
        Exit Function
    err:
        'if erreur <> 3265 => query not exist raise the error
        If err.Number <> 3265 Then
            err.Raise err.Number, err.Source, err.Description
        End If
        Resume fin
     
    End Function
    un petit coup de main...

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 652
    Points : 34 358
    Points
    34 358
    Par défaut
    Salut,
    à peu de choses près, c'est bon :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    '*****************************
    'fonction de test d'existence d'une requête par les propriétés VBA
    'input = nom de la requête
    'output = booleen
    '*****************************
    Function PresenceQuery(strName As String) As Boolean
    'Pour fonctionner ce code nécessite la référence
    '   - Microsoft DAO X Object Library
    On Error GoTo err
        Dim oDb As dao.Database
        Dim oQdf  As dao.QueryDef
        PresenceQuery = False
        'Accède à la base de données courante
        Set oDb = CurrentDb
        Set oQdf = oDb.QueryDefs(strName)
        'Retourne Vrai
        PresenceQuery = True
     
    fin:
        'Libère les objets
        Set oDb = Nothing
        Set oQdf = Nothing
        Exit Function
    err:
        'Remonte toutes les erreurs différents de l'erreur 3265
        '(la requête n'existe pas)
     
        If err.Number <> 3265 Then
            err.Raise err.Number, err.Source, err.Description
        End If
        Resume fin
     
    End Function

  3. #3
    En attente de confirmation mail

    Profil pro
    Inscrit en
    Février 2003
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 126
    Points : 127
    Points
    127
    Par défaut
    Merci jpcheck,

    mais malheureusement ça ne marche pas, j'ai exactement la même erreur au même endroit.

    Pourtant j'ai bien une référence à DAO 3.6

    Je m'arrache les cheveux

  4. #4
    En attente de confirmation mail

    Profil pro
    Inscrit en
    Février 2003
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 126
    Points : 127
    Points
    127
    Par défaut
    j'ai vraiment l'impression que c'est le qui n'est pas pris en compte

  5. #5
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 652
    Points : 34 358
    Points
    34 358
    Par défaut
    Bon sinon, autre méthode hein :
    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
    Function PresenceQuery(strName As String) As Boolean
    'Pour fonctionner ce code nécessite la référence
    '   - Microsoft DAO X Object Library
     
        Dim oDb As dao.Database
        Dim oQdf  As dao.QueryDef
        PresenceQuery = False
        'Accède à la base de données courante
        Set oDb = CurrentDb
        For each oQdf in CurrentDb.QueryDefs
             If oQdf.Name = strName Then
        'Retourne Vrai
                 PresenceQuery = True
             End If
        Next
    fin:
        'Libère les objets
        Set oDb = Nothing
        Set oQdf = Nothing
     
    End Function

  6. #6
    En attente de confirmation mail

    Profil pro
    Inscrit en
    Février 2003
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 126
    Points : 127
    Points
    127
    Par défaut
    ça fonctionne,

    mais c'est vraiment bizarre le fait que le Goto err ne fonctionne pas, une idée ? du pourquoi.

  7. #7
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 652
    Points : 34 358
    Points
    34 358
    Par défaut
    Err est un nom spécifique à VBA (voir par exemple Err.Description)
    donc en renommant le nom du flag, ca devrait marcher je pense.

  8. #8
    En attente de confirmation mail

    Profil pro
    Inscrit en
    Février 2003
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 126
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par jpcheck Voir le message
    Err est un nom spécifique à VBA (voir par exemple Err.Description)
    donc en renommant le nom du flag, ca devrait marcher je pense.
    Bien vu c'était ça, maintenant ça marche avec le premier code.

    Merci Beacuoup

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

Discussions similaires

  1. [access 2003/VBA/SQL] Erreur d'execution 3201 sur une requête.
    Par Milyshyn76 dans le forum VBA Access
    Réponses: 6
    Dernier message: 02/05/2008, 09h04
  2. [DEBUTANT][access 2003]Référencer case à cocher dans une requête.
    Par Milyshyn76 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 27/12/2007, 11h21
  3. [VBA Access]Pb affichage de résultat d'une requête
    Par BouGeTonQ dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 18/06/2006, 18h49
  4. Réponses: 2
    Dernier message: 08/12/2005, 14h41
  5. Test d'existence d'une valeur dans une table
    Par dleu dans le forum Bases de données
    Réponses: 9
    Dernier message: 29/12/2004, 10h38

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