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 :

Fonction de suppression de requête non fonctionnelle [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Points : 42
    Points
    42
    Par défaut Fonction de suppression de requête non fonctionnelle
    Bonjour,

    Je reviens vers vous car il m'arrive un petit soucis avec une fonction de suppression de requête. Je me sers de cette fonction à la suite d'un export vers excel d'un résultat de requête contenu dans ma listbox "lstResults".
    L'export est fonctionnel comme je le souhaite mais pas la suppression de la requête qui me renvoie le message d'erreur: "La requête n'existe pas"

    Fonction d'export:
    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
    Private Sub btnExport_Click()
        Dim SQL As String
        Dim NomQDF As String
     
        SQL = Me.lstResults.RowSource
     
        'Faites ici tous vos tests pour vous assurer d'un nom valide pour la requête à créer :
        NomQDF = InputBox("Entrer un nom pour la recherche en cours:")
        If NomQDF = "" Then
        MsgBox "Vous n'avez pas indiqué de nom valide pour la requête."
        Exit Sub
        End If
     
        'Création de la requête
        CurrentDb.CreateQueryDef NomQDF, SQL
     
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, NomQDF, "C:\TMP\toto.xls"
     
        Call suppRequete
    End Sub
    Fonction de suppression:
    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
    34
    35
    36
    Public Function suppRequete()
    'Gestion d'erreur
    On Error GoTo err
     
        Dim NomQDF As String
        Dim oDb As DAO.Database
        Dim oQdf  As DAO.QueryDef
        Dim strReqName As String 'Nom de la requête à supprimer
     
     
        'Accède à la base de données courante
        Set oDb = CurrentDb
     
        strReqName = "& NomQDF"
     
        'Tente la suppression
        oDb.QueryDefs.Delete strReqName
        'Affiche un message
        MsgBox "La requête " & strReqName & " a été supprimée"
     
     
    fin:
        'Libère l'objet oDb
        Set oDb = Nothing
        Exit Function
     
    err:
        'Affiche un message suivant l'erreur
        Select Case err.Number
            Case 3265: MsgBox "La requête n'existe pas"
            Case Else: MsgBox "Erreur critique inconnue"
        End Select
        'Termine le programme
        Resume fin
     
    End Function
    Je ne vois absolument pas ce qui peut poser soucis

    Merci par avance pour votre aide

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 47
    Points : 57
    Points
    57
    Par défaut
    Par ma culture, c'est sensé faire quoi ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strReqName = "& NomQDF"

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par Nitsuja Voir le message
    Par ma culture, c'est sensé faire quoi ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strReqName = "& NomQDF"
    Je récupère le nom de ma requête précédemment créée (NomQDF)

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 47
    Points : 57
    Points
    57
    Par défaut
    Ok je savait pas que l'on pouvait faire ça !
    Et ça marche ? ^^

    Personnellement j'aurais passé NomQDF en argument à la fonction.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Points : 42
    Points
    42
    Par défaut
    Non, avec ou sans cette ligne ça me renvoie toujours la même erreur

    Call suppRequete(NomQDF) me renvoie la même erreur suivie d'une incompatibilité de type

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 47
    Points : 57
    Points
    57
    Par défaut
    Oui mais si ta ligne de code marche (test avec Debug.Print) et renvoie bien le nom de ta requête le problème n'est pas la.
    Je ne vois pas pourquoi il y aurait une incompatibilité de type cependant.

    Par contre je crois qu'en DAO la requête n'est pas dans la base tant que tu n'as pas fait cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oDb.Querydefs.append oQdf
    Ce qui expliquerait pourquoi la suppression ne trouve pas ta requête.

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2008
    Messages : 97
    Points : 143
    Points
    143
    Par défaut
    C'est normal en faisant ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strReqName = "& NomQDF"
    tu essayes de supprimer une requête don le nom est "& NomQDF", qui a peu de chance d'être le nom rentré dans l'InputBox par l'utilisateur.

    ce que tu dois faire c'est assigner le contenu de la variable comme ceci:

    Mais il y a un second problème, c'est que tu as déclaré NomQDF dans btnExport_Click() et une fois en dehors, NomQDF n'existe plus. Tu la redéclares dans suppRequete() mais elle n'est pas assignée.

    Donc la solution est bien de la passer en paramètre tu dois donc déclarer ta fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub suppRequete(NomQDF As String)
    et ne plus déclarer NomQDF dans la fonction.

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Points : 42
    Points
    42
    Par défaut
    Lorsque je fais
    strReqName = "Test125"

    Avec un requête se nommant Test125 déjà créée, la suppression est OK
    Mes requêtes se crées bien par contre le debug.print me renvoi: & NomQDF

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 47
    Points : 57
    Points
    57
    Par défaut
    Forcément car tu affectes "& NomQDF" au lieu du nom de la requête de l'utilisateur. Comme je ne suis pas un as en VBA j'ai pensé que c'était une nouvelle forme de passage de paramètre ^^

    Il faut donc procéder comme mkl238 l'explique.

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Points : 42
    Points
    42
    Par défaut
    Un grand merci à mkl238 et Nitsuja tout fonctionne impeccablement bien
    Je ne sais pas pourquoi je n'ai pas pensé à passer NomQDF en paramètre

    Je colle mon code au cas ou:

    Export:

    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
    Private Sub btnExport_Click()
        Dim SQL As String
        Dim NomQDF As String
     
        SQL = Me.lstResults.RowSource
     
        'Faites ici tous vos tests pour vous assurer d'un nom valide pour la requête à créer :
        NomQDF = InputBox("Entrer un nom pour la recherche en cours:")
        If NomQDF = "" Then
        MsgBox "Vous n'avez pas indiqué de nom valide pour la requête."
        Exit Sub
        End If
     
        'Création de la requête
        CurrentDb.CreateQueryDef NomQDF, SQL
     
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, NomQDF, "C:\TMP\toto.xls"
     
        Call suppRequete(NomQDF)
    End Sub
    Fonction de suppression de requête:
    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
    34
    35
    Public Function suppRequete(NomQDF As String)
    'Gestion d'erreur
    On Error GoTo err
     
        Dim oDb As DAO.Database
        Dim oQdf  As DAO.QueryDef
        Dim strReqName As String 'Nom de la requête à supprimer
     
     
        'Accède à la base de données courante
        Set oDb = CurrentDb
     
        strReqName = NomQDF
     
        'Tente la suppression
        oDb.QueryDefs.Delete strReqName
        'Affiche un message
        MsgBox "La requête " & strReqName & " a été supprimée"
     
     
    fin:
        'Libère l'objet oDb
        Set oDb = Nothing
        Exit Function
     
    err:
        'Affiche un message suivant l'erreur
        Select Case err.Number
            Case 3265: MsgBox "La requête n'existe pas"
            Case Else: MsgBox "Erreur critique inconnue"
        End Select
        'Termine le programme
        Resume fin
     
    End Function
    Merci encore

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

Discussions similaires

  1. Fonction réseauconnecte et lanceappli non fonctionnel
    Par djdidi2010 dans le forum WinDev
    Réponses: 3
    Dernier message: 03/04/2012, 14h57
  2. Plugin non fonctionnel après requête AJAX
    Par florianlyon dans le forum jQuery
    Réponses: 8
    Dernier message: 05/07/2011, 08h56
  3. Fonction getimagesize non fonctionnel (Taille fichier SVG)
    Par Guillaume_Caldera dans le forum Langage
    Réponses: 3
    Dernier message: 17/03/2010, 12h57
  4. Fonction declencheur non fonctionnelle
    Par L'aigle de Carthage dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 16/11/2009, 19h23
  5. [MySQL] Requête delete non-fonctionnelle
    Par asvin dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 05/12/2008, 21h40

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