PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV Mobile 2025 → Modification impossible au delà de 20 enregistrements
Modification impossible au delà de 20 enregistrements
Started by NBV63, May, 28 2025 11:21 AM - 17 replies
Registered member
4 messages
Posted on May, 28 2025 - 11:21 AM
Bonjour,
J'ai migré mon appli mobile (créée sous WM24 et non 2024) en version WM2025).
Lorsque j'enregistre des données, il m'est possible de les modifier (j'utilise Henregistre) s'il y en a moins de 20.
Au 21ème, aucune modification n'est enregistrée.

Sous la version WM24, cela fonctionnait tout à fait.
Les utilisateurs en saisissent en moyenne une centaine.
Je suis donc bloquée pour leur fournir les évolutions faites à cause de ce dysfonctionnement !

Quelqu'un aurait-il une idée ?
Existe-t-il dorénavant une limite en lien direct sur fichier HFSQL ?

Par avance, merci pour vos retours.
Posted on May, 28 2025 - 12:12 PM
NBV63 a écrit :
Bonjour,
J'ai migré mon appli mobile (créée sous WM24 et non 2024) en version WM2025).
Lorsque j'enregistre des données, il m'est possible de les modifier (j'utilise Henregistre) s'il y en a moins de 20.
Au 21ème, aucune modification n'est enregistrée.

Sous la version WM24, cela fonctionnait tout à fait.
Les utilisateurs en saisissent en moyenne une centaine.
Je suis donc bloquée pour leur fournir les évolutions faites à cause de ce dysfonctionnement !

Quelqu'un aurait-il une idée ?
Existe-t-il dorénavant une limite en lien direct sur fichier HFSQL ?

Par avance, merci pour vos retours.


A supposer que le nom de ton fichier de données se nomme Factures

Utilise plutôt

Factures..Enregistre()
Posted on May, 28 2025 - 3:42 PM
Polop a écrit :
NBV63 a écrit :
Bonjour,
J'ai migré mon appli mobile (créée sous WM24 et non 2024) en version WM2025).
Lorsque j'enregistre des données, il m'est possible de les modifier (j'utilise Henregistre) s'il y en a moins de 20.
Au 21ème, aucune modification n'est enregistrée.

Sous la version WM24, cela fonctionnait tout à fait.
Les utilisateurs en saisissent en moyenne une centaine.
Je suis donc bloquée pour leur fournir les évolutions faites à cause de ce dysfonctionnement !

Quelqu'un aurait-il une idée ?
Existe-t-il dorénavant une limite en lien direct sur fichier HFSQL ?

Par avance, merci pour vos retours.

A supposer que le nom de ton fichier de données se nomme Factures

Utilise plutôt

Factures..Enregistre()


Merci de m'avoir répondu.
J'ai essayé votre solution.
Mais le problème reste le même.
Les modifications sont acceptées tant qu'il y a moins de 20 enregistrements.
Et à partir du 21ème, le code est identique mais la modification ne s'enregistre pas dans le fichier HFSQL.
Ce symptôme me semble étrange!!!
Registered member
3,705 messages
Posted on May, 28 2025 - 6:04 PM
Salut
Je sais que henregistre permet de réduire le code
Mais par habitude je préfère utiliser HModifie et HAjoute
Cela oblige à mettre plus de code mais fonctionne beaucoup mieux
Registered member
1 message
Posted on May, 29 2025 - 2:37 PM
Bonjour,
Je développe une application Android avec WinDev Mobile 25 et non 2025, et je rencontre un problème lors de l'impression.
Lorsque j'appelle la fonction iImprimeEtat() pour lancer l'impression d’un état, l'application se ferme automatiquement sans message d’erreur. Elle se quitte dès que cette ligne est exécutée.
Quelqu’un a-t-il déjà rencontré ce problème ?
Y a-t-il une configuration particulière à faire pour que l’impression fonctionne correctement sous Android ?
Merci d’avance pour votre aide.
Message modified, May, 29 2025 - 2:52 PM
Registered member
3,705 messages
Posted on May, 29 2025 - 4:01 PM
Mina, quel est le rapport avec le sujet traité
Merci de faire un nouveau sujet
Registered member
4 messages
Posted on June, 03 2025 - 2:37 PM
Popoy a écrit :
Salut
Je sais que henregistre permet de réduire le code
Mais par habitude je préfère utiliser HModifie et HAjoute
Cela oblige à mettre plus de code mais fonctionne beaucoup mieux


Merci pour ton aide Popoy
J'utilisais initialement HModifie et Hajoute.
Et c'est suite à une suggestion que j'ai essayé HEnregistre.

L'un comme l'autre cela fonctionne pour les 20 premiers enregistrements mais plus au-delà.
Je ne comprends pas pourquoi et surtout cela fonctionnait parfaitement avant la migration en WM2025.
Mon appli est devenu inutilisable par les usagers sans résoudre ce problème.
Quelqu'un aurait-il une piste ?
Registered member
487 messages
Posted on June, 03 2025 - 2:51 PM
Bonjour,

Serait-il possible de nous donner plus de détails "techniques" :
- Est-ce que HEnregistre() renvoie une erreur ?
- Si non, quelle est la valeur de la clé unique (identifiant automatique) du nouvel enregistrement ?
- Quel type de base de données (SQLite, HF local, HFSQL ?)

Pourriez-vous également fournir le bout de code où est utilisé HEnregistre(), pour mieux contextualiser le problème que vous rencontrez ?
Registered member
3,705 messages
Posted on June, 03 2025 - 5:07 PM
NBV63 a écrit :
Popoy a écrit :
Salut
Je sais que henregistre permet de réduire le code
Mais par habitude je préfère utiliser HModifie et HAjoute
Cela oblige à mettre plus de code mais fonctionne beaucoup mieux


Merci pour ton aide Popoy
J'utilisais initialement HModifie et Hajoute.
Et c'est suite à une suggestion que j'ai essayé HEnregistre.

L'un comme l'autre cela fonctionne pour les 20 premiers enregistrements mais plus au-delà.
Je ne comprends pas pourquoi et surtout cela fonctionnait parfaitement avant la migration en WM2025.
Mon appli est devenu inutilisable par les usagers sans résoudre ce problème.
Quelqu'un aurait-il une piste ?

Salut
Dans ce cas c'est sûrement un bug
Normalement tu as une sauvegarde
Je te conseille de revenir a ton ancienne version
Posted on June, 04 2025 - 1:48 PM
bchanudet a écrit :
Bonjour,

Serait-il possible de nous donner plus de détails "techniques" :
- Est-ce que HEnregistre() renvoie une erreur ?
- Si non, quelle est la valeur de la clé unique (identifiant automatique) du nouvel enregistrement ?
- Quel type de base de données (SQLite, HF local, HFSQL ?)

Pourriez-vous également fournir le bout de code où est utilisé HEnregistre(), pour mieux contextualiser le problème que vous rencontrez ?


Bonjour et merci de bien vouloir m'aider.
le traitement se trouve sur une fenêtre fiche liée en direct au fichier HFSQL.
Et le code de validation de la modification est :
"EcranVersFichier()
HEnregistre(T_Classement)
FenRafraîchissementVisible(FEN_Tel_Table_T_Classement,Faux)
Ferme()"
La clé unique est composée de la date et du numéro d'enregistrement.

Au peur de me répéter, cela fonctionne uniquement si mon fichier HFSQL contient moins de 21 lignes.
C'est très étrange!
Registered member
487 messages
Posted on June, 04 2025 - 2:28 PM
Bonjour,

C'est déjà un peu mieux, mais il manque encore des informations.

- On parle de quelle plateforme : Android ou iOS ?

- Est-ce que la propriété T_Classement..NouvelEnregistrement est bien à Vrai avant d'enregistrer, pour s'assurer que HEnregistre() va bien faire un ajout et non pas une modification d'une ligne existante.

- Dans votre code vous ne vérifiez pas le retour de HEnregistre(). Est-ce que ce code affiche quelque chose quand vous essayez d'enregistrer ?
SI PAS HEnregistre(T_Classement) ALORS
Erreur("Erreur HEnregistre()", HErreurInfo(hErrComplet))
FIN
Posted on June, 04 2025 - 2:39 PM
bchanudet a écrit :
Bonjour,

C'est déjà un peu mieux, mais il manque encore des informations.

- On parle de quelle plateforme : Android ou iOS ?

- Est-ce que la propriété T_Classement..NouvelEnregistrement est bien à Vrai avant d'enregistrer, pour s'assurer que HEnregistre() va bien faire un ajout et non pas une modification d'une ligne existante.

- Dans votre code vous ne vérifiez pas le retour de HEnregistre(). Est-ce que ce code affiche quelque chose quand vous essayez d'enregistrer ?
SI PAS HEnregistre(T_Classement) ALORS
Erreur("Erreur HEnregistre()", HErreurInfo(hErrComplet))
FIN



Je suis sous Android.
Je n'ai pas vérifié la propriété de NouvelEnregistrement car je suis sur la fiche d'un enregistrement existant en accès direct pour le modifier.
Je vais ajouter votre code et tester, je vous tiendrai au courant au plus vite.
Merci encore de votre aide !
Posted on June, 04 2025 - 3:45 PM
bchanudet a écrit :
Bonjour,

C'est déjà un peu mieux, mais il manque encore des informations.

- On parle de quelle plateforme : Android ou iOS ?

- Est-ce que la propriété T_Classement..NouvelEnregistrement est bien à Vrai avant d'enregistrer, pour s'assurer que HEnregistre() va bien faire un ajout et non pas une modification d'une ligne existante.

- Dans votre code vous ne vérifiez pas le retour de HEnregistre(). Est-ce que ce code affiche quelque chose quand vous essayez d'enregistrer ?
SI PAS HEnregistre(T_Classement) ALORS
Erreur("Erreur HEnregistre()", HErreurInfo(hErrComplet))
FIN


L'erreur indique un doublon sur ma clé unique avec le n°1 lorsque je modifie le n°21.
Idem avec tous les enregistrements qui suivent.
Ma clé est unique de type entier 999 999 999 et et la modification ne porte pas sur ce numéro mais un autre champ.

Que puis-je faire selon vous pour résoudre ce problème ?
Registered member
487 messages
Posted on June, 04 2025 - 4:20 PM
Des pistes :

Si votre identifiant est assigné à un champ de saisie, il convient de vérifier aussi le masque de ce champ de saisie, car il pourrait impacter la valeur de votre enregistrement lors du retour avec EcranVersFichier(). Si non, il faudrait vérifier que d'autres traitements dans la fenêtre ne viennent pas réinitialiser l'enregistrement T_Classement sur lequel se base la fiche initialement (par exemple, un HLitRecherche(T_Classement) pour trouver un classement lié, ce genre de chose) ;

Vous indiquiez que la clé était composée de la date (donc je suppose 20250604) + un numéro d'enregistrement, attention à ce que le nombre obtenu ne dépasse pas les capacités de l'entier sur 4 octets (proposé par défaut dans le cadre d'un masque 999 999 999). Pour exemple :
sClé est une chaîne = DateSys() + "099"
// => 20250604099

nTest4 est un entier = Val(sClé)
// => -1224232381 !!!
nTest8 est un entier sur 8 octets = Val(sClé)
// => 20250604099 : OK


Reste une dernière chose, qui devrait être l'un des premiers réflexes si le bug est reproductible sur le simulateur Android (c'est un peu plus compliqué avec l'émulateur ou sur un appareil à part) : Lancer le code en mode GO, rajouter un stop sur l'expression "T_Classement.MaCléUnique" et voir à quelle étape cette valeur est réinitialisée.
Posted on June, 06 2025 - 9:57 AM
bchanudet a écrit :
Des pistes :

Si votre identifiant est assigné à un champ de saisie, il convient de vérifier aussi le masque de ce champ de saisie, car il pourrait impacter la valeur de votre enregistrement lors du retour avec EcranVersFichier(). Si non, il faudrait vérifier que d'autres traitements dans la fenêtre ne viennent pas réinitialiser l'enregistrement T_Classement sur lequel se base la fiche initialement (par exemple, un HLitRecherche(T_Classement) pour trouver un classement lié, ce genre de chose) ;

Vous indiquiez que la clé était composée de la date (donc je suppose 20250604) + un numéro d'enregistrement, attention à ce que le nombre obtenu ne dépasse pas les capacités de l'entier sur 4 octets (proposé par défaut dans le cadre d'un masque 999 999 999). Pour exemple :
sClé est une chaîne = DateSys() + "099"
// => 20250604099

nTest4 est un entier = Val(sClé)
// => -1224232381 !!!
nTest8 est un entier sur 8 octets = Val(sClé)
// => 20250604099 : OK


Reste une dernière chose, qui devrait être l'un des premiers réflexes si le bug est reproductible sur le simulateur Android (c'est un peu plus compliqué avec l'émulateur ou sur un appareil à part) : Lancer le code en mode GO, rajouter un stop sur l'expression "T_Classement.MaCléUnique" et voir à quelle étape cette valeur est réinitialisée.


bonjour,
Un grand MERCI encore pour votre aide !

J'ai supprimé ma clé unique sur date + numéro.
J'ai gardé ma clé unique sur id automatique que j'ai changé en entier sur 8 octet selon votre conseil.
j'ai ajouté du code pour m'affiche le contenu de cette clé lors de l'enregistrement.
nTest4 est un entier = Val(T_Classement.Clef_U)
Info(nTest4)
nTest8 est entier sur 8 octet = Val(T_Classement.Clef_U)
Info(nTest8)
Et chose étrange, elle reste à 0 à la fois lorsque la modification est faite que lorsqu'elle n'est pas faite.

J'ai fait le test sur l'emulateur du windev et cela fonctionne parfaitement au-delà de 20enregistrements.
Et toujours pas sur mon appareil mobile.

Je ne peux plus revenir à ma version sous WM 24 car j'ai apporté des évolutions sur d'autres fenêtres du projet.
Registered member
487 messages
Posted on June, 06 2025 - 4:36 PM
Bonjour,

Avec vos modifications, sur votre mobile, l'erreur sur le HEnregistre() est-elle toujours la même ? Ou en est-ce une différente ? Quel est le contenu *complet* du message d'erreur ?

Si cela fonctionne sur le simulateur WinDev mais pas sur le mobile, on peut supposer que ce n'est pas le code lui-même qui est en cause mais les conditions d'exécution :
- Entre chacun de vos tests, pensez-vous à bien supprimer la base de données stockée sur l'appareil ? (par exemple en utilisant l'explorateur d'Android Studio pour supprimer tous les .fic)
- Avez-vous en initialisation du projet des appels aux fonctions HCréationSiInexistant (pour créer la base) et/ou un HModifieStructure (pour la synchroniser avec le code) ? Renvoient-ils des erreurs (de permissions, d'ouverture, d'enregistrement) ?
- Est-ce que la table T_Classement est la seule qui rencontre ce problème, ou d'autres tables ont le même souci ?

Dernière idée, si vous faites un code "bateau" de ce genre à l'ouverture de votre fenêtre, est-ce que vous avez des erreurs ?
// test d'ajout
POUR i = 1 _à_ 1000
HRAZ(T_Classement)
// Remplir juste les colonnes obligatoires
// T_Classement.test = "test"
SI PAS HAjoute(T_Classement) ALORS
Erreur("Itération: " + i, HErreurInfo(hErrComplet))
SORTIR
FIN
FIN
// test de modification
POUR TOUT T_Classement
// Modifier ici une colonne au pif
// T_Classement.test = "test2"
SI PAS HModifie(T_Classement) ALORS
Erreur("Clé: " + T_Classement.Clef_U, HErreurInfo(hErrComplet))
SORTIR
FIN
FIN
Posted on June, 26 2025 - 9:03 AM
bchanudet a écrit :
Bonjour,

Avec vos modifications, sur votre mobile, l'erreur sur le HEnregistre() est-elle toujours la même ? Ou en est-ce une différente ? Quel est le contenu *complet* du message d'erreur ?

Si cela fonctionne sur le simulateur WinDev mais pas sur le mobile, on peut supposer que ce n'est pas le code lui-même qui est en cause mais les conditions d'exécution :
- Entre chacun de vos tests, pensez-vous à bien supprimer la base de données stockée sur l'appareil ? (par exemple en utilisant l'explorateur d'Android Studio pour supprimer tous les .fic)
- Avez-vous en initialisation du projet des appels aux fonctions HCréationSiInexistant (pour créer la base) et/ou un HModifieStructure (pour la synchroniser avec le code) ? Renvoient-ils des erreurs (de permissions, d'ouverture, d'enregistrement) ?
- Est-ce que la table T_Classement est la seule qui rencontre ce problème, ou d'autres tables ont le même souci ?

Dernière idée, si vous faites un code "bateau" de ce genre à l'ouverture de votre fenêtre, est-ce que vous avez des erreurs ?
// test d'ajout
POUR i = 1 _à_ 1000
HRAZ(T_Classement)
// Remplir juste les colonnes obligatoires
// T_Classement.test = "test"
SI PAS HAjoute(T_Classement) ALORS
Erreur("Itération: " + i, HErreurInfo(hErrComplet))
SORTIR
FIN
FIN
// test de modification
POUR TOUT T_Classement
// Modifier ici une colonne au pif
// T_Classement.test = "test2"
SI PAS HModifie(T_Classement) ALORS
Erreur("Clé: " + T_Classement.Clef_U, HErreurInfo(hErrComplet))
SORTIR
FIN
FIN


Bonjour,
merci pour votre aide, désolée pour le délai de réponse.
Je n'ai pas d'erreur Henregistre avec le code :
SI PAS HEnregistre(T_Classement) ALORS
Erreur("Erreur HEnregistre()", HErreurInfo(hErrComplet))
FIN
La modification n'est pas enregistrée c'est tout toujours qu'à partir du 21è enregistrement.

Entre chaque test, je désinstalle toute l'appli. Donc je suppose que la BDD est supprimée.
J'ai bien HCréationSiInexistant dans le code init du projet, mais il ne me renvoie pas d'erreur.

J'ai testé le code POUR TOUT T_Classement
POUR TOUT T_Classement
// Modifier ici une colonne au pif
T_Classement.catégorie = "A"
SI PAS HModifie(T_Classement) alors
Erreur("Clé: " + T_Classement.IDcléclsmt, HerreurInfo(herrcomplet))
SORTIR
FIN
FIN

et il fonctionne bien sur tous les enregistrements même si demandé après en avoir saisie 20.

En faisant afficher ma clé unique à chaque demande de modification, je m'aperçois qu'il est bien positionné sur l'enregistrement en cours pour lors de l'affichage d'un des 20 premiers enregistrements. Par contre si j'en saisie 21 et que j'ouvre le fiche du 15è par exemple, ma clé est égale à 1. Et ce quelque soit celui que je choisis. et cela me modifie le n°1 et non le 15.
Existe un paramétrage de volumétrie depuis la version WM2025?
Je ne comprends pas pourquoi il perd le lien avec l'enregistrement affiché qui lui est le bon !

Uniquement la table classement rencontre ce problème sur les 2 tables à saisie > 20.
J'ai testé sur un autre modèle de téléphone, les conclusions sont les mêmes.

Je rencontre une erreur interrogative dans l'utilisation d'une de mes fonctions.
Afin de facilité les manipulations par l'utilisateur, j'ai créé un bouton avec un ''1'' et cette fonction lorsque l'utilisateur clique dessus va écrire ''1'' dans le champ de saisie.
Mon code : ClasseG(Val(MoiMême..Libellé))
et je rencontre le message :''le passage du paramètre 1 a provoqué une erreur. Dans le cas d'un passage de paramètre par référence, un élément de type 'entier sur 8 octets' ne peut pas être converti vers le type 'entier'. utiliser un paramètre local dans la procédure appelée ou passez un paramètre de type 'entier'."
Que dois-je faire ?

Cette migration m'a tout bloqué et je ne sis pas au bout de mes tests puisque cela bloque à l'étape citée ci-dessus.

Merci encore pour votre aide.
Posted on June, 26 2025 - 9:04 AM
bchanudet a écrit :
Bonjour,

Avec vos modifications, sur votre mobile, l'erreur sur le HEnregistre() est-elle toujours la même ? Ou en est-ce une différente ? Quel est le contenu *complet* du message d'erreur ?

Si cela fonctionne sur le simulateur WinDev mais pas sur le mobile, on peut supposer que ce n'est pas le code lui-même qui est en cause mais les conditions d'exécution :
- Entre chacun de vos tests, pensez-vous à bien supprimer la base de données stockée sur l'appareil ? (par exemple en utilisant l'explorateur d'Android Studio pour supprimer tous les .fic)
- Avez-vous en initialisation du projet des appels aux fonctions HCréationSiInexistant (pour créer la base) et/ou un HModifieStructure (pour la synchroniser avec le code) ? Renvoient-ils des erreurs (de permissions, d'ouverture, d'enregistrement) ?
- Est-ce que la table T_Classement est la seule qui rencontre ce problème, ou d'autres tables ont le même souci ?

Dernière idée, si vous faites un code "bateau" de ce genre à l'ouverture de votre fenêtre, est-ce que vous avez des erreurs ?
// test d'ajout
POUR i = 1 _à_ 1000
HRAZ(T_Classement)
// Remplir juste les colonnes obligatoires
// T_Classement.test = "test"
SI PAS HAjoute(T_Classement) ALORS
Erreur("Itération: " + i, HErreurInfo(hErrComplet))
SORTIR
FIN
FIN
// test de modification
POUR TOUT T_Classement
// Modifier ici une colonne au pif
// T_Classement.test = "test2"
SI PAS HModifie(T_Classement) ALORS
Erreur("Clé: " + T_Classement.Clef_U, HErreurInfo(hErrComplet))
SORTIR
FIN
FIN


Bonjour,
merci pour votre aide, désolée pour le délai de réponse.
Je n'ai pas d'erreur Henregistre avec le code :
SI PAS HEnregistre(T_Classement) ALORS
Erreur("Erreur HEnregistre()", HErreurInfo(hErrComplet))
FIN
La modification n'est pas enregistrée c'est tout toujours qu'à partir du 21è enregistrement.

Entre chaque test, je désinstalle toute l'appli. Donc je suppose que la BDD est supprimée.
J'ai bien HCréationSiInexistant dans le code init du projet, mais il ne me renvoie pas d'erreur.

J'ai testé le code POUR TOUT T_Classement
POUR TOUT T_Classement
// Modifier ici une colonne au pif
T_Classement.catégorie = "A"
SI PAS HModifie(T_Classement) alors
Erreur("Clé: " + T_Classement.IDcléclsmt, HerreurInfo(herrcomplet))
SORTIR
FIN
FIN

et il fonctionne bien sur tous les enregistrements même si demandé après en avoir saisie 20.

En faisant afficher ma clé unique à chaque demande de modification, je m'aperçois qu'il est bien positionné sur l'enregistrement en cours pour lors de l'affichage d'un des 20 premiers enregistrements. Par contre si j'en saisie 21 et que j'ouvre le fiche du 15è par exemple, ma clé est égale à 1. Et ce quelque soit celui que je choisis. et cela me modifie le n°1 et non le 15.
Existe un paramétrage de volumétrie depuis la version WM2025?
Je ne comprends pas pourquoi il perd le lien avec l'enregistrement affiché qui lui est le bon !

Uniquement la table classement rencontre ce problème sur les 2 tables à saisie > 20.
J'ai testé sur un autre modèle de téléphone, les conclusions sont les mêmes.

Je rencontre une erreur interrogative dans l'utilisation d'une de mes fonctions.
Afin de facilité les manipulations par l'utilisateur, j'ai créé un bouton avec un ''1'' et cette fonction lorsque l'utilisateur clique dessus va écrire ''1'' dans le champ de saisie.
Mon code : ClasseG(Val(MoiMême..Libellé))
et je rencontre le message :''le passage du paramètre 1 a provoqué une erreur. Dans le cas d'un passage de paramètre par référence, un élément de type 'entier sur 8 octets' ne peut pas être converti vers le type 'entier'. utiliser un paramètre local dans la procédure appelée ou passez un paramètre de type 'entier'."
Que dois-je faire ?

Cette migration m'a tout bloqué et je ne sis pas au bout de mes tests puisque cela bloque à l'étape citée ci-dessus.

Merci encore pour votre aide.