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

De l'utilisation des requetes en HF

9 réponses
Avatar
Roumégou Eric
Bonjour,

en préambule, bonne année à tout le monde ...

j'ai une interrogation sur l'utilisation des requetes (WDR).

Soit la requete suivante fait avec le générateur de requetes
SELECT
PIECE.IDPIECE AS IDPIECE,
PIECE.RefPiece AS RefPiece,
PIECE.DescriptifPiece AS DescriptifPiece,
PIECE.DateEmission AS DateEmission,
PIECE.ClassifDevis AS ClassifDevis,
PIECE.HostPiece AS HostPiece,
PIECE.MontantHT AS MontantHT,
PIECE.MontantTVA AS MontantTVA,
PIECE.Montant_TTC AS Montant_TTC,
PIECE.MiseenAlerte AS MiseenAlerte,
CLIENT.NomClient AS NomClient,
DOSSIER.NomDossier AS NomDossier,
PIECE.TypePiece AS TypePiece,
CLIENT.IDCLIENT AS IDCLIENT,
DOSSIER.IDDOSSIER AS IDDOSSIER
FROM
CLIENT,
DOSSIER,
PIECE
WHERE
DOSSIER.IDCLIENT = CLIENT.IDCLIENT
AND PIECE.IDDOSSIER = DOSSIER.IDDOSSIER
AND
(
PIECE.DateEmission BETWEEN {pDateDeb} AND {pDateFin}
AND PIECE.TypePiece = 1
AND CLIENT.IDCLIENT = {pIdClient}
AND DOSSIER.IDDOSSIER = {pIddossier}
)

Mes paramètres sont optionnels et cela fn comme attendu. J'ai une Zone
répétée basée sur cette requête qui se charge bien.
Mais je voudrais rajouter une recherche texte qui ferait cela (je le
pseudo-code)

si R_RECHALPHA<>"" alors
// rajouter critere
wLike="LIKE '%"+R_RECHALPHA+"%'"
critplus=" AND (CLIENT.NOMClient "+wlike+" OR DOSSIER.NomDossier
"+wlike+" OR PIECE.DescriptifPiece "+wlike+")"

fin

bref en clair, si je fais une rech texte je vais voir ds 2 ou 3 zones
si je ne retrouve pas ce texte.
Comment ajouter ces critères supplémentaires (et oprionnels) à une
requete ?
faut-il passer par un HexecuterequeteSql et charger ma ZR manuellement
?

Merci de vos réponses.

--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)

9 réponses

Avatar
Thumain Th.
Le Mon, 05 Jan 2009 09:24:37 +0100, Roumégou Eric
a écrit:

Bonjour,

en préambule, bonne année à tout le monde ...

j'ai une interrogation sur l'utilisation des requetes (WDR).

Soit la requete suivante fait avec le générateur de requetes
SELECT
PIECE.IDPIECE AS IDPIECE,
PIECE.RefPiece AS RefPiece,
PIECE.DescriptifPiece AS DescriptifPiece,
PIECE.DateEmission AS DateEmission,
PIECE.ClassifDevis AS ClassifDevis,
PIECE.HostPiece AS HostPiece,
PIECE.MontantHT AS MontantHT,
PIECE.MontantTVA AS MontantTVA,
PIECE.Montant_TTC AS Montant_TTC,
PIECE.MiseenAlerte AS MiseenAlerte,
CLIENT.NomClient AS NomClient,
DOSSIER.NomDossier AS NomDossier,
PIECE.TypePiece AS TypePiece,
CLIENT.IDCLIENT AS IDCLIENT,
DOSSIER.IDDOSSIER AS IDDOSSIER
FROM
CLIENT,
DOSSIER,
PIECE
WHERE
DOSSIER.IDCLIENT = CLIENT.IDCLIENT
AND PIECE.IDDOSSIER = DOSSIER.IDDOSSIER
AND
(
PIECE.DateEmission BETWEEN {pDateDeb} AND {pDateFin}
AND PIECE.TypePiece = 1
AND CLIENT.IDCLIENT = {pIdClient}
AND DOSSIER.IDDOSSIER = {pIddossier}
)

Mes paramètres sont optionnels et cela fn comme attendu. J'ai une Zone
répétée basée sur cette requête qui se charge bien.
Mais je voudrais rajouter une recherche texte qui ferait cela (je le
pseudo-code)

si R_RECHALPHA<>"" alors
// rajouter critere
wLike="LIKE '%"+R_RECHALPHA+"%'"
critplus=" AND (CLIENT.NOMClient "+wlike+" OR DOSSIER.NomDossier
"+wlike+" OR PIECE.DescriptifPiece "+wlike+")"

fin

bref en clair, si je fais une rech texte je vais voir ds 2 ou 3 zones si
je ne retrouve pas ce texte.
Comment ajouter ces critères supplémentaires (et oprionnels) à une
requete ?
faut-il passer par un HexecuterequeteSql et charger ma ZR manuellement ?

Merci de vos réponses.



Bonjour,

Je ne pense pas que l'on puisse modifier dynamiquement une requête Wd
(WD10 pour nous pôvres).
Dans ce cas nous faisons exactement comme tu as dit (hexecreqsql+
...+fichierverstablemem+...)


--
TT
Avatar
Yannick
Roumégou Eric a formulé ce lundi :
Bonjour,

en préambule, bonne année à tout le monde ...

j'ai une interrogation sur l'utilisation des requetes (WDR).

Soit la requete suivante fait avec le générateur de requetes
SELECT
PIECE.IDPIECE AS IDPIECE,
PIECE.RefPiece AS RefPiece,
PIECE.DescriptifPiece AS DescriptifPiece,
PIECE.DateEmission AS DateEmission,
PIECE.ClassifDevis AS ClassifDevis,
PIECE.HostPiece AS HostPiece,
PIECE.MontantHT AS MontantHT,
PIECE.MontantTVA AS MontantTVA,
PIECE.Montant_TTC AS Montant_TTC,
PIECE.MiseenAlerte AS MiseenAlerte,
CLIENT.NomClient AS NomClient,
DOSSIER.NomDossier AS NomDossier,
PIECE.TypePiece AS TypePiece,
CLIENT.IDCLIENT AS IDCLIENT,
DOSSIER.IDDOSSIER AS IDDOSSIER
FROM
CLIENT,
DOSSIER,
PIECE
WHERE
DOSSIER.IDCLIENT = CLIENT.IDCLIENT
AND PIECE.IDDOSSIER = DOSSIER.IDDOSSIER
AND
(
PIECE.DateEmission BETWEEN {pDateDeb} AND {pDateFin}
AND PIECE.TypePiece = 1
AND CLIENT.IDCLIENT = {pIdClient}
AND DOSSIER.IDDOSSIER = {pIddossier}
)

Mes paramètres sont optionnels et cela fn comme attendu. J'ai une Zone
répétée basée sur cette requête qui se charge bien.
Mais je voudrais rajouter une recherche texte qui ferait cela (je le
pseudo-code)

si R_RECHALPHA<>"" alors
// rajouter critere
wLike="LIKE '%"+R_RECHALPHA+"%'"
critplus=" AND (CLIENT.NOMClient "+wlike+" OR DOSSIER.NomDossier "+wlike+" OR
PIECE.DescriptifPiece "+wlike+")"

fin

bref en clair, si je fais une rech texte je vais voir ds 2 ou 3 zones si je
ne retrouve pas ce texte.
Comment ajouter ces critères supplémentaires (et oprionnels) à une requete ?
faut-il passer par un HexecuterequeteSql et charger ma ZR manuellement ?

Merci de vos réponses.



Bonjour (et bonne année) Eric
Je ne vois pas de problème à ta demande : Il s'agit, ni plus, ni moins,
d'un paramètre supplémentaire à ta requête.
Dans l'éditeur de requête, tu ajoutes les nouvelles conditions de
sélection. Il faut juste que, pour tes 2/3 champs, tu utilises le même
nom de paramètre (soit, par exemple, Param_RechAlpha)

Lors de l'init de ta requête, si R_RECHALPHA<>"", alors tu renseignes
Param_RechAlpha, sinon, tu lui colles Null

Yannick
Avatar
Albert
Bonjour,

Merci et meilleurs voeux également pour 2009

Personnellement je n'utilise que HexecuterequeteSql ce qui permet la
construction
dynamique du code de la requête

De cette façon je ne reprends dans le code de la requete que les
parametres nécessaires
ce qui je pense est de nature a optimiser le temps de réponse et évite
également
les problèmes éventuels avec les parametres a NULL

Cette méthode permet également de rendre le code plus clair par
l"utilisation de la fonction
ChaîneConstruit()

Exemple de code qui ne pose aucun problème

FONCTION sConstruitRequêteSQL()

LOCAL
sRubqRecherche, sCodeSQL, sCondition sont des chaînes
b_And est un booléen = Faux

// [< Conditions >]
sCodeSQL = "SELECT * FROM LigneMvt WHERE "

// [< Exercices >]
SI Taille(SAI_Exercice) = 4 ALORS
sCodeSQL += (b_And = Faux ? "" SINON " AND ") + ChaîneConstruit
("[Exercice] = '%1'", SAI_Exercice)
b_And = Vrai
FIN

// [< Journal >]
SI Taille(SAI_Jnl) = 3 ALORS
sCodeSQL += (b_And = Faux ? "" SINON " AND ") + ChaîneConstruit
("[IDJnl] = '%1'", SAI_Jnl)
b_And = Vrai
FIN

// [< Rubrique >]
SI Taille(SAI_Compte) = 2 ALORS
sCodeSQL += (b_And = Faux ? "" SINON " AND ") + ChaîneConstruit
("[IDCompte] LIKE '%1%'", SAI_Compte)
b_And = Vrai
FIN

// [< Compte >]
SI Taille(SAI_Compte) = 3 ALORS
sCodeSQL += (b_And = Faux ? "" SINON " AND ") + ChaîneConstruit
("[IDCompte] = '%1'", SAI_Compte)
b_And = Vrai
FIN

// [< Commentaire >]
SI Taille(SAI_Note) > 0 ALORS
gsOpérateurSQL = "LIKE12"
sRubqRecherche = "LigneMvt.Commentaire"
sCondition = sConstruitConditionSQL(sRubqRecherche, SAI_Note, EOT )
sCodeSQL += (b_And = Faux ? "" SINON " AND ") + sCondition
b_And = Vrai
FIN

// [< Dates >]
SI SAI_Date <> "" ALORS

SAI_Exercice = ""
sRubqRecherche = "LigneMvt.DateMvt"
setOpérateurSQL("ComboRechAvancéeTexte")

SI ChampExiste(gsNomChampDate2) ALORS
sCondition = sConstruitConditionSQL(sRubqRecherche,
{gsNomChampDate,indChamp}..Valeur,...

{gsNomChampDate2,indChamp}..Valeur)
SINON
sCondition = sConstruitConditionSQL(sRubqRecherche,
{gsNomChampDate,indChamp}..Valeur, EOT )
FIN

sCodeSQL += (b_And = Faux ? "" SINON " AND ") + sCondition
b_And = Vrai

FIN

// [< Montants >]
SI SAI_Montant > 0 ALORS

sRubqRecherche = ( SélectMvts = 1 ? "LigneMvt.MvtDébit" SINON
"LigneMvt.MvtCrédit" )

setOpérateurSQL("ComboRechAvancéeNumérique")

SI ChampExiste(gsNomChampMontant2) ALORS
sCondition = sConstruitConditionSQL(sRubqRecherche,
{gsNomChampMontant,indChamp}..Valeur,...

{gsNomChampMontant2,indChamp}..Valeur)
SINON
sCondition = sConstruitConditionSQL(sRubqRecherche,
{gsNomChampMontant,indChamp}..Valeur, EOT )
FIN

sCodeSQL += (b_And = Faux ? "" SINON " AND ") + sCondition

FIN

// [< Tri sur date Mouvts >]
sCodeSQL += " ORDER BY [DateMvt] ASC"

RENVOYER sCodeSQL

Bien cordialement

Albert
Avatar
Moua
Albert avait énoncé :
Bonjour,

Merci et meilleurs voeux également pour 2009

Personnellement je n'utilise que HexecuterequeteSql ce qui permet la
construction
dynamique du code de la requête

De cette façon je ne reprends dans le code de la requete que les
parametres nécessaires
ce qui je pense est de nature a optimiser le temps de réponse et évite
également
les problèmes éventuels avec les parametres a NULL

Cette méthode permet également de rendre le code plus clair par
l"utilisation de la fonction
ChaîneConstruit()

Exemple de code qui ne pose aucun problème

FONCTION sConstruitRequêteSQL()

LOCAL
sRubqRecherche, sCodeSQL, sCondition sont des chaînes
b_And est un booléen = Faux

// [< Conditions >]
sCodeSQL = "SELECT * FROM LigneMvt WHERE "

// [< Exercices >]
SI Taille(SAI_Exercice) = 4 ALORS
sCodeSQL += (b_And = Faux ? "" SINON " AND ") + ChaîneConstruit
("[Exercice] = '%1'", SAI_Exercice)
b_And = Vrai
FIN

// [< Journal >]
SI Taille(SAI_Jnl) = 3 ALORS
sCodeSQL += (b_And = Faux ? "" SINON " AND ") + ChaîneConstruit
("[IDJnl] = '%1'", SAI_Jnl)
b_And = Vrai
FIN

// [< Rubrique >]
SI Taille(SAI_Compte) = 2 ALORS
sCodeSQL += (b_And = Faux ? "" SINON " AND ") + ChaîneConstruit
("[IDCompte] LIKE '%1%'", SAI_Compte)
b_And = Vrai
FIN

// [< Compte >]
SI Taille(SAI_Compte) = 3 ALORS
sCodeSQL += (b_And = Faux ? "" SINON " AND ") + ChaîneConstruit
("[IDCompte] = '%1'", SAI_Compte)
b_And = Vrai
FIN

// [< Commentaire >]
SI Taille(SAI_Note) > 0 ALORS
gsOpérateurSQL = "LIKE12"
sRubqRecherche = "LigneMvt.Commentaire"
sCondition = sConstruitConditionSQL(sRubqRecherche, SAI_Note, EOT )
sCodeSQL += (b_And = Faux ? "" SINON " AND ") + sCondition
b_And = Vrai
FIN

// [< Dates >]
SI SAI_Date <> "" ALORS

SAI_Exercice = ""
sRubqRecherche = "LigneMvt.DateMvt"
setOpérateurSQL("ComboRechAvancéeTexte")

SI ChampExiste(gsNomChampDate2) ALORS
sCondition = sConstruitConditionSQL(sRubqRecherche,
{gsNomChampDate,indChamp}..Valeur,...

{gsNomChampDate2,indChamp}..Valeur)
SINON
sCondition = sConstruitConditionSQL(sRubqRecherche,
{gsNomChampDate,indChamp}..Valeur, EOT )
FIN

sCodeSQL += (b_And = Faux ? "" SINON " AND ") + sCondition
b_And = Vrai

FIN

// [< Montants >]
SI SAI_Montant > 0 ALORS

sRubqRecherche = ( SélectMvts = 1 ? "LigneMvt.MvtDébit" SINON
"LigneMvt.MvtCrédit" )

setOpérateurSQL("ComboRechAvancéeNumérique")

SI ChampExiste(gsNomChampMontant2) ALORS
sCondition = sConstruitConditionSQL(sRubqRecherche,
{gsNomChampMontant,indChamp}..Valeur,...

{gsNomChampMontant2,indChamp}..Valeur)
SINON
sCondition = sConstruitConditionSQL(sRubqRecherche,
{gsNomChampMontant,indChamp}..Valeur, EOT )
FIN

sCodeSQL += (b_And = Faux ? "" SINON " AND ") + sCondition

FIN

// [< Tri sur date Mouvts >]
sCodeSQL += " ORDER BY [DateMvt] ASC"

RENVOYER sCodeSQL

Bien cordialement

Albert



Bonjour

Une petite question bête :

Le mot LOCAL avant la déclaration des variables permet d'indiquer que
les variables sont locales à la procédure. Mais si on ne précise pas
LOCAL, les variables sont-elles locales ou globales ? (Personnellement
je ne précise jamais LOCAL)

Merci
Avatar
JeAn-PhI
Moua a écrit :

Bonjour

Une petite question bête :

Le mot LOCAL avant la déclaration des variables permet d'indiquer que les
variables sont locales à la procédure. Mais si on ne précise pas LOCAL, les
variables sont-elles locales ou globales ? (Personnellement je ne précise
jamais LOCAL)

Merci



dans une proc les var déclarées dans la proc sont toujours en local

--
Cordialement JeAn-PhI
Avatar
Roumégou Eric
Yannick vient de nous annoncer :


Bonjour (et bonne année) Eric
Je ne vois pas de problème à ta demande : Il s'agit, ni plus, ni moins, d'un
paramètre supplémentaire à ta requête.
Dans l'éditeur de requête, tu ajoutes les nouvelles conditions de sélection.
Il faut juste que, pour tes 2/3 champs, tu utilises le même nom de paramètre
(soit, par exemple, Param_RechAlpha)

Lors de l'init de ta requête, si R_RECHALPHA<>"", alors tu renseignes
Param_RechAlpha, sinon, tu lui colles Null

Yannick



Effectivement Yannick, cela fonctionne.

Après avoir rajouté 3 conditions paramétrées puis bidouiller avec des
parentheses et des OU, j'obtiens ce que je veux.
Merci de ta réponse.

rmq : je préfère quand meme pondre mon code sql par programmation et le
tester sous mysql, c'est plus puissant, mais bon en HF il vaut mieux
utiliser les wdr.

--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Moua
JeAn-PhI a pensé très fort :
Moua a écrit :

Bonjour

Une petite question bête :

Le mot LOCAL avant la déclaration des variables permet d'indiquer que les
variables sont locales à la procédure. Mais si on ne précise pas LOCAL, les
variables sont-elles locales ou globales ? (Personnellement je ne précise
jamais LOCAL)

Merci



dans une proc les var déclarées dans la proc sont toujours en local



Bonjour,

Ha ouf, je suis toujours en local !
Avatar
Dc
Albert vient de nous annoncer :
Bonjour,

Merci et meilleurs voeux également pour 2009

Personnellement je n'utilise que HexecuterequeteSql ce qui permet la
construction
dynamique du code de la requête

De cette façon je ne reprends dans le code de la requete que les
parametres nécessaires
ce qui je pense est de nature a optimiser le temps de réponse et évite
également
les problèmes éventuels avec les parametres a NULL

Cette méthode permet également de rendre le code plus clair par
l"utilisation de la fonction
ChaîneConstruit()

Exemple de code qui ne pose aucun problème

FONCTION sConstruitRequêteSQL()

LOCAL
sRubqRecherche, sCodeSQL, sCondition sont des chaînes
b_And est un booléen = Faux

// [< Conditions >]
sCodeSQL = "SELECT * FROM LigneMvt WHERE "

// [< Exercices >]
SI Taille(SAI_Exercice) = 4 ALORS
sCodeSQL += (b_And = Faux ? "" SINON " AND ") + ChaîneConstruit
("[Exercice] = '%1'", SAI_Exercice)
b_And = Vrai
FIN

// [< Journal >]
SI Taille(SAI_Jnl) = 3 ALORS
sCodeSQL += (b_And = Faux ? "" SINON " AND ") + ChaîneConstruit
("[IDJnl] = '%1'", SAI_Jnl)
b_And = Vrai
FIN

// [< Rubrique >]
SI Taille(SAI_Compte) = 2 ALORS
sCodeSQL += (b_And = Faux ? "" SINON " AND ") + ChaîneConstruit
("[IDCompte] LIKE '%1%'", SAI_Compte)
b_And = Vrai
FIN

// [< Compte >]
SI Taille(SAI_Compte) = 3 ALORS
sCodeSQL += (b_And = Faux ? "" SINON " AND ") + ChaîneConstruit
("[IDCompte] = '%1'", SAI_Compte)
b_And = Vrai
FIN

// [< Commentaire >]
SI Taille(SAI_Note) > 0 ALORS
gsOpérateurSQL = "LIKE12"
sRubqRecherche = "LigneMvt.Commentaire"
sCondition = sConstruitConditionSQL(sRubqRecherche, SAI_Note, EOT )
sCodeSQL += (b_And = Faux ? "" SINON " AND ") + sCondition
b_And = Vrai
FIN

// [< Dates >]
SI SAI_Date <> "" ALORS

SAI_Exercice = ""
sRubqRecherche = "LigneMvt.DateMvt"
setOpérateurSQL("ComboRechAvancéeTexte")

SI ChampExiste(gsNomChampDate2) ALORS
sCondition = sConstruitConditionSQL(sRubqRecherche,
{gsNomChampDate,indChamp}..Valeur,...

{gsNomChampDate2,indChamp}..Valeur)
SINON
sCondition = sConstruitConditionSQL(sRubqRecherche,
{gsNomChampDate,indChamp}..Valeur, EOT )
FIN

sCodeSQL += (b_And = Faux ? "" SINON " AND ") + sCondition
b_And = Vrai

FIN

// [< Montants >]
SI SAI_Montant > 0 ALORS

sRubqRecherche = ( SélectMvts = 1 ? "LigneMvt.MvtDébit" SINON
"LigneMvt.MvtCrédit" )

setOpérateurSQL("ComboRechAvancéeNumérique")

SI ChampExiste(gsNomChampMontant2) ALORS
sCondition = sConstruitConditionSQL(sRubqRecherche,
{gsNomChampMontant,indChamp}..Valeur,...

{gsNomChampMontant2,indChamp}..Valeur)
SINON
sCondition = sConstruitConditionSQL(sRubqRecherche,
{gsNomChampMontant,indChamp}..Valeur, EOT )
FIN

sCodeSQL += (b_And = Faux ? "" SINON " AND ") + sCondition

FIN

// [< Tri sur date Mouvts >]
sCodeSQL += " ORDER BY [DateMvt] ASC"

RENVOYER sCodeSQL

Bien cordialement

Albert



plus clair ?????
juste pour toi alors ... :-)))

--
-------------------------------------------------------------
www.ctc-soft.com
Gestion biblo-documentaire (free-share)
Comptabilité shareware
Logiciels de Gestion de saisie terrain
Spécialisé Tournées de boulangers
-------------------------------------------------------------
Avatar
Roumégou Eric
Dc a écrit :
Albert vient de nous annoncer :
Bonjour,

Merci et meilleurs voeux également pour 2009

Personnellement je n'utilise que HexecuterequeteSql ce qui permet la
construction
dynamique du code de la requête

De cette façon je ne reprends dans le code de la requete que les
parametres nécessaires
ce qui je pense est de nature a optimiser le temps de réponse et évite
également
les problèmes éventuels avec les parametres a NULL

Cette méthode permet également de rendre le code plus clair par
l"utilisation de la fonction
ChaîneConstruit()

Exemple de code qui ne pose aucun problème

FONCTION sConstruitRequêteSQL()

LOCAL
sRubqRecherche, sCodeSQL, sCondition sont des chaînes
b_And est un booléen = Faux

// [< Conditions >]
sCodeSQL = "SELECT * FROM LigneMvt WHERE "

// [< Exercices >]
SI Taille(SAI_Exercice) = 4 ALORS
sCodeSQL += (b_And = Faux ? "" SINON " AND ") + ChaîneConstruit
("[Exercice] = '%1'", SAI_Exercice)
b_And = Vrai
FIN

// [< Journal >]
SI Taille(SAI_Jnl) = 3 ALORS
sCodeSQL += (b_And = Faux ? "" SINON " AND ") + ChaîneConstruit
("[IDJnl] = '%1'", SAI_Jnl)
b_And = Vrai
FIN

// [< Rubrique >]
SI Taille(SAI_Compte) = 2 ALORS
sCodeSQL += (b_And = Faux ? "" SINON " AND ") + ChaîneConstruit
("[IDCompte] LIKE '%1%'", SAI_Compte)
b_And = Vrai
FIN

// [< Compte >]
SI Taille(SAI_Compte) = 3 ALORS
sCodeSQL += (b_And = Faux ? "" SINON " AND ") + ChaîneConstruit
("[IDCompte] = '%1'", SAI_Compte)
b_And = Vrai
FIN

// [< Commentaire >]
SI Taille(SAI_Note) > 0 ALORS
gsOpérateurSQL = "LIKE12"
sRubqRecherche = "LigneMvt.Commentaire"
sCondition = sConstruitConditionSQL(sRubqRecherche, SAI_Note, EOT )
sCodeSQL += (b_And = Faux ? "" SINON " AND ") + sCondition
b_And = Vrai
FIN

// [< Dates >]
SI SAI_Date <> "" ALORS

SAI_Exercice = ""
sRubqRecherche = "LigneMvt.DateMvt"
setOpérateurSQL("ComboRechAvancéeTexte")

SI ChampExiste(gsNomChampDate2) ALORS
sCondition = sConstruitConditionSQL(sRubqRecherche,
{gsNomChampDate,indChamp}..Valeur,...

{gsNomChampDate2,indChamp}..Valeur)
SINON
sCondition = sConstruitConditionSQL(sRubqRecherche,
{gsNomChampDate,indChamp}..Valeur, EOT )
FIN

sCodeSQL += (b_And = Faux ? "" SINON " AND ") + sCondition
b_And = Vrai

FIN

// [< Montants >]
SI SAI_Montant > 0 ALORS

sRubqRecherche = ( SélectMvts = 1 ? "LigneMvt.MvtDébit" SINON
"LigneMvt.MvtCrédit" )

setOpérateurSQL("ComboRechAvancéeNumérique")

SI ChampExiste(gsNomChampMontant2) ALORS
sCondition = sConstruitConditionSQL(sRubqRecherche,
{gsNomChampMontant,indChamp}..Valeur,...

{gsNomChampMontant2,indChamp}..Valeur)
SINON
sCondition = sConstruitConditionSQL(sRubqRecherche,
{gsNomChampMontant,indChamp}..Valeur, EOT )
FIN

sCodeSQL += (b_And = Faux ? "" SINON " AND ") + sCondition

FIN

// [< Tri sur date Mouvts >]
sCodeSQL += " ORDER BY [DateMvt] ASC"

RENVOYER sCodeSQL

Bien cordialement

Albert



plus clair ?????
juste pour toi alors ... :-)))



ben moi aussi je préfère d'habitude pondre le code SQL complêtement.
Cela fait plus de lignes mais au moins je sais exactement quel code
doit s'executer en fin de compte. En cela, je ne suis pas tributaire
d'un comportement "boîte noire" que je ne maîtrise pas. En cela, cela
devient beaucoup plus clair pour moi aussi.

Mais dans ce cas présent, je voulais justement tester la façon
"officielle" des requetes étant sur une base HF C/S. Cela marche bien
et donc je remercie tout ceux qui m'ont répondu.

... mais je garde mon baril d'Omo même contre 2 barils ;o)

--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)