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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| Private Sub RefreshQuery()
Dim SQL As String
Dim SQLTaxa As String 'chaine qui devrait récupérer les noms de taxons pour en faire des entête de colonne
Dim SQLGraph As String 'chaine qui contient la requete pour afficher le graphique adéquat
Dim SQLResume As String 'chaine qui contiendra la requête pour le récapitulatif
Dim Datemin As Date 'variable pour stocker la date minimale (la plus ancienne) du set de données crosstab
Dim Datemax As Date 'variable pour stocker la date maximale (la plus récente) du set de données crosstab
Dim AxeDesX As Object
Dim rs01 As DAO.Recordset 'recordset pour les enregistrements
Dim rs02 As DAO.Recordset 'recordset pour les enregistrements
Dim db As DAO.Database
Set db = CurrentDb
SQL = "SELECT Crstb1.NumCD, Crstb1.DateEmergence, Crstb1.[Total Of NbrSpecimenId] As Total, "
SQLGraph = "SELECT Crstb1.DateEmergence, "
Set rs01 = db.OpenRecordset("SELECT * FROM TaxEmergQry WHERE DataCollect.NumCD=" & Me.cmbNumDossier & ";", dbOpenDynaset) 'initialise le qdf avec un query adéquat
If Not rs01.EOF Then
rs01.MoveFirst
While Not rs01.EOF 'Boucle pour récupérer les noms des taxons du cas choisi dans la cmbNumDossier et les affecter après concatennement à la requête SQL
SQLTaxa = SQLTaxa & "Crstb1.[" & rs01.Fields("Taxons") & "]"
rs01.MoveNext
If Not rs01.EOF Then SQLTaxa = SQLTaxa & ", "
Wend
Else
MsgBox "Le jeu d'enregistrements est vide"
End If
'On fini de composer la chaine SQL
SQL = SQL & SQLTaxa
SQL = SQL & " FROM Crstb1 WHERE (((Crstb1.NumCD)=" & Me.cmbNumDossier & "));"
'On met a jour la liste qui reprends le tableau croisé
Me.ListNbrTaxonByDate.RowSource = SQL 'affecte le sql adéquat à la liste
Me.ListNbrTaxonByDate.ColumnCount = rs01.RecordCount + 3 'récupère le nombre d'enregistrements parcourus + 3 (pourquoi???) pour créer le nombre de colonne adéquates
Me.ListNbrTaxonByDate.ColumnWidths = "0cm;2,8cm;1,2cm;1,2cm;1,2cm;1,2cm;1,2cm;1,2cm;1,2cm;1,2cm;1,2cm;1,2cm;1,2cm;1,2cm;1,2cm;1,2cm" ' défini la largeur des colonnes, il y en a plus que nécessaire pour parrer au cas où ce serait utile
Me.ListNbrTaxonByDate.Requery ' met à jour la liste
'Mets également a jour les légendes de la liste
Me.LstShort.RowSource = "SELECT [TaxEmergQry].[NumCD], [TaxEmergQry].[Taxons] FROM TaxEmergQry WHERE DataCollect.NumCD=" & Me.cmbNumDossier & ";"
Me.LstLegend.RowSource = "SELECT [TaxEmergQry].[NumCD], [TaxEmergQry].[Legende] FROM TaxEmergQry WHERE DataCollect.NumCD=" & Me.cmbNumDossier & ";"
'Mets à jour la liste qui affiche les totaux et la dates de premières émergence
'déclare la SQL adéquate
SQLResume = "SELECT [FirstDateEmergenceBySp&CD].NumCD, [FirstDateEmergenceBySp&CD].IdGenre, [FirstDateEmergenceBySp&CD].IdEspeceParrain, First([FirstDateEmergenceBySp&CD].DateEmergence) AS [Première date émergence], Sum([FirstDateEmergenceBySp&CD].NbrSpecimenId) AS [Nbr total] "
SQLResume = SQLResume & "FROM [FirstDateEmergenceBySp&CD] WHERE [FirstDateEmergenceBySp&CD].NumCD=" & Me.cmbNumDossier & " "
SQLResume = SQLResume & "GROUP BY [FirstDateEmergenceBySp&CD].NumCD, [FirstDateEmergenceBySp&CD].IdGenre, [FirstDateEmergenceBySp&CD].IdEspeceParrain "
SQLResume = SQLResume & "ORDER BY [FirstDateEmergenceBySp&CD].NumCD, [FirstDateEmergenceBySp&CD].IdGenre, [FirstDateEmergenceBySp&CD].IdEspeceParrain, First([FirstDateEmergenceBySp&CD].DateEmergence);"
Me.LstResume.RowSource = SQLResume
Me.LstResume.Requery
'On s occupe du graphique
'On fini de composer la chaine SQLGraph
SQLGraph = SQLGraph & SQLTaxa
SQLGraph = SQLGraph & "FROM Crstb1 GROUP BY Crstb1.DateEmergence, "
SQLGraph = SQLGraph & SQLTaxa
SQLGraph = SQLGraph & ", Crstb1.NumCD HAVING (((Crstb1.NumCD)=" & Me.cmbNumDossier & ")) ORDER BY Crstb1.DateEmergence;"
Set rs02 = db.OpenRecordset("SELECT * FROM Crstb1 WHERE Crstb1.NumCD=" & Me.cmbNumDossier & " ORDER BY Crstb1.DateEmergence;", dbOpenDynaset) 'initialise le qdf avec un query adéquat
If Not rs02.EOF Then
rs02.MoveFirst
Datemin = CDate(rs02.Fields("DateEmergence"))
rs02.MoveLast
Datemax = CDate(rs02.Fields("DateEmergence"))
Else
MsgBox "Le jeu d'enregistrements est vide"
End If
'On met à jour le contrôle graphique
'Mise à jour de l'axe des x en fonction de la date maximale et minimale
Set AxeDesX = Me.CrstbChart.Object.Application.Chart.Axes(1)
AxeDesX.MinimumScale = Datemin 'nouvelle valeur mini de la date
AxeDesX.MinimumScaleIsAuto = False
AxeDesX.MaximumScale = Datemax 'nouvelle valeur maxi de la date
AxeDesX.MaximumScaleIsAuto = False
'affectation du SQL
Me.CrstbChart.RowSource = SQLGraph
Me.CrstbChart.Requery
rs01.Close
Set rs01 = Nothing
rs02.Close
Set rs02 = Nothing
Set AxeDesX = Nothing
End Sub |
Partager