PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Requete sql avec paramètre (débutant)
Requete sql avec paramètre (débutant)
Iniciado por DevPhp, 25,jul. 2020 19:01 - 5 respuestas
Miembro registrado
2 mensajes
Publicado el 25,julio 2020 - 19:01
Bonjour,

J'essaye de faire un truc qui devrais etre simple, tester si un email est deja en bdd pour continuer le traitement mais le soucis c est que j ai cette erreur :





(j'ai mi aucun controle sur la saisie c 'est jute un test le texte que je rentre en imput est : ju)

EcranVersFichier()

REQ est une Source dede Données
sMaReq est une chaîne = "SELECT Personnel.Email FROM Personnel WHERE Personnel.Email = %1"
sMaReq = ChaîneConstruit(sMaReq, SAI_Email)

SI SAI_Pass_confirm <> SAI_Pass ALORS
Info("Votre confirmation de mot de passe est différente du mot de passe")
SAI_Pass = ""
SAI_Pass_confirm = ""
SINON SI HExécuteRequêteSQL(REQ, hRequêteDéfaut, sMaReq) >= 1
IsEmailExist est un entier
IsEmailExist = HNbEnr(REQ)
SI IsEmailExist = 0 ALORS
HAjoute(Personnel)

HFerme(FEN_Test_Db)
HOuvre(FEN_Liste_des_utilisateurs)
SINON
Info("Cet Email est déjà dans notre base de donnée")
FIN
SINON
Erreur(HErreurInfo())
Info("Une erreur a été détectée pendant la récupération des données.")
FIN
Miembro registrado
948 mensajes
Publicado el 25,julio 2020 - 19:16
Bonjour
Si SAI_Email est de type chaine alors dans "SELECT Personnel.Email FROM Personnel WHERE Personnel.Email = %1" il manque les ' encadrant %1
"SELECT Personnel.Email FROM Personnel WHERE Personnel.Email = '%1'"

--
« L'erreur ne devient pas vérité parce qu'elle se propage et se multiplie ; la vérité ne devient pas erreur parce que nul ne la voit. » Gandhi
Miembro registrado
2 mensajes
Publicado el 25,julio 2020 - 19:59
oui c 'étais ça merci ;)
Miembro registrado
1.173 mensajes
Publicado el 27,julio 2020 - 13:46
Bonjour,

On peut aussi simplifier comme suit:
sMaReq est une chaîne = "SELECT Personnel.Email FROM Personnel WHERE Personnel.Email = '[%SAI_Email%]' "


à la place de :
sMaReq est une chaîne = "SELECT Personnel.Email FROM Personnel WHERE Personnel.Email = '%1' "
sMaReq = ChaîneConstruit(sMaReq, SAI_Email)


--
Thierry TILLIER
Développeur Windev-Webdev
Formation Windev : https://coursdinfo.teachable.com/
Formation bureautique : https://coursdinfo.net
Miembro registrado
213 mensajes
Publicado el 27,julio 2020 - 16:28
Bonjour,

Comme certaines de mes requêtes peuvent être utilisés à de multiples endroits dans mon code j'encapsule les paramètres.

sMaReq est une chaîne = "SELECT Personnel.Email FROM Personnel WHERE Personnel.Email = {cEmail}"

Je n'ai plus qu'à donner une valeur à cCourriel avant d'exécuter la requête.
cEmail = SAI_Email..valeur

Théoriquement, un Null renverra tous les courriels.
cCourriel = Null

Fonctionne avec de multiples paramètres si requis.
sMaReq est une chaîne
sMaReq = "SELECT Personnel.Email "
sMaReq += "FROM Personnel "
sMaReq += "WHERE Personnel.Email = {cEmail} "
sMaReq += "AND Personnel.ChampX = {cChampX} " <--- Il y a un espace à la fin de chaque ligne
sMaReq += "AND Personnel.ChampY = {cChampY} "
sMaReq += "AND Personnel.ChampZ = {cChampZ} "

J'ai découpé le code pour la lisibilité, une habitude.

Les indirections { } sont expliquées ici: https://doc.pcsoft.fr/fr-FR/?1512005

Bref, il y a plusieurs solutions à ta demande.
:)

Bon dev.

Serge

--
-----
Parfois, la logique est implacable...
Miembro registrado
213 mensajes
Publicado el 27,julio 2020 - 16:35
Foutu forum où l'on ne peut éditer ses messages...
:(

Dans cet exemple, cEmail = Null

Serge

--
-----
Parfois, la logique est implacable...