PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Calcul de date dans une requete SQL
Calcul de date dans une requete SQL
Iniciado por michel.driant, 23,jun. 2019 23:01 - 5 respuestas
Miembro registrado
299 mensajes
Publicado el 23,junio 2019 - 23:01
Bonjour,

J'utilise une table de Factures et j'essaie de sélectionner les lignes dont la date de paiement est dépassée.
La table est sous HFSQL Classic.
La sélection est en SQL

J'ai écrit ceci
LC_SQL = "Select * "
LC_SQL += "from Factures "
LC_SQL += "where WL.DateDifférence(DateSys(),Factures.DateLimitePaie) > 0 "

La syntaxe tombe en erreur à l'exécution
Dans cette version, les procédures stockées ne sont pas supportées en HFSQL Classic ou HFSQL Mobile.

Comment faut-il faire dans ce cas ?

Merci d'avance.
Miembro registrado
4.361 mensajes
Publicado el 23,junio 2019 - 23:34
Bonjour,
Quel est ton code pour appeler cette requête ?
Par ailleurs, les procédures stockées n'existent qu'en mode serveur..
Un petit coup d'oeil, sur ces liens devrait débloquer la situation :
https://doc.pcsoft.fr/fr-FR/?3044080&name=hexecuterequete_fonction
https://doc.pcsoft.fr/fr-FR/?3044084&name=hexecuterequetesql_fonction
https://doc.pcsoft.fr/fr-FR/?1514082&name=Requetes_SQL_en_WLangage

--
Il y a peut être plus simple, mais, ça tourne
Mensaje modificado, 23,junio 2019 - 23:45
Miembro registrado
299 mensajes
Publicado el 24,junio 2019 - 10:08
Merci.

Dans mes applications les requetes sont toutes traitées au niveau d'un objet qui utilise HExécuteRequêteSQL et qui, en plus, gère le journal d'erreur.
En fait je n'ai qu'un HExécuteRequêteSQL pour toute l'application
Avec le dernier lien j'ai fini par trouver TO_Char qui convertit une date en format Julien.
Donc dans la clause where j'ai maintenant

WHERE TO_char(DateLimitePaie, 'J') - TO_char('2019-06-24') > xxx
Miembro registrado
4.361 mensajes
Publicado el 24,junio 2019 - 13:06
Avant tout, une petite remarque :
Si la date de paiement est dépassée, elle est antérieure à la date du jour donc la différence est négative.

Pour revenir à notre problème
J'ai testé les 2 syntaxes suivantes, elles fonctionnent. A toi de les adapter à ton objet.
sCodeRequete est une chaîne
sdREQ_LitigeFactureViaChaine est une Source dede Données

sCodeRequete=[
SELECT
Facture.AK_NoFacture AS NoFacture,
Facture.NDX_DateLimite AS LimitePaiement,
WL.DateDifférence(WL.DateDuJour(),Facture.NDX_DateLimite) AS DifferenceAvecAujourdhui
FROM
Facture
WHERE
WL.DateDifférence(WL.DateDuJour(),Facture.NDX_DateLimite) < 0
]

SI PAS HExécuteRequêteSQL(sdREQ_LitigeFactureViaChaine,hRequêteDéfaut,sCodeRequete) ALORS
Erreur("Erreur de requête")
FIN


reqREQ_FactureEnLitige est une Requête SQL =
[
SELECT
Facture.AK_NoFacture AS NoFacture,
Facture.NDX_DateLimite AS LimitePaiement,
WL.DateDifférence(WL.DateDuJour(),Facture.NDX_DateLimite) AS DifferenceAvecAujourdhui
FROM
Facture
WHERE
WL.DateDifférence(WL.DateDuJour(),Facture.NDX_DateLimite) < 0
]

SI PAS HExécuteRequêteSQL(reqREQ_FactureEnLitige) ALORS
Erreur("Erreur de requête")
FIN


--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
299 mensajes
Publicado el 24,junio 2019 - 14:50
WL.DateDifférence(WL.DateDuJour() peut fonctionner sur du HFSQL classic ?
Miembro registrado
4.361 mensajes
Publicado el 24,junio 2019 - 14:53
Oui
J'ai testé sur du Classic dans la mesure où tu étais en Classic

--
Il y a peut être plus simple, mais, ça tourne
Mensaje modificado, 24,junio 2019 - 14:53