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

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Projeteur DAO, developpeur
    Inscrit en
    octobre 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Projeteur DAO, developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : octobre 2012
    Messages : 39
    Points : 29
    Points
    29
    Par défaut "Ressource système insuffisante" sur une requête union qui fait des totaux avec sum()
    Bonjour à tous,
    J'ai une requête de ce format :
    (pour mieux visualiser il suffit de coller dans oOo ou excel avec ; comme séparateur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Id;Ouvrage;Localisation;effluent;AR Racines;AR Stagnation d'effluents;Sep_1;AC Trace de mise en charge;AC Autre;Sep_2;AT A dégager;AT Autre;Sep_3;Defaut_comment;TotalAnno
    2;PR2;Bled;EU;	;1;|;	;	;|;	;1;|;Problème 1 ..;2
    3;DO3;Bled;EU;   ;   ;|;   ;   ;|;   ;1;|;Problème 2 ..;1
    je voudrais ajouter une ligne à la fin qui totalise les colonnes pour obtenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Id;Ouvrage;Localisation;effluent;AR Racines;AR Stagnation d'effluents;Sep_1;AC Trace de mise en charge;AC Autre;Sep_2;AT A dégager;AT Autre;Sep_3;Defaut_comment;TotalAnno
    2;PR2;Bled;EU;   ;1;|;   ;   ;|;   ;1;|;Problème 1...;2
    3;DO3;Bled;EU;   ;   ;|;   ;   ;|;   ;1;|;Problème 2...;1
    0;TOTAL_COLONNE;   ;   ;0;1;sep1;0;0;sep2;0;2;sep3;Defaut;Fin
    je me suis inspiré de cet exemple

    Je le fait avec des sum() et une union, qui me donnent ce code SQL:
    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
    SELECT *
    FROM Synthese_anomalies
     
    UNION
     
    SELECT 0
    	,'TOTAL_COLONNE'
    	,''
    	,''
    	,sum([AR Racines])
    	,sum([AR Stagnation d'effluents])
    	,'Sep1'
    	,sum([AC Trace de mise en charge])
    	,sum([AC Autre])
    	,'Sep2'
    	,sum([AT A dégager])
    	,sum([AT Autre])
    	,'Sep3'
    	,'Defaut'
    	,'Fin'
    FROM Synthese_anomalies
    Group_by id;
    dans la réalité, j'ai plus de colonnes, et après une trés longue mise au point, l'exécution de cette requête me donne le message "Ressource système insuffisante"
    Je ne comprend pas le problème
    Merci d'avance pour toute réponse
    Gérald

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Projeteur DAO, developpeur
    Inscrit en
    octobre 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Projeteur DAO, developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : octobre 2012
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    J'ai fait le test avec une table contenant strictement les valeurs de l'exemple ci dessus,
    puis j'ai fait une requête avec la chaine SQl, tout marche parfaitement, j'ai juste remplacé le select 0 par un sum([Id]), pour que la ligne ajoutée soit bien à la fin
    le résultat est bien conforme à ce que je souhaite.
    la seule différence entre cet essai est que dans la réalité j'ai plus de 30 colonnes, et j'ai plus de 1500 lignes.
    ça ne me parait pas vraiment énorme pour faire une addition ?

    peut être que le problème décisif est que dans mon exemple, la source est une simple table, alors que dans la réalité,
    c'est une requête jonction de plusieurs requêtes croisées Dynamiques.

    Je suis un peu surpris par cette limitation .

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Projeteur DAO, developpeur
    Inscrit en
    octobre 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Projeteur DAO, developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : octobre 2012
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    Bonjour,
    je me réponds, même si la solution que j'ai trouvé ne me plait pas vraiment
    ce problème de ressource insuffisantes, je l'ai eu sans arrêt sur des requêtes "relativement complexes" sur une base bien petite.

    La première raison que j'ai trouvé, c'est que ma base utilise une union de 13 petites bases
    (pour la saisie, les opérateurs doivent se promener entre les enregistrements, et avec leurs machine, c'est long donc il ont fractionné en table de 200 enregistrements)

    ça access n'aime pas du tout

    Il affiche même parfois le message "ne peut pas ouvrir de nouvelle base", car pour lui, il semble que se soit l'équivalent de 13 access ouverts.

    ensuite sur cette base union, je faisais 3 requêtes analyses croisées, jointe par un id, puis tout une série de nouvelles petites requête.

    ça ne me semblais pourtant pas bien compliqué, mais j'avais toujours ce message d'erreur pour les requêtes les plus complexes

    J'ai trouvé des correctif Microsoft pour ce message d'erreur, mais ils n'ont eu aucun effet


    La solution que j'ai trouvé a été de couper la chaine des requête en transformant ma requête union de tables issues de plusieurs bases en une seule table.

    Pour ça, j'ai utilisé cette petite merveille de code que j'ai trouvé ici

    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
     
    'transformer une requete en table
    'créer une table t_qry2table, avec un champ texte strQry,
    'y placer la liste des requêtes à transformer
     
    Function Query2Table()
     
    Dim db As dao.Database
    Dim rec As dao.Recordset
     
    Set db = CurrentDb
    Set rec = db.OpenRecordset("t_qry2table", dao.dbOpenForwardOnly)
    DoCmd.SetWarnings False
    Do While Not rec.EOF
       DoCmd.RunSQL "SELECT * INTO [T_" & rec.Fields("strQry") & "] FROM [" & rec.Fields("strQry") & "]"
       Debug.Print "Création de la table à partir de la requête : " & rec.Fields("strQry")
       rec.MoveNext
    Loop
     
    DoCmd.SetWarnings True
    Set rec = Nothing
    Set db = Nothing
    End Function

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

Discussions similaires

  1. Numérotation automatique sur une requête union
    Par ALEX80800 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 18/01/2012, 19h13
  2. [Système forums] Aide sur une requête SQL
    Par crazy_inf dans le forum Requêtes
    Réponses: 4
    Dernier message: 04/12/2011, 19h27
  3. [AC-2007] Requête création de table basée sur une requête union
    Par etoileweb dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 26/08/2011, 21h09
  4. Calcul de % sur une requête UNION ALL
    Par lodan dans le forum Langage SQL
    Réponses: 4
    Dernier message: 08/03/2007, 15h20
  5. [Optimisation] Problème sur une requête UNION.
    Par françois62 dans le forum Requêtes
    Réponses: 5
    Dernier message: 28/06/2005, 17h08

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