PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Des fichiers qui ne se mettent pas à jour
Des fichiers qui ne se mettent pas à jour
Débuté par Helico57570, 14 fév. 2021 23:15 - 18 réponses
Membre enregistré
57 messages
Popularité : +3 (5 votes)
Posté le 14 février 2021 - 23:15
Bonjour à tous,
Voici mon problème...dont je ne trouve pas de solution.

En quelques mots, je génère un APK dans lequel j'intègre des fichiers de données avec des listes de médicaments.
Je mets à jour cette liste via l'émulateur, je contrôle mes fichiers fic dans le dossier EXE du projet...tout est OK!
Lors de la génération de l'APK, j'intègre les fichiers FIC,NDX et MMO...
J'installe sur mon Samsung S8...
Et là, j'ai toujours l'ancien fichier qui apparait dans mon application...les médicaments que j'ai rajouté n'y apparaissent pas.

J'ai beau supprimer l'appli du téléphone, générer l'APK et la réinstaller lors du déploiement...
Rien n'y fait, j'ai toujours l'ancien fichier dans l'appli.

On a l'impression que les fichiers sont stockés quelquepart...et que l'appli se sert de ces fichiers au lieu des nouveaux que je recompile lors de la génération du projet.

C'est à n'y rien comprendre...quelqu'un aurait-il une explication?

Merci de votre aide.
Membre enregistré
3 311 messages
Popularité : +93 (137 votes)
Posté le 15 février 2021 - 03:12
Membre enregistré
57 messages
Popularité : +3 (5 votes)
Posté le 16 février 2021 - 22:49
Merci, mais je comprends pas en quoi cela peut m'aider..
Lors de la génération j'intègre bien les fichiers avec les nouvelles données à l'intérieur.
Je supprime l'application de mon téléphone android..
Je lance l'installation mais rien n'y fait...toujours les fichier avec les anciennes données...
....je n'y comprends rien!
Membre enregistré
3 311 messages
Popularité : +93 (137 votes)
Posté le 16 février 2021 - 23:49
Le fait d'intégrer les fichiers HFSQL ne suffit pas à les mettre à jour.
C'est a toi de le faire par programmation
Membre enregistré
794 messages
Popularité : +40 (42 votes)
Posté le 17 février 2021 - 00:45
Salut. Vous devez également tenir compte de :

1) Que le dossier où vous extrayez les fichiers de la base de données est le même que celui où vous les lisez. Si le dossier utilisé se trouve dans le dossier de l'application, les fichiers sont supprimés lorsque vous désinstallez l'application. Si vous utilisez un stockage externe, la désinstallation de l'application ne supprimera pas ces fichiers.

2) Que les noms sont sensibles à la casse. J'ai dû choisir de mettre toutes les lettres en minuscules pour éviter les problèmes, car pour les fichiers androïdes, les fichiers seront différents s'ils ne correspondent pas exactement au nom.

Rubén
Membre enregistré
57 messages
Popularité : +3 (5 votes)
Posté le 17 février 2021 - 16:51
Merci Popoy...
En effet, je n'avais pas cette notion.
Je pensais que les choses se faisaient automatiquement.
N'étant pas programmeur, j'en apprends tous les jours.

Donc si je comprends bien:
-j'intègre les fichiers dans l'APK..
-J'installe ça sur mon mobile..
Et puis lors du lancement de l'appli (ou via un bouton) pour faire la mise à jour des fichiers, je fais un fextraitressource()?
Mais comment connaître l'endroit où se trouvent les fichiers fic, ndx et mmo?
Membre enregistré
57 messages
Popularité : +3 (5 votes)
Posté le 17 février 2021 - 16:53
Merci Ruben,
Encore une notion de sensibilité à la casse que je n'imaginais pas avec Android.
Plus j'avance et plus cela se complique...lol
Membre enregistré
3 311 messages
Popularité : +93 (137 votes)
Posté le 17 février 2021 - 19:29
Soit les fichiers sont dans le dossier de base de données (forte probabilité)
https://doc.pcsoft.fr/?3036001&name=frepdonnees_fonction
Soit dans un autre dossier que tu auras choisi
Liste possible
https://doc.pcsoft.fr/?1000021925
De plus, si tu changes quelques choses dans l'analyse, tu es alors obligé de le gérer
Avec le lien d'erreur synchro (voir plus haut)
Membre enregistré
57 messages
Popularité : +3 (5 votes)
Posté le 17 février 2021 - 20:14
Merci Popoy..
Je vais essayer de localiser le fichier de BDD avec la fonction frepdonnees.
Mais que me conseilles tu?
Dois faire faire cette maj à l'ouverture de la fenêtre principale et dans ce cas, le procéder va s'opérer à chaque ouverture.
Ou alors via un bouton qui lance la procédure?

En tout cas merci pour tes conseils. Je n'aurai jamais pensé à ça...
Je me demandais d'ailleurs comment il était possible de mettre à jour les données sans devoir supprimer l'application et la réinstaller.
Membre enregistré
3 311 messages
Popularité : +93 (137 votes)
Posté le 18 février 2021 - 07:16
Tu peux par exemple créer un fichier texte que tu lis en unicode ou un fichier ini
Tu y mets ton numéro de version et si tu as déjà fait la mise à jour de la base
Il faut bien sûr vérifier son existence
Si il n'existe pas c'est que la mise à jour ne s'est pas fait
Si il existe, tu vérifies que la version de l'application est supérieure
Puis tu vérifies si tu as déjà fait la mise à jour
Cela évitera de refaire la mise à jour a chaque fois.

Tu peux aussi vérifier sur un site web si il existe une nouvelle version de ton application.
Mais c'est une autre histoire
Membre enregistré
57 messages
Popularité : +3 (5 votes)
Posté le 21 février 2021 - 14:51
Hello à tous,
Je relance le post car rien n'y fait...
Toujours le même problème...pas de mise à jour...
Pourtant j'intègre bien le fichier dans l'APK...(LarEquipment.fic, ndx et mmo)





J'ai écrit le code suivant sur le clic d'un bouton:
sCheminDonnées est une chaîne ="/data/user/0/com.dominiquedonner.lar/databases" + fSep()

SI fRépertoireExiste(sCheminDonnées) ALORS
Info("Le répertoire existe")
fSupprime(sCheminDonnées + "LarEquipment.fic")
Info("fic a été supprimé")
fSupprime(sCheminDonnées + "LarEquipment.mmo")
Info("mmo a été supprimé")
fSupprime(sCheminDonnées + "LarEquipment.ndx")
Info("ndx a été supprimé")
fExtraitRessource("LarEquipment.fic", sCheminDonnées + "LarEquipment.fic")
fExtraitRessource("LarEquipment.mmo", sCheminDonnées + "LarEquipment.mmo")
fExtraitRessource("LarEquipment.ndx", sCheminDonnées + "LarEquipment.ndx")
SINON
Info("Je crée le répertoire")
fRepCrée(sCheminDonnées)
fExtraitRessource("LarEquipment.fic", sCheminDonnées + "LarEquipment.fic")
fExtraitRessource("LarEquipment.mmo", sCheminDonnées + "LarEquipment.mmo")
fExtraitRessource("LarEquipment.ndx", sCheminDonnées + "LarEquipment.ndx")
FIN


Et là, il trouve le fichier de la BDD
Supprime les tables fic, ndx et mmo
Ensuite, il extrait la ressource au bon endroit...

Et là, il utilise toujours les anciens fichiers..
J'avais rajouté un "Equipement" dans mon fic sur mon PC....et il n'apparait pas dans l'appli...
Même la combo qui me propose la liste des "Equipement"ne me propose pas les nouveautés enregistrées sur mon smartphone...

Je sèche lamentablement....
Membre enregistré
3 311 messages
Popularité : +93 (137 votes)
Posté le 21 février 2021 - 16:49
Désolé, mais rien n'est fait pour que cela fonctionne.
D'abord par défaut le répertoire de données peut être trouver par frepdonnees
Si tu met ailleurs il faut utilisé hchangerep.
De plus, tu ne ferme pas la connexion avant la suppression
Fsupprime renvoie un booléen qui n'est pas vérifié
Donc rien ne prouve qu'il fonctionne
Bien sûr si on ferme la connexion, il faut la réouvrir
Enfin bon, j'ai mis que le haut de l'iceberg
Membre enregistré
794 messages
Popularité : +40 (42 votes)
Posté le 21 février 2021 - 18:03
Hi, don't use "literal" paths, they can be different for each device, try with fRepDonnées https://doc.pcsoft.fr/fr-FR/?3036001&name=fDataDir

SI NOT fExtraitRessource("LarEquipment.fic",CompleteDir(fRepDonnées()) + "LarEquipment.fic") ALORS
Error("fExtraitRessource",ErrorInfo(errMessage))
FIN
SI NOT fExtraitRessource("LarEquipment.ndx",CompleteDir(fRepDonnées()) + "LarEquipment.ndx") ALORS
Error("fExtraitRessource",ErrorInfo(errMessage))
FIN
SI NOT fExtraitRessource("LarEquipment.mmo",CompleteDir(fRepDonnées()) + "LarEquipment.mmo") ALORS
Error("fExtraitRessource",ErrorInfo(errMessage))
FIN


Rubén
Membre enregistré
4 messages
Posté le 24 février 2021 - 16:07
Salut Helico

En complément des réponses de Popoy et Ruben.

Pour ma part je n'utilise pas d'analyse dans Windev Mobile, trop de soucis sur les mises à jour de structure de fichiers, etc... (Android, iOS, versions os, ...).
Pour alimenter ma base de données web je passe exclusivement par des webservices. Et j'ai toujours un back-office en Windev pour gérer l'appli (users, etc...) qui, lui, contient l'analyse.
Pour alimenter des fichiers de paramètres locaux (à mes applis), je crée un projet Windev qui me génère les fichiers dont j'ai besoin via une analyse (donc des .fic, .mmo et .ndx), que j'intègre ensuite dans l'APK.

Je ne change jamais le répertoire de données (je conserve celui par défaut, donné par fRepDonnées) et j'utilise exclusivement des noms de fichiers en minuscules, comme préconisé un peu partout sur le forum.

Une fois ceci étant posé, voici 2 solutions que je te conseille :
- Soit inclure une suppression de l'ensemble des fichiers .fic, .mmo et .ndx du répertoire de données avant de faire tes fExtraitRessource, pour être sûr que ce sont bien tes derniers fichiers de données qui sont intégrés dans ton appli.

- Soit versionner tes fichiers de données quand tu as des modifications de structure ou de nouveaux enregistrements : c'est moche mais radical (mais nécessite de modifier ton code puisque plus les mêmes noms de fichiers, ce qui est simple si tu as mis les variables globales qui vont bien dans le code init de ton projet ceci dit).

Bon dév
Membre enregistré
41 messages
Popularité : +3 (3 votes)
Posté le 24 février 2021 - 18:25
Bonjour,

Ce qui marche pour moi, mais pas à chaque fois.

SI PAS EnModeSimulateurAndroid() ET HNbEnr(Liste_Materiel) <> 168 ALORS
fExtraitRessource("Liste_Materiel.fic", ComplèteRep(fRepDonnées()) + "Liste_Materiel.FIC")
fExtraitRessource("Liste_Materiel.ndx", ComplèteRep(fRepDonnées()) + "Liste_Materiel.ndx")
HChangeRep(Liste_Materiel,fRepDonnées())
FIN


Je mets les 2 fichiers dans la liste des fichiers à importer au moment de la compilation.

Quand cela ne fonctionne pas, je vide le cache de l'application dans les paramètres du smartphone.

Bon courage
Membre enregistré
57 messages
Popularité : +3 (5 votes)
Posté le 10 mars 2021 - 21:26
Merci à tous pour vos conseils..
Pas facile cette histoire!
J'ai trouvé une petite solution en supprimant les données de l'application via le gestionnaire d'application de samsung.
Du coup, tout se régénère à l'utilisation suivante...
Pas conventionnel mais fonctionnel...
Membre enregistré
4 messages
Posté le 11 mars 2021 - 08:57
Salut Helico
Tu ne peux en revanche pas utiliser cette solution pour une appli grand public.
Effectivement pour une appli en interne pas de souci par contre.

Bon dév
Membre enregistré
964 messages
Popularité : +16 (20 votes)
Posté le 11 mars 2021 - 09:18
Personnellement je suis confronté à la même problématique : embarquer des fichiers de données dans l'APK.
Je trouve risqué de déployer des fichiers HFSQL qui doivent être mis à jour dans le package pour s'assurer de la même version de l'analyse.
J'ai choisi une solution différente relativement simple :
1 - le site web de gestion génère des fichiers JSON à partir des différentes tables paramètres.
2 - tous les fichiers json sont zippés en une seule archive
3 - cette archive est ajoutée dans le projet et donc distribuée dans l'APK.
4 - au premier démarrage de l'application, je laisse HFSQL faire son boulot, dézippe l'archive et charge en masse les fichiers HFSQL avec les données JSON.

Au départ, je procédais au chargement des fichiers par l'appel de webservices qui renvoyaient du json, ça fonctionnait très bien mais quand j'ai mis l'application dans appStore, l'application a été refusée ; il fallait qu'elle puisse démarrer sans accès à Internet ! d'où les fichiers json