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] Recordset ADOBD vide à partir requête Access


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 4
    Par défaut [VBA] [Résolu] Recordset ADOBD vide à partir requête Access
    Bonjour,

    Je rencontre un problème de chargement d'un recordset à partir d'une requête Access (2003 SP2).

    Voici mon code (basique ...) :
    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
     
    ' Déclaration connexion
    Dim CONX As New ADODB.Connection
    Set CONX = CurrentProject.Connection
     
    ' Déclaration recorset
    Dim RecordsetConfig As New ADODB.Recordset
    RecordsetConfig.ActiveConnection = CONX
     
    ' Chargement du recordset avec une requête Access : TPEexportConfig
    Dim SQL As String
    SQL = "select * from TPEexportConfig"
    RecordsetConfig.Open SQL, CONX, adOpenDynamic
    RecordsetConfig.MoveFirst
     
    Do Until RecordsetConfig.EOF = True
               ' insertion en base pour chaque enregistrement
                DoCmd.RunSQL "INSERT INTO ConfigTPE (NumTPE,IdEltConf,Version) VALUES (" & RecordsetConfig.Fields(0) & ", 1 ,'" & RecordsetConfig.Fields(1) & "');", True
     
               RecordsetConfig.MoveNext
    Loop
         RecordsetConfig.Close
    Mais je bloque à la ligne MoveFirst avec l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    erreur d'exécution '3021'
    BOF ou EOF est égal à True ou l'enregistrement actuel a été supprimé
    Et si je ne mets pas mon RecordsetConfig.MoveFirst je ne rentre pas dans la boucle.
    Ce qui m'étonne c'est qu'en passant via DAO je n'avais pas ce pb.

    En revanche si ma variable SQL s'appuie sur une table Access (et non plus une requête Access), je rentre dans ma boucle (bon après j'ai de gros pb de perfs dont je parlerai après ...)

    Quelqu'un voit-il mon erreur ?

    D'avance merci de l'aide de quiconque pour le grand débutant VBA que je suis.

  2. #2
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonjour et bienvenue sur le forum.

    Cette erreur sur un MoveFirst indique en général un recordset vide.
    J'ai essayé ton code et il fonctionne pour moi.

    Je vois que tu parles de requête.
    Il y a un piège avec ADO dans les critères avec LIKE.
    Il faut utiliser les caractères génériques % et _ en lieu et place de * et ?
    Par exemple
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Communes WHERE Ville LIKE "?AR*"
    ne fonctionne pas. Il faut écrire pour ADO :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Communes WHERE Ville LIKE "_AR%"
    A+

  3. #3
    Membre chevronné
    Inscrit en
    Août 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 360
    Par défaut
    Bonjour,

    Essayes aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Do While (Not RecordsetConfig.EOF)
                ' insertion en base pour chaque enregistrement
                DoCmd.RunSQL "INSERT INTO ConfigTPE (NumTPE,IdEltConf,Version) VALUES (" & RecordsetConfig.Fields(0) & ", 1 ,'" & RecordsetConfig.Fields(1) & "');", True
     
               RecordsetConfig.MoveNext
    Loop
    Je sais que ca revient au même, Lol...

  4. #4
    Membre émérite

    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 626
    Par défaut test
    Bonjour,
    Le test avant tout le reste, possible avec le type de curseur utilisé par cagou

    If rst.RecordCount > 0 Then

    A+

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 4
    Par défaut And the winner is ...
    Bonjour,

    Merci à tous les 3 de vous êtes penchés sur mon problème.
    Et la solution était en effet toute simple, j'avais une clause where avec des * dans ma requête TPEexportConfig !
    D'où le recordset initialement vide.
    J'avais pourtant bien vu les posts qui en parlait déjà mais je n'avais pas fait le rapprochement !

    En tout cas encore merci.

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

Discussions similaires

  1. [VBA] recordset, affichage de la requête
    Par bugprog dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/05/2007, 12h27
  2. [VBA]Test cellule vide base access
    Par ALAMARQU dans le forum VBA Access
    Réponses: 4
    Dernier message: 17/03/2006, 16h14
  3. [VBA-A]Acces aux données d'une requête Access
    Par Yanmeunier dans le forum VBA Access
    Réponses: 7
    Dernier message: 28/02/2006, 12h21
  4. Afficher carnet d'adresses d'Outlook à partir d'ACCESS (VBA)
    Par jean-michel lévêque dans le forum Access
    Réponses: 1
    Dernier message: 19/12/2005, 16h30
  5. Réponses: 1
    Dernier message: 09/12/2005, 19h12

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