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 3048 Impossible d'ouvrir plus de bases de données. [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2007
    Messages : 184
    Points : 188
    Points
    188
    Par défaut Erreur 3048 Impossible d'ouvrir plus de bases de données.
    Bonjour à tous,
    Dans une appli de gestion commerciale, (AC97 et AC2003]
    Frontale - dorsale

    DA0 3.51 dans les références

    j'ai le message d'erreur :
    3048 Impossible d'ouvrir plus de bases de données.
    Cela se produit notamment quand je veux imprimer un Etat plusieurs fois dans une boucle (le phénomène se produit généralement vers 74 pages...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
       Do Until TableCli.EOF
           Forms!Passage!Param = TableCli!CodeFacture
           DoCmd.OpenReport "FacturePlus"
           DoCmd.Close acForm, "Facturation"
           TableCli.MoveNext
       Loop
    Au debogage...le curseur se positionne sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      DoCmd.OpenReport "FacturePlus"
    J'ai parcouru tous le code dans les modules de l'application.
    A priori j'ai fait des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    db.close
    set db = nothing
    partout ...

    je maitrise mal le débogage de cet aspect là
    - Est ce que cela peut provenir de l'état ?
    - Comment puis je connaitre le nombre de base de données ouverte...
    - leurs noms
    et d'où provient l'ouverture dans les objets (module, état, forms...)
    (et la non fermeture !)

    Merci de votre aide..
    Cordialement,
    fevec

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 551
    Points
    24 551
    Par défaut
    Bonjour,

    Avec ce genre de méthode c'est normal.

    Tu ne fermes jamais ton report, du coup il reste en mémoire, et la source reste ouverte. Tu fermes un formulaire (ça reste mystérieux comme approche).

    Bref, je te conseille d'utiliser l'option Where de la ligne de commande OpenReport.

    A la place de cette vilaine boucle tu mets ceci dans la clause Where :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "CodeFacture in(SELECT CodeFacture FROM TableCli)"
    Les noms sont à vérifier bien sur ! Mais la syntaxe et la méthode sont là.

    Cordialement,

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2007
    Messages : 184
    Points : 188
    Points
    188
    Par défaut
    Bonjour,
    Merci pour la réponse,
    J'ai modifié mon code comme ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        Dim TableCli As Recordset
        Set TableCli = CurrentDb().OpenRecordset("ClientsAFacturer", DB_OPEN_TABLE)
        TableCli.MoveFirst
     
         Do Until TableCli.EOF
           Forms!Passage!Param = TableCli!CodeFacture
           DoCmd.OpenReport "FacturePlus", acViewNormal, , "CodeFacture in(SELECT CodeFacture FROM ClientsAFacturer)"
     
           DoCmd.Close acReport, "FacturePlus", acSaveNo
     
           TableCli.MoveNext
       Loop
    Le message apparait à 75 factures imprimées.

    J'ai toujours ma vilaine boucle

    Je m'explique,
    la table ClientsAFacturer contient une liste de codefacture (par exemple 220)
    L'état FacturePlus a comme RecordSource, une requête qui utilise Forms!Passage!Param comme paramètre. (controle qui contient le codeFacture, formulaire masqué de passage de paramètre)
    Ce n'est peut être pas top (je ne suis pas le développeur initial de l'application)

    question 1 :
    Il faut bien que je parcoure ma table, pour faire varier le contenu de mon état.
    Le message apparait à 75 factures imprimées.
    J'ai bien essayer de mettre un docmd.close

    question 2 :
    si je passe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "CodeFacture in(SELECT CodeFacture FROM ClientsAFacturer)"
    comme argument de la clause where

    j'imagine que je modifier mon état pour gérer cette clause where
    sur l'évênement Sur Ouverture ?

    question 3
    Selon toi, mon problème serait lié au Recordsource de l'état ?
    Le fait qu'il s'agisse d'une requête nommée plutot que chaine SQL est il un souci
    (Ho : cela ferait ouvrir l'objet requête ?)

    ca parait bête mais je n'ai jamais piloté les états avec la clause where

    Merci de ton aide.

    Cordialement,
    Fevec

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 551
    Points
    24 551
    Par défaut
    Bonjour,
    Il faut bien que je parcoure ma table, pour faire varier le contenu de mon état.
    C'est l'état qui se charge de cette basse besogne. Faut bien qu'il fasse quelque chose...
    j'imagine que je modifier mon état pour gérer cette clause where
    sur l'évênement Sur Ouverture ?
    Non ! C'est totalement automatique. La clause Where est géré par l'état. (voir plus loin dans mon post)
    Selon toi, mon problème serait lié au Recordsource de l'état ?
    Pas du tout ! C'est la méthode qui est en cause. Tu ouvres 75 fois la même source, qui pointe peut être sur plusieurs tables, et donc cela fait 75 fois les mêmes tables ouvertes. Un peu trop pour n'importe quel SGBD. Comme c'est un fonctionnement asynchrone, les connexions restent ouvertes.


    LA solution :

    Tu remplaces ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Dim TableCli As Recordset
        Set TableCli = CurrentDb().OpenRecordset("ClientsAFacturer", DB_OPEN_TABLE)
        TableCli.MoveFirst
     
         Do Until TableCli.EOF
           Forms!Passage!Param = TableCli!CodeFacture
           DoCmd.OpenReport "FacturePlus", acViewNormal, , "CodeFacture in(SELECT CodeFacture FROM ClientsAFacturer)"
     
           DoCmd.Close acReport, "FacturePlus", acSaveNo
     
           TableCli.MoveNext
       Loop
    Par cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenReport "FacturePlus", acViewNormal, , "CodeFacture in(SELECT CodeFacture FROM ClientsAFacturer)"
    Et tu enlèves le lien vers le formulaire param.

    Du moment que FacturePlus contient un champ CodeFacture et que sa source contient toutes les factures à éditer (et même plus), l'état + clause where fera la reste tout seul.

    La condition where va poser un filtre, il ne prendra que les factures dont le N° (CodeFacture) est égal à la liste de tous les codes contenus dans ClientAFacturer.
    Donc pour résumer :
    1. ClientAFacturer doit contenir les N° facture (codefacture) à imprimer, et rien de plus.
    2. La source de FacturePlus doit contenir au moins les factures à imprimer, sinon plus.
    3. CodeFacture doit être un champ existant dans l'état FacturePlus.
    4. Supprimer tout filtre/liaison vers le formulaire.


    Tu peux faire l'essais de la ligne de commande dans la fenêtre d'exécution de VBE pour tester ça, avec acViewPreview au lieu de acViewNormal. Notamment en créant une copie de ton état que tu prendra soin de modifier comme je te l'ai indiqué.

    Cordialement,

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2007
    Messages : 184
    Points : 188
    Points
    188
    Par défaut
    Bonjour,
    Merci de cette aide très précieuse...

    Pb résolu !

    cordialement,

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2007
    Messages : 184
    Points : 188
    Points
    188
    Par défaut acc97 Remplacer texte d'un signet dans Word
    Bonjour à tous,

    Dans le tuto suivant
    'source : http://heureuxoli.developpez.com/office/word/vba-word/
    il y a bien une fonction (Function RemplacerTexteSignet)
    malheursement je n'arrive pas à la faire tourner en ACC97
    à cause je pense des type Bookmark et Range non disponible sous Access..

    Je sais "modifier" le texte d'un Bookmark... depuis Access
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        wdApp.ActiveDocument.Bookmarks("V1").Range.Text = "nouveau texte"
    en fait cela ne modifie pas vraiement mais ajoute du texte au précédent sans le remplacer.

    J'ai tenté d'atteindre le signet V1, puis de supprimer une sélection (8 cellules dans un tableau"

    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
        wdApp.ActiveDocument.Goto What:=wdGoToBookmark, Name:="V1"
        wdApp.ActiveDocument.find.ClearFormatting
        With wdApp.ActiveDocument.find
            .Text = ""
            .Replacement.Text = ""
            .Forward = True
            .Wrap = "wdFindContinue"
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchKashida = False
            .MatchDiacritics = False
            .MatchAlefHamza = False
            .MatchControl = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        wdApp.ActiveDocument.MoveDown Unit:="wdLine", Count:=8, Extend:="wdExtend"
        wdApp.ActiveDocument.Delete Unit:="wdCharacter", Count:=1
    J'obient une erreur variable non définie, sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wdApp.ActiveDocument.Goto What:=wdGoToBookmark, Name:="V1"
    alors que la syntaxe provient de l'enregistreur de macro de Word...

    Merci de vos suggestions.
    cordialement,
    fevec

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

Discussions similaires

  1. [AC-2010] Impossible d'ouvrir plus de base de données erreur 3048
    Par Mut dans le forum VBA Access
    Réponses: 4
    Dernier message: 08/12/2018, 16h46
  2. Réponses: 1
    Dernier message: 19/06/2014, 16h25
  3. Erreur "Impossible d'ouvrir plus de bases de données"
    Par pierremichel01 dans le forum IHM
    Réponses: 2
    Dernier message: 27/08/2008, 10h43
  4. Réponses: 5
    Dernier message: 27/06/2006, 12h27
  5. Impossible d ouvrir plus de bases de données
    Par cla dans le forum Access
    Réponses: 8
    Dernier message: 24/02/2006, 16h06

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