QueryDefs Temps de réaction

Thiazung Messages postés 16 Date d'inscription jeudi 6 mars 2003 Statut Membre Dernière intervention 12 juin 2007 - 4 juin 2007 à 14:45
Thiazung Messages postés 16 Date d'inscription jeudi 6 mars 2003 Statut Membre Dernière intervention 12 juin 2007 - 8 juin 2007 à 17:10
Bonjour à tous,

Je boucle sur une liste, et à chaque élément de cette liste, j'utilise les informations pour mettre à jour une requête via queryDefs, puis j'exécute un état en ayant au préalable modifié l'imprimante par défaut par Acrobat PDFWriter pour que la sortie de l'état se fasse dans un fichier pdf, ce qui pose problème c'est que quelque fois, il manque des informations.
Mon état est composé de plusieurs graphiques, chaque graphique étant lié à une requête, qui est une union d'autres requêtes.
Chacune de ces requêtes étant liées à ma requête filtre mise à jour au préalable via QueryDefs.


Si quelqu'un a une solution à mon problème, je serais très heureux de l'apprendre.


Comme vous pouvez le constater j'essaye d'avoir confirmation que ma requête est bien à jour avant de lancer la sortie du pdf, et j'essaye même de vider la mémoire. Mais ça n'a pas l'air de marcher. Sur les vingts fiches que je dois sortir, il peut y en avoir 2 ou 3 à avoir un graphique vide faute de données suffisantes (et un ou deux graphiques sur les six)


Merci d'avance, salutations ;)


    
    Dim ws As Workspace
    ' On déclare l'objet permettant de modifier notre requête
    Dim acApp As Database
    ' On déclare l'objet permettant l'impression de nos fichiers
    Dim MesEtats As Access.Application


    Lbl_Infos.Caption =  "L'exportation est en cours, veuillez patienter..."
    
    If CheminUser = "" Then
        CheminUser = bGetRegValue(HKEY_CURRENT_USER, "Software\FD", "CheminFichier")
    End If
    
    For i = 1 To FlexGrid_Res.Rows - 1
        
        Set ws = DBEngine.CreateWorkspace("JetTest", "Admin", "")
        DBEngine.Workspaces.Append ws
        Set acApp = ws.OpenDatabase(BaseMaitre)
        
        FlexGrid_Res.row = i
        Filtres = ""


        NomFichier = Format(Date, "yyyymmdd")


        With acApp
            With .QueryDefs("R_DetailsListe")
                FlexGrid_Res.Col = 0
                NomFichier = NomFichier & "-" & Trim(FlexGrid_Res)
                Filtres = "Chp1= '" & FlexGrid_Res & "' "
                '.SQL = Replace(.SQL, "[monChp1]", "'" & FlexGrid_Res & "'")
                FlexGrid_Res.Col = 1
                NomFichier = NomFichier & "-" & Trim(FlexGrid_Res)                Filtres Filtres & "AND  Chp2 '" & FlexGrid_Res & "'"
                '.SQL = Replace(.SQL, "[monChp2]", "'" & FlexGrid_Res & "'")
                .SQL = "SELECT TOP 1 [RS] & ' ' & Trim([V]) & ' - ' & [E] AS RaS, 'Situtation ' & Left([Semaine],4) & ' à fin semaine ' & Right([Semaine],2) AS Annee, T_RMI.Periode, T_RMI.V, T_RMI.E, 'Édité le ' & Date() AS DateduJour, T_CT.S " & _
                        "From T_RMI, T_CT " & _
                        "GROUP BY [RS] & ' ' & Trim([V]) & ' - ' & [E], 'Situtation ' & Left([Semaine],4) & ' à fin semaine ' & Right([Semaine],2), T_RMI.Periode, T_RMI.V, T_RMI.E, T_CT.S, T_RMI.Semaine " & _
                        "Having (((T_RMI.Periode) = 'h') AND " & Filtres & ") " & _
                        "Order By 'Situtation ' & Left([Semaine],4) & ' à fin semaine ' & Right([Semaine],2) DESC , T_RMI.Semaine DESC;"
                .Close
            End With


        End With
    
        acApp.Close


        Set acApp = Nothing


        PauseAppli 3


        Connection_base BaseMaitre, con
        
        compteur = 1
        While Not EnAttente
            compteur = compteur + 1
            Set rs = lecture_enregistrement("SELECT V, E FROM R_DetailsListe WHERE " & Filtres, con)
            If Not rs.EOF Then
                 EnAttente = True 
            End If
        Wend
        Debug.Print "Nombre de tentatives : " & compteur & " pour " & Filtres
    
        fermeture_recordset rs
        fermeture_connection_base con
        
        DBEngine.BeginTrans
        DBEngine.CommitTrans dbForceOSFlush
        DBEngine.Idle dbRefreshCache


        Set MesEtats  = New Access.Application
        MesEtats.OpenCurrentDatabase BaseMaitre, False
    
        EnAttente = False


        Set ImprimanteParDefaut = MesEtats.Printer
        Set MesEtats.Printer = MesEtats.Printers("Acrobat PDFWriter")


        bSetRegValue HKEY_CURRENT_USER, "Software\Adobe\Acrobat PDFWriter", "PDFFileName", IIf(CheminUser <> "", IIf(Right(CheminUser, 1) <> "", CheminUser &amp; "", CheminUser), CheminDefaut) &amp; NomFichier &amp; ".pdf"


        MesEtats.DoCmd.OpenReport "Top20_1", acViewNormal
        MesEtats.DoCmd.Close acReport, "Top20_1", acSaveNo


        Set MesEtats.Printer = ImprimanteParDefaut
        
        MesEtats.CloseCurrentDatabase
        MesEtats.Quit acQuitSaveNone
        
        Set MesEtats = Nothing
    Next i

9 réponses

chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
4 juin 2007 à 16:47
Bonjour,

Définis tes requêtes de telle sorte que  :
 
 >Solution 1 : les données suceptibles d' être vides
                      aient une valeur par defaut en cas de Null
 >Solution 2 : Ajouter au filtre le critère de non Null pour
                      ces mêmes données.

0
Thiazung Messages postés 16 Date d'inscription jeudi 6 mars 2003 Statut Membre Dernière intervention 12 juin 2007
4 juin 2007 à 16:56
Merci de ta réponse,

Mais mon problème est qu'il y a toujours des résultats lorsqu'il prend en compte mon filtre, or ce n'est pas toujours le cas.
Pour un état, composé de 6 graphiques (donc 6 requêtes), il arrive qu'un ou deux graphiques n'affichent rien, parcequ'ils ne trouvent pas de données. Mais il y a des données. On peut donc supposer que le filtre n'est pas pris en compte et que, n'arrivant pas à utiliser le filtre, ma requête, et donc mon graphique, n'affiche rien.

Merci en tout cas pour tes propositions. Je cherche encore une approche.
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
4 juin 2007 à 18:49
peut être qu' en cherchant du coté de la propriété
de la relation : Requete_Filtre ----> Requete_Données
tu peux trouver la solution.

 
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
4 juin 2007 à 19:07
permets moi néanmoins de relever quelques contradictions


je te cite :
...mon problème est qu'il y a toujours des résultats
lorsqu'il prend en compte mon filtre,


#   or ce n'est pas toujours le cas


#  On peut donc supposer que le filtre n'est pas pris en compte
et que, n'arrivant pas à utiliser le filtre, ma requête, et donc mon graphique,
n'affiche rien.


Pour un état, composé de 6 graphiques (donc 6 requêtes),
il arrive qu'un ou deux graphiques n'affichent rien,
parcequ'ils ne trouvent pas de données.


#   Mais il y a des données.


 
ou bien j' ai pas compris
ou bien tes suppositions sont fausses















 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Thiazung Messages postés 16 Date d'inscription jeudi 6 mars 2003 Statut Membre Dernière intervention 12 juin 2007
8 juin 2007 à 10:50
Attends, que je comprenne ta réponse :D

Nan, en fait ce que je veux dire, c'est que, si je lance chaque requête indépendamment quelque soit mon filtre j'ai des résultats. Toutes mes requêtes renvoies des résultats. Sauf que lors du traitement, il arrive que mon état n'arrive pas à charger toutes ces requêtes, ce qui fait que certains de mes graphiques sont vides.

En gros, comment faire pour forcer mon état à attendre de charger toutes ces requètes et donc d'alimenter tout ces graphiques avant de s'exporter ?
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
8 juin 2007 à 11:18
Bonjour,
et pardon pour mon errance
j' ai enfin compris le problème...



Un début de réponse ( si ce n' est l bonne )
Déplaces Set MesEtats = Nothing après le Next i






0
Thiazung Messages postés 16 Date d'inscription jeudi 6 mars 2003 Statut Membre Dernière intervention 12 juin 2007
8 juin 2007 à 13:59
Merci de ton soutien, mais ça ne change rien, l'état s'est exporté 21 fois et 3 de ses sorties ont un graphique à blanc, bien sûr pas le même et si je vérifies les valeurs, ils ont des données. Ah la la, compliqué Kro$oft
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
8 juin 2007 à 15:31
Re salut,

Oui t' as raison ...trop compliqué :-) et le soutien à lui seul
ne suffit pas...
Cependant, en reconsidérant le code, tu trouveras
certainement la solution.J' avoue que j' ai pas une réponse
directe, néanmoins j' ai quelques propositions :
1° Ouverture d' un espace de travail unique et connection
    en dehors de la boucle (une fois pour toute)
   
    Set ws = DBEngine.CreateWorkspace("JetTest", "Admin", "")
    Set acApp = ws.OpenDatabase(BaseMaitre)
    For i = 1 To FlexGrid_Res.Rows - 1
      ....

2° declarer une collection de recordset et de MesEtats (au nombre des requetes)
    ça t' évitera d' écraser les uns par les autres...

 Ceci étant, virer tout ce qui est fermeture et deconnection...

Encore une fois désolé de n' avoir pu t' aider...
Bonne continuation

0
Thiazung Messages postés 16 Date d'inscription jeudi 6 mars 2003 Statut Membre Dernière intervention 12 juin 2007
8 juin 2007 à 17:10
Thanx, je vais regarder ça, je me disais "si j'ouvre et ferme à chaque fois, peut-être vide-t-il sa mémoire, ça permettra peut-être de ne plus avoir de pertes", ça a pas l'air d'être ça.
Je vais manipuler tout ça et voir pour la suite.

Bon weekend et merci bien en tout cas

ps : Je repasserais dès lundi que je trouve ou pas :P
0