none
Access et Date Anniversaire RRS feed

  • Question

  • Bonjour,

    Je rencontre le problème suivant : Je veux extraire de ma base access les concerts ayant eu lieu le jour X. (Principe de l'anniversaire). Je souhaite sortir un etat de ce resultat. (l'etat fonctionne tres bien en autonome. Quand je l'appelle depuis VB sans modifier la clause where) Je voulais preparer, par exemple, 5 etats en avance. J'ai donc ecrit ce code :

    Dim DateJour As String
            Dim I As Integer = 1
            Dim strDB As String = CheminBase & "JH.mdb"
            Dim RptNom As String
            For I = 1 To 5
                DateJour = I
                If DateJour < 10 Then DateJour = "0" & DateJour
                Dim Mois As String = Month(Date.Today)
                If Mois < 10 Then Mois = "0" & Mois
                Dim Annee As String = Year(Date.Today)
                DateJour = DateJour & Mois & Annee
                ClauseWhere = "Format([con_date],ddmm) = Format(" & DateAdd(Interval:=DateInterval.Day, I, Date.Today) & ",ddmm) order by con_Date DESC "
                RptNom = "FICHE_JOUR_CONCERT_PLAN"
                OLEOpenReport_PLAN(strDB, RptNom, AcView.acViewPreview, , ClauseWhere)
            Next
            MsgBox("Planification terminée")

    Voici le Code de la fonction OleOpenReport_PLAN

    Private Function OLEOpenReport_PLAN(ByVal strDBName As String, ByVal strRptName As String, Optional ByVal intDisplay As Access.AcView = Access.AcView.acViewNormal, Optional ByVal strFilter As String = "", Optional ByVal strWhere As String = "") As Boolean
            Dim bReturn As Boolean = True
            Try
                Dim objAccess As New Access.Application
                objAccess.OpenCurrentDatabase(strDBName, False)
                objAccess.DoCmd.OpenReport(strRptName, intDisplay, strFilter, strWhere, Access.AcWindowMode.acWindowNormal)
                objAccess.DoCmd.OutputTo(Access.AcOutputObjectType.acOutputReport, strRptName, OutputFormat:="PDF", "C:\Users\" & Environment.UserName & "\AppData\Roaming\IP-Informatique Pourrieres\J H L Appli\Editions\Editions Planifiees\" & strRptName & "_" & DateJour & ".pdf",,,,)
                objAccess.Quit(Access.AcQuitOption.acQuitSaveNone)
                objAccess = Nothing
            Catch ex As Exception
                bReturn = False
                MessageBox.Show(ex.ToString, "Erreur Automation", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            Return bReturn
        End Function


    A l'execution je recoit une erreur "Operateur absent" au niveau de la clausewhere. J'ai essaye aussi :

    ClauseWhere = "Format([con_date],ddmm) = Format(Date()+" & 1 & ",ddmm) order by con_Date DESC "

    qui me donne la meme erreur.

    Pour etre complet voici le code de la requete de l etat : 

    SELECT CONCERTS.CON_Date, VILLES.VIL_NOM
    FROM VILLES INNER JOIN CONCERTS ON VILLES.IDVILLE = CONCERTS.IDVILLE;

    Je vous remercie par arvance de votre aide.

    Thierry

    mardi 11 janvier 2022 05:48

Toutes les réponses

    Bonjour,

    La fonction DateAdd renvoie un type DateTime. Essayez les deux méthodes suivantes pour vérifier si le problème provient de la concaténation des chaînes avec la valeur de retour:

    • Essayez d'ajouter .ToString comme suit:
    ClauseWhere = "Format([con_date],ddmm) = Format(" & DateAdd(Interval:=DateInterval.Day, I, Date.Today).ToString() & ",ddmm) order by con_Date DESC "

    • Une autre façon sera de définir une variable, de mettre un point d'arrêt juste après et de vérifier quelle valeur est écrite dans la variable avant de la transmettre à DateAdd. Quelque chose comme ceci:

    Dim interval = DateAdd(Interval:=DateInterval.Day, I, Date.Today).ToString()
    ClauseWhere = "Format([con_date],ddmm) = Format(" & interval & ",ddmm) order by con_Date DESC "


    Cordialement,
    Nina


    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.



    mardi 11 janvier 2022 14:55
    Modérateur
  • Bonjour,

    Je vous remercie de votre réponse.

    Je viens d'essayer vos deux pistes. Le résultat est toujours le même. Erreur  : Opérateur absent dans l'expression.

    Avec un point d'arrêt, voici, dans l'ordre des solutions que vous me proposez le contenu de ClauseWhere. Dans les deux cas cela semble correct mais génère quand même l'erreur.

    'Format([con_date],ddmm) = Format(12/01/2022 00:00:00,ddmm) order by con_Date DESC 

    'Format([con_date],ddmm) = Format(12/01/2022 00:00:00,ddmm) order by con_Date DESC 

    mardi 11 janvier 2022 15:43
  • Personne n'a d'idee ????
    vendredi 14 janvier 2022 15:57