PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Procedure stockée et passage de paramètre
Procedure stockée et passage de paramètre
Débuté par DEKPON Renaud Silvèr, 27 sep. 2020 09:42 - 3 réponses
Membre enregistré
5 messages
Posté le 27 septembre 2020 - 09:42
Bonjour, j'utilise les procédures stockées sur windev mobile 23 actuellement. Jusque là je n'ai pas vraiment eu de difficulté a passe les paramètres et a récupérer les résultats.
Seulement depuis hier je cale sur un bugg, car oui je ne pense pas que ce soit lié à mon code.
Dans le code d'initialisation de mon projet, il y a une procédure stockée dénommée init_tables qui reçoit une chaine de caractères en paramètre.
Il fonctionnait sans problème. Hier j'ai essayé de le bidouiller pour qu'il puisse me servir a autre chose. Jai commencé par avoir des erreurs de type "Dans le cadre d'un passage par référence, un élément de type XX ne peut être converti vers le type YYY". Fatigué j'ai fini par abandonner l'idée et ramener la procédure a son état normal c'est à dire qu'il reçoit de nouveau un seul paramètre de type chaine de caractère que je lui fourni.
Mais à l'exécution la même erreur continue d'apparaitre et me dit de manière spécifique qu'un élément de type entier sur 8 octets ne peut être converti vers le type date alors que ni ma procédure stockée ni le code appelant n'utilisent de variable de type date ou entier sur 8 octets. Pour m'assurer que je n'étais toujours pas la cause, j'ai même supprimé entièrement le fait que la procédure stockée reçoive un paramètre et j'ai essayé de l'exécuter sans paramètre. Toujours la même erreur.
J'ai recompilé le projet, réparé, supprimé et déclaré les variables sans succès. Je ne sais plus quoi faire. Des idées?

Code appelant la procédure :
sId est un chaîne=SysIMEI("")

SI sId="" ALORS//Android 10 et superieur
SI HNbRec(settinglocal)=0 ALORS//On a pas encore créé d'id
sId=GénèreMotDePasse(15)
settinglocal.idgenere=sId
HAjoute(settinglocal)
SINON//on en a déjà généré
HLitPremier(settinglocal)
sId=settinglocal.idgenere
FIN
FIN

sRes est une chaîne=""
// sres=HExécuteProcédure(MaConnexion1,init_all_tables,UnicodeVersAnsi(sid))//crée toutes les tables
sRes=HExecuteProcedure(MaConnexion1,init_all_tables,UnicodeVersAnsi(sId))






Code de ma procedure stockée :
Procedure init_all_tables(Sadressemac est un chaîne)
D1,d2 sont des Dates
D1=DateSys()
d2=D1..Jour+1
//DDATE EST UNE DATE=ChaîneVersDate(sDa,"JJ/MM/AAAA")
HCréationSiInexistant("*")
//Today
HExécuteRequête(REQ_verifie_exec_tache_planifiee,hRequêteDéfaut,D1)
SI HNbRec(REQ_verifie_exec_tache_planifiee)=0 ALORS//C'est le premier lancement de la journée. On crée les tâches
declenche_creation_des_taches_journalieres(D1)
FIN
//Demain
HExécuteRequête(REQ_verifie_exec_tache_planifiee,hRequêteDéfaut,d2)
SI HNbRec(REQ_verifie_exec_tache_planifiee)=0 ALORS//C'est le premier lancement de la journée. On crée les tâches
declenche_creation_des_taches_journalieres(d2)
FIN
RENVOYER VERIFIE_premier_demarrage()+RC+verifie_adresse_mac(Sadressemac)
Membre enregistré
5 messages
Posté le 27 septembre 2020 - 10:11
Honte de le dire, le problème était finalement a mon niveau. Dans le code de la procédure stockée. ligne
D2=D1..jour+1
Apparemment ce type d'incrémentation n'est pas encore disponible en procédure stockée.

Mais après PC soft aurait pu trouver un meilleur moyen de formuler cette erreur plutôt que de faire croire que l'erreur était au niveau du passage de paramètres.
Membre enregistré
3 344 messages
Popularité : +93 (137 votes)
Posté le 27 septembre 2020 - 22:49
C'est aussi la propriété .. jour .. mois et .. année
Qui sont mal géré sous Android
J'ai remplacé cela par une procédure globale
Pour les incrémentation je passe par des entier ( date vers entier)
Puis incrémentation
Puis entier vers date
Cela est plus sûr et bug moins
Posté le 02 octobre 2020 - 02:22
Wep c'est une bonne idée.