[Catégorie ENCORE modifiée .Net --> VBA] Pb de syntaxe SQL en VBA sur la sélecti

Résolu
rch05 Messages postés 32 Date d'inscription samedi 6 janvier 2007 Statut Membre Dernière intervention 5 mars 2015 - 18 sept. 2010 à 10:03
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 18 sept. 2010 à 19:07
Bonjour,
J'ai un formulaire multicritère.
Lorsque j'ai effectué un choix, j'ai plusieurs dates.
Par exemple (04/09/2010 et 13/09/2010)
Quand, je choisis la 1er date rien à l’affichage.
Mais, par contre sur la 2eme (la plus récente) l’affichage s’effectue sur le bon enregistrement

Ci-dessous le code:
Dim sql As String, ClauseHAVING As String

sql = "SELECT tblReponseGestionnaire.Causedelacause,tblReponseGestionnaire.Gestionnaire,tblReponseGestionnaire.DateReponseMail,tblReponseGestionnaire.DateEnvoiMail,tblReponseGestionnaire.DateRéception,tblReponseGestionnaire.QtéRéceptionnée,tblReponseGestionnaire.Commentaire,Sum(tblHistoriqueMàJ.QteOrdre)AS SommeDeQteOrdre" & vbCrLf

sql = sql & "FROM tblReponseGestionnaire" & vbCrLf
sql sql & "INNER JOIN tblHistoriqueMàJ ON tblReponseGestionnaire.Causedelacause tblHistoriqueMàJ.Causedelacause" & vbCrLf
sql = sql & "GROUP BY tblReponseGestionnaire.Causedelacause,tblReponseGestionnaire.Gestionnaire,tblReponseGestionnaire.DateReponseMail,tblReponseGestionnaire.DateEnvoiMail,tblReponseGestionnaire.DateRéception,tblReponseGestionnaire.QtéRéceptionnée,tblReponseGestionnaire.Commentaire"
 'Aménager la clause Where
If Not Me.chkCauseDeLaCause Then
   ClauseHAVING ClauseHAVING & "And tblReponseGestionnaire.Causedelacause '" & Me.cmbCauseDeLaCause & "' "
End If
If Not Me.chkDateCauseDeLaCause Then
    ClauseHAVING ClauseHAVING & "And tblReponseGestionnaire.DateEnvoiMail #" & Me.cmbDateCauseDeLaCause & "# "
End If
If Not Me.chkGestionnaire Then
    ClauseHAVING ClauseHAVING & "And tblReponseGestionnaire.Gestionnaire '" & Me.cmbGestionnaire & "' "
End If
Select Case Me.TypeRetard1
Case 1
ClauseHAVING = ClauseHAVING & "And tblReponseGestionnaire.DateReponseMail Is Null"
Case 2
ClauseHAVING = ClauseHAVING & "And tblReponseGestionnaire.DateReponseMail Is not Null"
End Select
If Len(ClauseHAVING) = 0 Then
GoTo AménagerLaQueueSQL
Else
   ' supprimer le 1er And et Aménager la tête de clause
   ClauseHAVING = " HAVING " & Right(ClauseHAVING, Len(ClauseHAVING) - 3)
sql = sql & ClauseHAVING
End If
AménagerLaQueueSQL:
sql = sql & ";"
'Debug.Print sql
                      
Me.Sfrm.Form.RecordSource = sql



Je pense qu'il y a un pb de format, mais je n'arrive pas à trouver la solution.
Peut-on m’expliquer d’où viens mon erreur?

Merci d'avance de votre aide

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 sept. 2010 à 13:58
Salut

Merci de faire attention à la catégorie de tes questions.

Il est étrange (voire osé) de mettre des retours à la ligne dans une requète SQL. Moi, je les supprimerais.

As-tu visualisé la chaine SQL avant de la soumettre ?
Donne-nous un aperçu d'une requète telle que tu la fabriques.

Quand tu prépares une requète sur plusieurs lignes de code VB, pense à toujours mettre un espace en fin de chaque ligne pour éviter que les textes soient collés.

Problème de date : Sujet récurant sur le forum.
As-tu fait une simple recherche de "date sql" parmi les questions du forum ?
Alors je vais répété ce qu'on répète à longueur de semaine à ceux qui ne font pas de recherche :
Dans une requète SQL, les dates sont en priorité traitées comme si elles étaient au format US, c'est à dire Mois/Jour/Année.
Ta première date, 04/09/2010, peut donc être interprétée comme cela et le compilateur s'en suffira.
Ta seconde date, 13/09/2010, ne peut pas être une date US, donc le compilateur inverse le 13 et le 9.
Il est donc important de toujours formater les dates fournies à une requète SQL pour qu'il n'y ait jamais d'ambigüité, exemple :
"...DateEnvoiMail = #" & Format(Me.cmbDateCauseDeLaCause, "mm/dd/yyyy)" & "# "
ou, à la japonaise
"...DateEnvoiMail = #" & Format(Me.cmbDateCauseDeLaCause, "yyyy/mm/dd)" & "# "

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
rch05 Messages postés 32 Date d'inscription samedi 6 janvier 2007 Statut Membre Dernière intervention 5 mars 2015
18 sept. 2010 à 17:51
Bonjour Jack,

Un grand merci de ton aide.
Ta réponse a résolue mon PB.
J'ai bien cherché sur le forum, mais avec le critère "Format date".
Je suis un jeune débutant (58ans). J'apprends, ça me passionne et ce n'est pas évident.
Pour répondre à ta question sur les retours à la ligne, c'est pour que mes requêtes soient plus lisible.
J'ai bien visualisé la chaine SQL qui fonctionnait.
J'ai pris note concernant l'espace en fin de chaque ligne.
Merci
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 sept. 2010 à 19:07
Oh, tu es juste mon ainé de quelques petites zannées ...
Content d'avoir pu te secourir.
0
Rejoignez-nous