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 :

Erreur ouverture DAO.Recordset [AC-2003]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    rjl
    rjl est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Par défaut Erreur ouverture DAO.Recordset
    Bonjour,

    Merci de votre indulgence, j'aborde seulement le DAO et n'ai pour culture que l'excellent tutoriel de Christophe Warin dont je viens juste de lire les 100 pages avant de me lancer dans ce module.
    Mon objectif "créer dans une table des enregistrements quasi vides en nombre variable (défini dans une première table pour chaque club) pour produire de 3 à 280 "lignes vierges" par club sur les états de MàJ (écriture des données en blanc pour des adhérents ajoutés en plus de l'édition des adhérents existants).
    Côté Etat, c'est prêt, côté calcul du nombre de lignes à ajouter par club aussi...
    Mais mon retour très récent en Access et plus encore en VBA puis maintenant DAO me pénalise sans nul doute.
    Le Problème :

    Dès l' OpenRecordset, j'ai une erreur 424 provenant peut-être d'un environnement incorrect ?
    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
    Sub AjLgViergeAdh()           'AdLgViergeAdh : Création des lignes MàJ dans la base adhérents
     
    Dim RstB As DAO.Recordset     'Table AR22Gadh
    Dim DbB As DAO.Database
    Set DbB = CurrentDb
    Set RstB = db.OpenRecordset("SELECT * FROM AR22Gadh", dbOpenTable)  '
    RstB.AddNew                   'Passe en mode Ajout : que des enreg à ajouter sur cette table !
     
    Dim RstC As DAO.Recordset     'Table Clubs
    Dim DbC As DAO.Database
    Set DbC = CurrentDb
    Set RstC = db.OpenRecordset("SELECT * FROM Clubs WHERE NClub>0", dbOpenTable)     ', dbOpenTable
     
    While Not RstC.EOF            'Tant que non fin du recordset  "Clubs"
        Call EcritClubVierge(RstC.Fields("Nclub").Value, RstC.Fields("NbLigAjout").Value) 'écrit n enr. vides / club
        RstC.MoveNext             'Passer au club suivant
    Wend
     
    RstC.Close                    'Fermetures Tables
    DbC.Close
    Set RstC = Nothing
    Set DbC = Nothing
    RstB.Close
    DbB.Close
    Set RstB = Nothing
    Set DbB = Nothing
     
    End Sub
    La base est bien entendu ouverte et je n'arrive guère à voir ce qui ne va pas.
    J'ai tenté d'ajouter une ouverture de la base avant mais j'arrive ce qui parait logique sur une autre erreur puisque la base est déjà ouverte.
    J'ai voulu éditer (MsgBox) les valeurs transmises pour l'open mais là encore je tombe sur une erreur (92 de tête).
    Je ne sais plus comment débugger et ne peux plus compter que sur vos yeux experts.
    Alors merci d'avance pour vos idées, conseils et indications de solution.
    Je n'ai pas mis bien entendu le module chargé d'écrire mes enregistrements vierges : il est sans intérêt à ce niveau.

    RJL9802

  2. #2
    rjl
    rjl est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Par défaut
    Bonjour,
    La situation a changé ; je ne bloque plus, je vais dans la seconde procédure...
    Pour autant, je n'écrit rien (je ne fais pas de dégats
    Cette fois, je mets le code des 2 procédures pour que ce soir clair:
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Sub AjLgViergeAdh()           'AdLgViergeAdh : Création des lignes MàJ dans la base adhérents
    Dim k As Integer
    Dim TbC As DAO.TableDef, TbB As DAO.TableDef
    Dim RstC As DAO.Recordset     'Table Clubs
    Dim RstB As DAO.Recordset     'Table AR22Gadh
    Dim Db As DAO.Database
    Set Db = CurrentDb
    Set TbC = Db.TableDefs("Clubs")
    Set TbB = Db.TableDefs("AR22Gadh")
    Set RstB = Db.OpenRecordset("SELECT * FROM AR22Gadh") ', dbOpenTable)  '
    RstB.AddNew                   'Passe en mode Ajout : que des enreg à ajouter sur cette table !
     
    Dim DbC As DAO.Database
    'Set DbC = CurrentDb
    Set RstC = Db.OpenRecordset("SELECT * FROM Clubs") ' WHERE NClub>0", dbOpenTable)     ', dbOpenTable
     
    While Not RstC.EOF            'Tant que non fin du recordset  "Clubs"
        If k > 0 Then Call EcritClubVierge(RstC.Fields("Nclub").Value, RstC.Fields("NbLigAjout").Value) 'écrit n enr. vides / club
        i = k + 1
        RstC.MoveNext             'Passer au club suivant
    Wend
     
    RstC.Close                    'Fermetures Tables
    'Db.Close
    Set RstC = Nothing
    'Set Db = Nothing
    RstB.Close
    Db.Close
    Set RstB = Nothing
    Set Db = Nothing
     
    End Sub
     
    Sub EcritClubVierge(Nclub, NbRec)   'Ecriture des lignes ajouts (club/club)
    Dim i As Integer
    For i = 1 To NbRec
        RstB.AddNew                                   'Passe en écriture
        RstB.Fields("Nclub").Value = Nclub            'Affecte le N° de club
        RstB.Fields("Nadh").Value = 9500 + i          'N° adhérent
        RstB.Fields("Nom").Value = "ABCD"             'Nom fictif
        RstB.Fields("Prenom").Value = "ABCD"          'Prénom fictif
        RstB.Fields("CodeP").Value = 22000            'Code Postal fictif
        RstB.Fields("Ville").Value = "ABCD"           'Ville fictive
        RstB.Fields("DatNais").Value = #1/1/1900#     'Date Naiss fictive"
        RstB.Fields("DatModif").Value = Now()         'Date Création"
        RstB.Fields("Sx").Value = "F"                 'Sexe H ou F obligatoire
        RstB.Update                                   'Met à Jour
    Next i
    End Sub
    Alors, pour les fichiers j'ai mis (pour y voir clair un accès que j'ai laissé à la définition de table) ; j'ai surtout laissé une seule current db (et non une par... fichier ! J'ai aussi supprimé ce qui venait derrière le nom de fichier dont la condition While récupérée par un comptage : je pense que ces éléments étaient mal traduits après concaténation !
    Enfin, j'ai un problème avec mon module qui... n'écrit pas mes enregistrements... seule chose qu'il a à faire.

    un grand Merci à vous si vous arrivez à me tirer de ce mauvais pas
    Mes remerciements aussi si vous consacrez un peu de temps à me lire.
    RJL9803

  3. #3
    rjl
    rjl est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Par défaut Epilogue
    Bonjour,

    Sur ce plan, mon problème est résolu.
    En effet, je précisais ce matin que le seconde procédure n'avait pour but que d'écrire les nouveaux enregistrements sur la seconde table
    Un détail, j'avais omis de transmettre à cette seconde procédure le Db et le DAO.Recordset !
    J'ai mis leur définition en Public et les ai aussi transmis en paramètres.
    Ainsi, ça m'a généré 2500 enregistrements répartis de manière très variable selon les clubs (de 4 à 250 enregistrements).

    Donc c'est OK... mais tout ne peut jamais être parfait et sur mes états de mise à jour pour intéresser mon public, j'ajoutais toutes les statistiques de leur club et celles de l'ensemble des clubs.
    Oui, bien sauf que ça me comptabilise mes enregistrements fictifs ce qu'il va falloir que je supprime quelque part ?

    Comment ne pas comptabiliser dans les sommes automatiques (ou déduire) ? Autre sujet... J'ouvrirai un nouveau fil si je patauge de trop.
    En attendant, merci de votre appui car même si je n'ai pas eu de réponse (l'époque explique), ça m'a stimulé dans mes recherches de venir vous exposer mes soucis.
    Bonne continuation à tous. RJL9803

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

Discussions similaires

  1. [AC-2010] dao.recordset et erreur de syntaxe
    Par fclus dans le forum VBA Access
    Réponses: 8
    Dernier message: 16/06/2015, 11h56
  2. [erreur]DAO.Recordset et Req SQL
    Par nanou42 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/01/2011, 22h55
  3. [VBA] Utilisation de DAO.recordset
    Par kissmytoe dans le forum Access
    Réponses: 2
    Dernier message: 14/03/2006, 08h54
  4. Bookmark de Form et de DAO.Recordset
    Par CRUSOE13 dans le forum Access
    Réponses: 4
    Dernier message: 23/06/2005, 11h27
  5. gestion d'erreur et fermeture recordset
    Par yorra dans le forum Access
    Réponses: 4
    Dernier message: 14/11/2004, 11h38

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