Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ajouter écart date dans expression SQL (AjouteràWhere )

3 réponses
Avatar
lion.eric
Bonsoir, le code qui suit fonctionne =E0 merveille mais j'ai un gros
probl=E8me
J'aimerai ajouter une clause Ajouter=E0Where qui prendrait les champs
DATEDEBUT et DATEFIN de mon formulaire et qui irait comparer au champ
DATE_RETOUR de ma requ=EAte

Mais autant ajouter un champs comme plus bas ne me pose aucun probl=E8me
que l=E0 je n'ai sait comment faire mon Ajouter=E0Where ...



Dim MonSQL1 As String, MonCrit=E8re1 As String, MonJeuEnreg1 As
String
Dim NbrArg1 As Integer
Dim tmp1 As Variant

' Initialise le compteur d'argument.
NbrArg1 =3D 0

' Initialise l'instruction SELECT.
MonSQL1 =3D "SELECT * FROM [Req_Rech1] WHERE "
MonCrit=E8re1 =3D ""
' Utilise les valeurs entr=E9es dans les zones de texte de l'en-
t=EAte de formulaire
' pour cr=E9er les crit=E8res de la clause WHERE.
Ajouter=E0Where [RA], "[RA]", MonCrit=E8re1, NbrArg1
Ajouter=E0Where [provenance], "[provenance]", MonCrit=E8re1, NbrArg1
'**********************
C'est l=E0 que je ne sais pas comment mettre mon Ajouter=E0Where

etc... 'Ajouter=E0Where le champs de la requete [DATE_RETOUR] =E0 comparer
avec [Forms]![fm_recherche]![DATEDEBUT] And [Forms]![fm_recherche]!
[DATEFIN

'*********************
MonCrit=E8re1, NbrArg1
' vous pouvez ajouter d'autres conditions avec le m^me type de
ligne ci-dessus

' Si aucun crit=E8re n'est sp=E9cifi=E9, renvoie tous les
enregistrements.
If MonCrit=E8re1 =3D "" Then
MonCrit=E8re1 =3D "True"
End If

' Cr=E9e l'instruction SELECT.
MonJeuEnreg1 =3D MonSQL1 & MonCrit=E8re1

' D=E9fini la propri=E9t=E9 RecordSource du Sous-Formulaire Recherche
Multi SF
Me![fm_rechercheSF1].Form.RecordSource =3D MonJeuEnreg1

' Si aucun enregistrement ne correspond aux crit=E8res, affiche un
message.
' Active le bouton Effacer.
If Me![fm_rechercheSF1].Form.RecordsetClone.RecordCount =3D 0 Then
MsgBox "Aucun enregistrement ne correspond aux crit=E8res
introduits.", 48, "Aucun enregistrements trouv=E9s"
Me!effacer1.SetFocus
Else
' Active le contr=F4le dans la section d=E9tail.
tmp1 =3D ActiveContr=F4les("Detail", True)
' Place le point d'insertion dans le Sous-Formulaire
F_Recherche Multi SF
Me![fm_rechercheSF1].SetFocus
End If

Merci beaucoup...

3 réponses

Avatar
lion.eric
Rebonjour....
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
Avatar
lion.eric
Zut j'ai omis de vous mettre ce p'tit bout de code

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
Avatar
Fabien
Zut j'ai omis de vous mettre ce p'tit bout de code

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
Salut,

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

' 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
Ajouteràwhere=Moncritére
End Sub


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...