Ajouter écart date dans expression SQL (AjouteràWhere )
Le
lion.eric
Bonsoir, le code qui suit fonctionne à merveille mais j'ai un gros
problème
J'aimerai ajouter une clause AjouteràWhere qui prendrait les champs
DATEDEBUT et DATEFIN de mon formulaire et qui irait comparer au champ
DATE_RETOUR de ma requête
Mais autant ajouter un champs comme plus bas ne me pose aucun problème
que là je n'ai sait comment faire mon AjouteràWhere
Dim MonSQL1 As String, MonCritère1 As String, MonJeuEnreg1 As
String
Dim NbrArg1 As Integer
Dim tmp1 As Variant
' Initialise le compteur d'argument.
NbrArg1 = 0
' Initialise l'instruction SELECT.
MonSQL1 = "SELECT * FROM [Req_Rech1] WHERE "
MonCritère1 = ""
' Utilise les valeurs entrées dans les zones de texte de l'en-
tête de formulaire
' pour créer les critères de la clause WHERE.
AjouteràWhere [RA], "[RA]", MonCritère1, NbrArg1
AjouteràWhere [provenance], "[provenance]", MonCritère1, NbrArg1
'**********************
C'est là que je ne sais pas comment mettre mon AjouteràWhere
etc 'AjouteràWhere le champs de la requete [DATE_RETOUR] à comparer
avec [Forms]![fm_recherche]![DATEDEBUT] And [Forms]![fm_recherche]!
[DATEFIN
'*********************
MonCritère1, NbrArg1
' vous pouvez ajouter d'autres conditions avec le m^me type de
ligne ci-dessus
' Si aucun critère n'est spécifié, renvoie tous les
enregistrements.
If MonCritère1 = "" Then
MonCritère1 = "True"
End If
' Crée l'instruction SELECT.
MonJeuEnreg1 = MonSQL1 & MonCritère1
' Défini la propriété RecordSource du Sous-Formulaire Recherche
Multi SF
Me![fm_rechercheSF1].Form.RecordSource = MonJeuEnreg1
' Si aucun enregistrement ne correspond aux critères, affiche un
message.
' Active le bouton Effacer.
If Me![fm_rechercheSF1].Form.RecordsetClone.RecordCount = 0 Then
MsgBox "Aucun enregistrement ne correspond aux critères
introduits.", 48, "Aucun enregistrements trouvés"
Me!effacer1.SetFocus
Else
' Active le contrôle dans la section détail.
tmp1 = ActiveContrôles("Detail", True)
' Place le point d'insertion dans le Sous-Formulaire
F_Recherche Multi SF
Me![fm_rechercheSF1].SetFocus
End If
Merci beaucoup
problème
J'aimerai ajouter une clause AjouteràWhere qui prendrait les champs
DATEDEBUT et DATEFIN de mon formulaire et qui irait comparer au champ
DATE_RETOUR de ma requête
Mais autant ajouter un champs comme plus bas ne me pose aucun problème
que là je n'ai sait comment faire mon AjouteràWhere
Dim MonSQL1 As String, MonCritère1 As String, MonJeuEnreg1 As
String
Dim NbrArg1 As Integer
Dim tmp1 As Variant
' Initialise le compteur d'argument.
NbrArg1 = 0
' Initialise l'instruction SELECT.
MonSQL1 = "SELECT * FROM [Req_Rech1] WHERE "
MonCritère1 = ""
' Utilise les valeurs entrées dans les zones de texte de l'en-
tête de formulaire
' pour créer les critères de la clause WHERE.
AjouteràWhere [RA], "[RA]", MonCritère1, NbrArg1
AjouteràWhere [provenance], "[provenance]", MonCritère1, NbrArg1
'**********************
C'est là que je ne sais pas comment mettre mon AjouteràWhere
etc 'AjouteràWhere le champs de la requete [DATE_RETOUR] à comparer
avec [Forms]![fm_recherche]![DATEDEBUT] And [Forms]![fm_recherche]!
[DATEFIN
'*********************
MonCritère1, NbrArg1
' vous pouvez ajouter d'autres conditions avec le m^me type de
ligne ci-dessus
' Si aucun critère n'est spécifié, renvoie tous les
enregistrements.
If MonCritère1 = "" Then
MonCritère1 = "True"
End If
' Crée l'instruction SELECT.
MonJeuEnreg1 = MonSQL1 & MonCritère1
' Défini la propriété RecordSource du Sous-Formulaire Recherche
Multi SF
Me![fm_rechercheSF1].Form.RecordSource = MonJeuEnreg1
' Si aucun enregistrement ne correspond aux critères, affiche un
message.
' Active le bouton Effacer.
If Me![fm_rechercheSF1].Form.RecordsetClone.RecordCount = 0 Then
MsgBox "Aucun enregistrement ne correspond aux critères
introduits.", 48, "Aucun enregistrements trouvés"
Me!effacer1.SetFocus
Else
' Active le contrôle dans la section détail.
tmp1 = ActiveContrôles("Detail", True)
' Place le point d'insertion dans le Sous-Formulaire
F_Recherche Multi SF
Me![fm_rechercheSF1].SetFocus
End If
Merci beaucoup

Poser une question


Je voulais bien sûr dire
AjouteràWhere le champs de la requete [DATE_RETOUR] between [Forms]!
[fm_recherche]![DATEDEBUT] And [Forms]![fm_recherche]![DATEFIN ]
Mais je ne sais pas comment le formuler pour l'écart de date
Merci à tous et toutes
Max
Private Sub AjouteràWhere(ValeurChamp As Variant, NomChamp As String,
MonCritère As String, NbrArg As Integer)
' Crée le critère pour la clause WHERE.
If ValeurChamp <> "" Then
' Ajoute "et" si aucun critère existe.
If NbrArg > 0 Then
MonCritère = MonCritère & " And "
End If
' Ajoute le critère au critère existant.
' Entoure la valeur de ValeurChamp et l'astérisque de points
d'exclamations.
MonCritère = (MonCritère & NomChamp & " Like " & Chr(39) &
ValeurChamp & Chr(42) & Chr(39))
' Augmente le compteur d'argument.
NbrArg = NbrArg + 1
End If
End Sub
Je comprend pas comment cela peut fonctionner <:-)
Les variables déclarées dans l'appel de la sub sont locales a celle-ci.
Donc tu ne reccupere jamais en global Moncritére et NbrArg.
Si avant l'appel a ajouteàwhere Nbrarg1=0, il reste =0 aprés. Idem pour
moncritere1 : vide avant, vide aprés.
Si je peux me permettre :
On remplace Sub AjouteràWhere par
Private Function AjouteràWhere(ValeurChamp As Variant, NomChamp As
String, MonCritère As String, NbrArg As Integer) as string
Dans le code Principal
.
.
.
Moncritére1=AjouteràWhere ([RA], "[RA]", MonCritère1, NbrArg1)
If [RA]<>"" then NbrArg1=NbrArg+1
MonCritére1=AjouteràWhere ([provenance], "[provenance]", MonCritère1,
NbrArg1)
If [Provenance]<>"" then NbrArg1=NbrArg+1
.
.
.
'Pour les dates fait un traitement à part
Moncritere1=MonCtritere1 & "[Date Retour] between #" & Format(
[Forms]![fm_recherche]![DATEDEBUT],"yyyymmdd") & "# And #" &
Format([Forms]![fm_recherche]!
[DATEFIN],"yyyymmdd") & "# "
@Suivre...