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 :

recordset erreur 3078


Sujet :

VBA Access

Vue hybride

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Par défaut recordset erreur 3078
    Bonjour

    Je suis actuellement en train de créer un code VBA qui teste de nombreux champs d'un formulaire afin de savoir quelle est la requête adéquate à exécuter. Comme je ne récupère qu'un seul champ dans la sortie de ma requête, je voudrais ensuite la placer dans une boite message.
    Or, lorsque j'ouvre un recordset avec ma requête "EvolutionTouteLigneToutTJ", j'ai l'erreur 3078. Pourtant, ma requête fonctionne très bien toute seule.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If (Me.Ligne.Value = "Toutes les lignes") Then
            If (Me.TJ.Value = "Tous les jours type") Then
                Set rs = db.OpenRecordset(EvolutionTouteLigneToutTJ)
                rs.MoveFirst 'non terminé
            Else ...
    Cette requête calcule une évolution en pourcentage.
    Donc si quelqu'un pouvait déjà me dépanner là dessus.
    Ensuite, j'aimerais récupérer la donnée de ma requête pour la placer dans une msgbox, d'où le rs.movefirst. Mais comment le placer dans la msgbox?
    Merci d'avance pour vos réponses.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 427
    Par défaut
    Bonjour,

    Deux sources d'erreurs possibles dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rs = db.OpenRecordset(EvolutionTouteLigneToutTJ)
    Si EvolutionTouteLigneToutTJ est une variable, pas de problème, sinon, il faut ajouter les quotes "", c'est le nom de la requête qui sert d'index, l'ouverture de recordset attend donc une String en paramètre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rs = db.OpenRecordset("EvolutionTouteLigneToutTJ")
    Ensuite tu ne testes pas l'existence de données sur ton recordset, donc si tu veux te déplacer sur le premier enregistrement d'une requête vide --> erreur !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set rs = db.OpenRecordset("EvolutionTouteLigneToutTJ(")
    (If not rs.eof then
                rs.MoveFirst 'non terminé

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Par défaut
    Mello!

    Tout d'abord merci!
    EvolutionTouteLigneToutTJ est une requête et non une variable donc, il faut que je mette les "".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If (Me.Ligne.Value = "Toutes les lignes") Then
            If (Me.TJ.Value = "Tous les jours type") Then
                Set rs = db.OpenRecordset("EvolutionTouteLigneToutTJ")
                rs.MoveFirst
            Else
    Cependant, il me met dans ce cas une autre erreur, l'erreur 3061 disant qu'il y a trop peu de paramètres, 2 sont attendus.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 427
    Par défaut
    Dans ce cas ta requête nécessite la récupération de paramètres qu'elle ne trouve pas ou tu as des erreurs dans l'écriture.

    Testes ta reuête dans le QBE et le système va t'afficher ce qui manque pour l'éxécution "propre" de la requête.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Par défaut
    Ma requête fait appel aux résultats de deux autres requêtes, ça pourrait être ça? Pourtant ces deux requêtes font appel au même formulaire...
    Par contre kézako QBE?

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 427
    Par défaut
    QBE : Query By Exemple, c'est l'outil de requêtage d'access ! désolé

    Le formulaire qui contient les données est bien ouvert au moment de l'appel ?

  7. #7
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim qdf As DAO.QueryDef 
    Dim rs As DAO.Recordset 
     
    Set qdf = CurrentDb.QueryDefs("EvolutionTouteLigneToutTJ") 
    Set rs = qdf.OpenRecordset  
     
     
     
    If (Me.Ligne.Value = "Toutes les lignes") Then
            If (Me.TJ.Value = "Tous les jours type") Then
                If not rs.eof then
                rs.MoveFirst 
                end if
            Else ...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Par défaut
    merci alielayadi, mais ça ne fonctionne toujours pas
    Il me manque toujours deux paramètres.
    Quand on appelle une requête existante dans du vba, et que celle-ci fait appel aux données (variables) d'un formulaire, faut-il mettre du code VBA dans la requête, ou autre chose? Je suis sûre que c'est ça qui ne fonctionne pas

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Par défaut
    Ca y est, j'ai trouvé!

    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
    If (CaseCoch.Value = False) Then
            If (Me.Ligne.Value = "Toutes les lignes") Then
                If (Me.TJ.Value = 0) Then
                    Set qdf = db.QueryDefs("EvolutionTouteLigneToutTJ")
                    For Each prm In qdf.Parameters
                        prm.Value = Eval(prm.Name)
                    Next prm
                    Set rs = qdf.OpenRecordset(dbOpenDynaset)
                    If rs.EOF = True Then
                        MsgBox ("Aucun résultat")
                    Else
                        rs.MoveFirst
                        MsgBox "L'évolution de l'année " & 2000 + AnneeDeux & " par rapport à l'année " & 2000 + AnneePrem & " est de " & rs("Evolution") * 100 & "%"
                    End If
                    'stDocName = "EvolutionTouteLigneToutTJ"
                    'DoCmd.OpenQuery stDocName, acNormal, acReadOnly
                Else
    Par contre, une dernière petite question : mon évolution s'affiche avec un grand nombre de décimales. Est-ce que je peux définir un format dans ma boite message pour qu'au lieu d'avoir 1.95175126712638152%, j'ai 2% ???

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    rs.MoveFirst
                        Evol = Format(rs("Evolution"), "#,##0%")
                        MsgBox "L'évolution de l'année " & 2000 + AnneeDeux & " par rapport à l'année " & 2000 + AnneePrem & " est de " & Evol

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

Discussions similaires

  1. Code d'erreur 3078
    Par 2h15Crew dans le forum VB.NET
    Réponses: 3
    Dernier message: 02/06/2011, 20h53
  2. erreur 3078 avec openrecordset
    Par aba_tarn dans le forum VBA Access
    Réponses: 1
    Dernier message: 25/06/2007, 09h54
  3. Réponses: 1
    Dernier message: 30/05/2007, 10h41
  4. Réponses: 13
    Dernier message: 27/02/2007, 10h09
  5. Recordset Erreur de type 13
    Par misterenart dans le forum Access
    Réponses: 3
    Dernier message: 10/07/2006, 19h26

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