Thiazung
Messages postés16Date d'inscriptionjeudi 6 mars 2003StatutMembreDernière intervention12 juin 2007
-
4 juin 2007 à 14:45
Thiazung
Messages postés16Date d'inscriptionjeudi 6 mars 2003StatutMembreDernière intervention12 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 & "", CheminUser), CheminDefaut) & NomFichier & ".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
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 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.
Thiazung
Messages postés16Date d'inscriptionjeudi 6 mars 2003StatutMembreDernière intervention12 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.
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Thiazung
Messages postés16Date d'inscriptionjeudi 6 mars 2003StatutMembreDernière intervention12 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 ?
Thiazung
Messages postés16Date d'inscriptionjeudi 6 mars 2003StatutMembreDernière intervention12 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
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 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
Thiazung
Messages postés16Date d'inscriptionjeudi 6 mars 2003StatutMembreDernière intervention12 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