PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Erreur avec entier sur 8 octets avec Android
Erreur avec entier sur 8 octets avec Android
Débuté par Jean Turcotte, 17 juil. 2020 20:26 - 8 réponses
Membre enregistré
1 124 messages
Popularité : +8 (8 votes)
Posté le 17 juillet 2020 - 20:26
Bonjour, j'ai un petit soucis avec mon appli.
J'ai des rubriques configurées en Numérique (Entier sur 8 octets)
J'ai configuré les propriétés de ma classe correspondante aussi en Entier sur 8 Octets.

J'utilise une requête pour compiler des données or si j'utilise
:p_nNombreItems = REQ_QteItem.Comptage_1

J'obtient toujours une erreur "Le passage du paramètre 1 a provoqué une erreur. Dans le cas d'un passage de parametre par référence, un 'entier' ne peut pas être converti vers le type 'entier sur 8 octets' alors j'ai ajouté ce code;

nInt est un entier sur 8 octets = REQ_QteItem.Comptage_1
:p_nNombreItems = nInt

Ceci fonctionne mais j'aimerais bien comprendre pourquoi le résultat de la Requete n'est pas de type entier sur 8 octets?

Merci! :)

--
Jean Turcotte
WX 25
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Membre enregistré
3 351 messages
Popularité : +93 (137 votes)
Posté le 18 juillet 2020 - 00:22
Tu n'es pas en windev mais windev mobile
Ton système d'exploitation n'est pas windows mais android
normalement il n'y a pas d'entiers sur 8 octets
tu as de la chance d'avoir pu précisé la variable
normalement ca ne fonctionne pas
Membre enregistré
1 124 messages
Popularité : +8 (8 votes)
Posté le 19 juillet 2020 - 14:40
Je comprends mais comment expliquer le fait que Windev ne me l'indique pas, il me semble que ce détail est élémentaire et que je devrais avoir des messages d'erreurs plus explicites?

Si toutes les rubriques Unique des tables sont en entier sur 8 octets? comment dois-je procéder alors dans le cas des appli Android?
Dois-je configurer ces rubriques en entier sur 4 octets?

--
Jean Turcotte
WX 25
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Membre enregistré
1 124 messages
Popularité : +8 (8 votes)
Posté le 19 juillet 2020 - 15:36
Voici ce que la doc mentionne;




Si je comprends bien la doc, Windev devrait convertir les entiers sur 8 octets en entier sur 4 octets.

Est-ce que tu me recommande alors de transférer mes Identifiants uniques en entier sur 4 octets?

--
Jean Turcotte
WX 25
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Membre enregistré
1 144 messages
Popularité : +50 (142 votes)
Posté le 19 juillet 2020 - 17:01
Bonjour Jean,

Pour éviter le problème de type dans le passage des paramètre à une procédure ou une méthode tu peux passer le paramètre par valeur (avec le mot clé LOCAL) .
j'image qu'en WINDEV MOBILE c'est la même chose.

--
Thierry TILLIER
Développeur Windev-Webdev
Formation Windev : https://coursdinfo.teachable.com/
Formation bureautique : https://coursdinfo.net
Membre enregistré
3 351 messages
Popularité : +93 (137 votes)
Posté le 20 juillet 2020 - 13:07
normalement il faut juste écrire que ta variable est un entier sans préciser le nombre d'octets
ce qui peut poser problème c'est que tu as précisé dans ta rubrique
pour plus de précisions le mieux est de contacter le support de pcsoft
Membre enregistré
1 124 messages
Popularité : +8 (8 votes)
Posté le 20 juillet 2020 - 14:09
Merci, je vais tout de même vérifier avec le mot LOCAL pour le passage de paramètre.

--
Jean Turcotte
WX 25
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Membre enregistré
1 124 messages
Popularité : +8 (8 votes)
Posté le 20 juillet 2020 - 17:37
Eureka, avec votre aide, j'ai pu corriger mon probleme. Premièrement, la configuration des membres doit indiquer des 'entiers' par défaut (j'ai donc enlevé les mentions 'sur 8 octets';
m_nNombreItemCoche est un entier 'MAPPING=nNombreItemCoche'

J'ai donc du enlevé aussi ces mentions sur les propriétés de chaque membre;
// En Lecture
Procedure PUBLIQUE p_nNombreItemCoche() : entier
RENVOYER :m_nNombreItemCoche

// Et en écriture
Procedure PUBLIQUE p_nNombreItemCoche(nValeur est un entier)
:m_nNombreItemCoche=nValeur

Puis j'ai du ajouter la mention 'LOCAL' à chacune des méthodes utilisant des entiers sur 8 octets transféré par référence;
Procedure Charge(LOCAL nID_Liste est entier) :chaîne
sRésultat est une chaîne = "OK"
HLitRecherchePremier(T_LISTES, IDListes, nID_Liste)
SI HTrouve(T_LISTES) ALORS
FichierVersMémoire(objet, T_LISTES)
SINON
sRésultat = "La liste n'existe pas"
FIN
HFerme(T_LISTES)

RENVOYER sRésultat


Et fini les ennuis
Merci à vous deux... et merci aux Forums...

--
Jean Turcotte
WX 25
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Membre enregistré
1 144 messages
Popularité : +50 (142 votes)
Posté le 21 juillet 2020 - 09:08
LOCAL indique un passage de paramètre par valeur, et non pas par référence.

--
Thierry TILLIER
Développeur Windev-Webdev
Formation Windev : https://coursdinfo.teachable.com/
Formation bureautique : https://coursdinfo.net