PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Problème avec HmodifieStructure sous android
Problème avec HmodifieStructure sous android
Débuté par RÉDA / Particulier, 13 fév. 2016 20:26 - 57 réponses
Membre enregistré
217 messages
Popularité : +12 (12 votes)
Posté le 13 février 2016 - 20:26
Bonjour à tous,
j'essais depuis des heure d'utiliser la fonction HModifieStructure , ça ne marche pas!

J'explique mon problème.
Il m'arrive de mettre à jour certains fichiers de l'analyse HF classic. (Ex: ajout d'une nouvelle rubrique)
Dans ce cas, je régénère l'application (APK) puis je la réinstalle au niveau des appareils mobiles (android)
Je dois aussi, pour chaque appareil, faire passer les fichier fic concernés à l'outils WDmodfic afin de mettre à jour leurs structures. Cette tâche est très fastidieuse car les tablettes sont dispersées géographiquement.

Je voudrai donc rendre l'utilisateur plus autonome, il télécharge la nouvelle version depuis un serveur, puis dans le cas il où il y aurait une modification des structures elles se mettent à jour de manière automatique.
Et si je ne me trompe pas, la fonction HModifieStructure est faite pour ça!
Cependant, j'ai beau essayé toutes les solutions trouvées sur ce forum à ce problème je n'y parviens pas :

à l'initialisation du projet, je change l'emplacement du fichier Parametr.FIC à l'aide de hchangerep
ensuite je fais appel à la fonction HModifieStructure avec chemin de sauvegarde ou sans, que je ferme le fichier ou pas, le résultat est le même, j'obtiens l'erreur :
VOUS AVEZ APPELE LA FONCTION HMODIFIESTRUCTURE. IMPOSSIBLE DE RENOMMER /sdcard/locdata/BDD-HF/parametr.fic en /sdcard/locdata/BDD-HF/parametr.fic

Voici une partie du code d'initialisation du projet :
HChangeRep(Parametr,"/sdcard/Locdata/BDD-HF");
HFerme(Parametr);
HModifieStructure(Parametr,hmsSansContrôle,"","/sdcard/Locdata/BDD-HF");


Quelqu'un aurait une idée au problème ?
Membre enregistré
474 messages
Popularité : +17 (19 votes)
Posté le 15 février 2016 - 10:50
Bonjour,

Ce n'est pas la bonne façon de faire.
Voila un bout de prog à adapter suivant tes besoins

// Pour tous les fichiers
POUR TOUTE CHAINE sNomUnFichier DE sListedesfichiers SEPAREE PAR RC
QUAND EXCEPTION DANS
// Ouverture ou création du fichier de données
HCréationSiInexistant(sNomUnFichier)
FAIRE
// Problème
// Il y a une différence de structure ?
SI HErreur(hErrEnCours) = 70016 ALORS
// Erreur 70016: LE FICHIER NE CORRESPOND PAS A SA DESCRIPTION
ToastAffiche("Mise à jour de la structure du fichier <" + ...
sNomUnFichier + "> en cours...", toastCourt, cvMilieu, chCentre)
// On met à jour la structure du fichier
SI PAS HModifieStructure(sNomUnFichier) ALORS
// Echec de la mise à jour de la structure du fichier
sListeDesErreurs += [RC] + ...
"- Erreur de modification de structure pour le fichier <" + ...
sNomUnFichier + "> : " + HErreurInfo()
FIN
SINON
// Autres erreurs qu'une différence de structure
sListeDesErreurs += [RC] + "- Erreur d'accès au fichier <" + ...
sNomUnFichier + "> : " + HErreurInfo()
FIN
FIN
FIN


--
Jean-Michel
Membre enregistré
217 messages
Popularité : +12 (12 votes)
Posté le 17 février 2016 - 14:16
Bonjour,
Merci à vous Jean-Michel pour votre aide!
J'ai testé votre code et j'obtiens une erreur fatale qui provoque la fermeture de l'application.
aucune information n'est donnée dans l'erreur
Voici le code en question :
Je fais appel à HChangeRep afin de préciser l'emplacement des données
L'erreur 70016 est bien détectée, ensuite le message "Mise à jours de la structure du fiche" s'affiche, puis une erreur fatale se produit avec un bouton "Quitter l'application"

HChangeRep(TestFic,"/sdcard/bdd-test");
QUAND EXCEPTION DANS
// Ouverture ou création du fichier de données

HCréationSiInexistant(TestFic)
FAIRE
// Problème
// Il y a une différence de structure ?
SI HErreur(hErrEnCours) = 70016 ALORS
// Erreur 70016: LE FICHIER NE CORRESPOND PAS A SA DESCRIPTION
Info("Mise à jour de la structure du fichie");

// On met à jour la structure du fichier
SI PAS HModifieStructure(TestFic) ALORS
Info("erreur de mise à jours");
Info(HErreurInfo());

FIN
SINON
// Autres erreurs qu'une différence de structure
Info("Autre Erreur");
Info(HErreurInfo());


FIN
FIN
Posté le 18 février 2016 - 11:40
Bonjour,

peut être que votre syntaxe n'est pas correcte cela fonctionne très bien dans notre appli, nous faisons :

HChangeRep(MaTable, fRepExe()+"\"+"_"+nIDUser)
puis
HModifieStructure(MaTable,hmsTâcheDeFond)

C'est tout et ca marche parfaitement :-)

Bonne journée
Membre enregistré
217 messages
Popularité : +12 (12 votes)
Posté le 18 février 2016 - 12:27
Merci de votre retour NIco.
S'agit-il bien d'une application windev mobile sous android ? avec une base HF?
Posté le 19 février 2016 - 09:18
tout à fait.
Posté le 19 février 2016 - 14:03
Bonjour

attention, sous android, les droits sont différents en fonction du
répertoire. Il est possible que la différence entre vous deux soit le
travail dans le répertoire du program (emplacement normal/défaut qui
fonctionne) ou sur la sdcard (qui ne fonctionne pas)

Un simple test en changeant d'emplacement devrait montrer si c'est bien ca

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

A votre disposition : WXShowroom.com, WXReplication (open source) et
maintenant WXEDM (open source)

Plus d'information sur http://fabriceharari.com


On 2/19/2016 3:18 AM, Nico wrote:
> tout à fait.
Membre enregistré
217 messages
Popularité : +12 (12 votes)
Posté le 19 février 2016 - 15:57
En effet ; vous avez vu juste Fabrice.
Il s'agit bien du dossier. Si l'on choisi un sous-dossier du dossier de l'application ça ne pose aucun problème.
Par contre, si je sors du dossier par ex : /sdcard/autredossier/ là j'ai une erreur...
c'est assez embetant, car si je reste dans le dossier de l'application, il m'est impossible de voir ou de transferer les fichier vers un PC (fichier caché et protégé).

Comment faites-vous pour récupérer votre base Nico? à moins que les appareils sont rootés?!
Posté le 20 février 2016 - 14:50
Bonjour

>
> Comment faites-vous pour récupérer votre base Nico? à moins que les
> appareils sont rootés?!

réplication, install des fichiers avec l'appli, webservice, ftp... tout
dépend des cas.

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

A votre disposition : WXShowroom.com, WXReplication (open source) et
maintenant WXEDM (open source)

Plus d'information sur http://fabriceharari.com
Posté le 23 février 2016 - 14:46
Bonjour,

je n'ai pas besoin de récupérer la base du mobile mais vous pouvez peut être faire un export de celle ci en écrivant les données dans un fichier texte ou xml, vous placez ce fichier dans un dossier accessible afin de pouvoir le récupérer.

C'est ce que j'ai fais pour une autre appli, le fichier est envoyé par email par exemple.
Posté le 27 avril 2016 - 12:04
Bonjour,

J'ai exactement les mêmes besoins.

J'essaie de mettre à jour automatiquement les fichiers de données au démarrage de l'application.

Voici le code que j'utilise:

sNomUnFichier est une chaîne
sListedesfichiers est une chaîne = "FichierA"+RC+"FichierB"+RC
slistedeserreurs est une chaîne
bErreurCopie est un booléen

// Vérification stricte de la structure de fichiers
HVérifieStructure("*", hIdentique)
// Pour tous les fichiers
POUR TOUTE CHAINE sNomUnFichier DE sListedesfichiers SEPAREE PAR RC
QUAND EXCEPTION DANS
// Ouverture ou création du fichier de données
HCréationSiInexistant(sNomUnFichier)
FAIRE
// Problème
// Il y a une différence de structure ?
SI HErreur(hErrEnCours) =70016 ALORS
// Erreur 70016: LE FICHIER NE CORRESPOND PAS A SA DESCRIPTION
// On met à jour la structure du fichier
SI PAS fCopieFichier(PathBDD+"/"+sNomUnFichier+".fic",fRepEnCours()+"/Temp/"+sNomUnFichier+".fic",frRécursif) bErreurCopie = Vrai
SI PAS fCopieFichier(PathBDD+"/"+sNomUnFichier+".ndx",fRepEnCours()+"/Temp/"+sNomUnFichier+".ndx",frRécursif) bErreurCopie = Vrai
SI PAS fCopieFichier(PathBDD+"/"+sNomUnFichier+".mmo",fRepEnCours()+"/Temp/"+sNomUnFichier+".mmo",frRécursif) bErreurCopie = Vrai
SI PAS bErreurCopie ALORS
ToastAffiche("Mise à jour de la structure du fichier <"+ ...
sNomUnFichier+"> en cours..."+fRepEnCours()+"/Temp/",toastCourt,cvMilieu,chCentre)
HChangeRep(sNomUnFichier,fRepEnCours()+"/Temp/")
SI PAS HModifieStructure(sNomUnFichier,hmsSansContrôle)ALORS
// Echec de la mise à jour de la structure du fichier
slistedeserreurs+= [RC] + ...
"- Erreur de modification de structure pour le fichier <"+ ...
sNomUnFichier+"> : "+HErreurInfo()
SINON
bErreurCopie = Faux
SI PAS fCopieFichier(fRepEnCours()+"/Temp/"+sNomUnFichier+".fic",PathBDD+"/"+sNomUnFichier+".fic",frRécursif) bErreurCopie = Vrai
SI PAS fCopieFichier(fRepEnCours()+"/Temp/"+sNomUnFichier+".ndx",PathBDD+"/"+sNomUnFichier+".ndx",frRécursif) bErreurCopie = Vrai
SI PAS fCopieFichier(fRepEnCours()+"/Temp/"+sNomUnFichier+".mmo",PathBDD+"/"+sNomUnFichier+".mmo",frRécursif) bErreurCopie = Vrai
SI bErreurCopie ALORS
Erreur("Erreur copie fichier depuis: "+fRepEnCours()+"/Temp/")
FIN
FIN
SINON
Erreur("erreur copie fichier vers : "+fRepEnCours()+"/Temp/")
FIN
SINON
// Autres erreurs qu'une différence de structure
slistedeserreurs+= [RC] +"- Erreur d'accès au fichier <"+ ...
sNomUnFichier+"> : "+HErreurInfo()
FIN
FIN
FIN


Je réalise une copie des fichiers dans un sous répertoire Temp pour éviter l'erreur fatale générée si on travaille sur un dossier autre que celui de l'application.

Avec ce code je n'ai aucun message d'erreur les copies se font correctement mais la structure des fichiers reste inchangée.

Je ne comprends pas ou est le problème.

D'avance merci pour votre aide

Cezame
Posté le 03 mai 2016 - 14:34
J'ai testé sans succès tout ce que je pouvais imaginer.

J'ai déplacé les fichiers dans un sous répertoire de l'application.

Impossible de modifier la structure des fichiers de données avec la fonction Hmodifiestructure. Aucun message d'erreur mais le fichier n'est pas modifié.

Quelqu'un aurait il une explication?

D'avance merci.

Cezame
Posté le 03 mai 2016 - 15:13
quel sous répertoire ?


Le 5/3/2016 à 6:34 AM, Cezame a écrit :
J'ai testé sans succès tout ce que je pouvais imaginer.

J'ai déplacé les fichiers dans un sous répertoire de l'application.
Impossible de modifier la structure des fichiers de données avec la
fonction Hmodifiestructure. Aucun message d'erreur mais le fichier n'est
pas modifié.

Quelqu'un aurait il une explication?

D'avance merci.

Cezame
Posté le 03 mai 2016 - 15:36
Je travaille avec une base de donnée par année civile.

J'ai mis les fichiers dans l'espace de stockage pour pouvoir y accéder plus facilement.

Si j’exécute le Hmodifiestructure sur l'espace de stockage j'ai une erreur fatale.

J'ai vu ici que pour que cela fonctionne les fichiers devaient être dans le répertoire de l'application ou dans un sous répertoire.

J'ai donc imaginer créer une copie des fichiers dans un répertoire Temp qui est un sous répertoire du répertoire ou se trouve l'appli. Ensuite je fais un HchangeRep() puis je fais le HModifieStructure puis recopie les fichiers modifiés sur l'espace de stockage.

Le Hmodifiestructure s'exécute avec aucune erreur mais le fichier de données n'est pas modifié!

Cezame
Posté le 03 mai 2016 - 15:57
J'ai bien compris...

ce que je te demande, c'est le code qui place les fichiers dans ton sous
-répertoire, histoire de voir si tu fais bien ce que tu crois faire...
et qui devrait fonctionner, en théorie.

Cordialement

--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

Plus d'information sur http://fabriceharari.com
Posté le 03 mai 2016 - 17:31
Il est au dessus le code :

SI HErreur(hErrEnCours) =70016 ALORS
// Erreur 70016: LE FICHIER NE CORRESPOND PAS A SA DESCRIPTION
// On met à jour la structure du fichier
SI PAS fCopieFichier(PathBDD+"/"+sNomUnFichier+".fic",fRepEnCours()+"/Temp/"+sNomUnFichier+".fic",frRécursif) bErreurCopie = Vrai
SI PAS fCopieFichier(PathBDD+"/"+sNomUnFichier+".ndx",fRepEnCours()+"/Temp/"+sNomUnFichier+".ndx",frRécursif) bErreurCopie = Vrai
SI PAS fCopieFichier(PathBDD+"/"+sNomUnFichier+".mmo",fRepEnCours()+"/Temp/"+sNomUnFichier+".mmo",frRécursif) bErreurCopie = Vrai
SI PAS bErreurCopie ALORS
ToastAffiche("Mise à jour de la structure du fichier <"+ ...
sNomUnFichier+"> en cours..."+fRepEnCours()+"/Temp/",toastCourt,cvMilieu,chCentre)
HChangeRep(sNomUnFichier,fRepEnCours()+"/Temp/")
SI PAS HModifieStructure(sNomUnFichier,hmsSansContrôle)ALORS
// Echec de la mise à jour de la structure du fichier
slistedeserreurs+= [RC] + ...
"- Erreur de modification de structure pour le fichier <"+ ...
sNomUnFichier+"> : "+HErreurInfo()
SINON
bErreurCopie = Faux
SI PAS fCopieFichier(fRepEnCours()+"/Temp/"+sNomUnFichier+".fic",PathBDD+"/"+sNomUnFichier+".fic",frRécursif) bErreurCopie = Vrai
SI PAS fCopieFichier(fRepEnCours()+"/Temp/"+sNomUnFichier+".ndx",PathBDD+"/"+sNomUnFichier+".ndx",frRécursif) bErreurCopie = Vrai
SI PAS fCopieFichier(fRepEnCours()+"/Temp/"+sNomUnFichier+".mmo",PathBDD+"/"+sNomUnFichier+".mmo",frRécursif) bErreurCopie = Vrai
SI bErreurCopie ALORS
Erreur("Erreur copie fichier depuis: "+fRepEnCours()+"/Temp/")
FIN
FIN
SINON
Erreur("erreur copie fichier vers : "+fRepEnCours()+"/Temp/")
FIN


Je fais simplement des fcopiefichier() et teste si la copie est bien faite.

Cezame
Posté le 03 mai 2016 - 21:42
Rebonjour

Premièrement, je ne vois pas de code de création de /temp/. Il est peut
être ailleurs, ou il manque...

Ensuite, il est possible que cette syntaxe fonctionne, mais perso,
j'ajouterais des 'alors' et des 'fin' à tes fcopiefichier.

D'autre part, je vois des fonctions hxxx et fxxx mélangées, et pas de
hclose, ce qui m'interpelle.
Logiquement il faudrait faire un hclose avant de copier dans temp et
avant de copier depuis temp

Dis nous si ca change quelque chose.

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

Plus d'information sur http://fabriceharari.com
Posté le 04 mai 2016 - 10:54
Bonjour Fabrice et merci pour ton aide,

Avant le lancement de la procédure de vérification de mise à jour je fais un Hferme("*").

Je vais essayer de créer le dossier /Temp avant mais comme la fonction fcopie ne renvoie pas d'erreur je pense que la création du /Temp est automatique.

Je vais ajouter le Hferme avant recopie dans le répertoire des données.

Merci encore

Cezame
Posté le 04 mai 2016 - 11:15
Bonjour,

Je viens de faire des essais en modifiant mon code ainsi :

Procedure Vérifie_Structure_Fichiers()
sNomUnFichier est une chaîne
sListedesfichiers est une chaîne = "FichierA"+RC+"FichierB"+RC+"FichierC"+RC+"FichierD"+RC
slistedeserreurs est une chaîne
bErreurCopie est un booléen

fRepSupprime(fRepExe()+"\Temp\",frRécursif)
fRepCrée(fRepExe()+"\Temp\")
HFerme("*")
// Vérification stricte de la structure de fichiers
HVérifieStructure("*", hIdentique)
// Pour tous les fichiers
POUR TOUTE CHAINE sNomUnFichier DE sListedesfichiers SEPAREE PAR RC
QUAND EXCEPTION DANS
// Ouverture ou création du fichier de données
HCréationSiInexistant(sNomUnFichier)
FAIRE
// Problème
// Il y a une différence de structure ?
SI HErreur(hErrEnCours) =70016 ALORS
// Erreur 70016: LE FICHIER NE CORRESPOND PAS A SA DESCRIPTION
// On met à jour la structure du fichier
SI PAS fCopieFichier(PathBDD+"/"+sNomUnFichier+".fic",fRepExe()+"\Temp\"+sNomUnFichier+".fic",frRécursif) bErreurCopie = Vrai
SI PAS fCopieFichier(PathBDD+"/"+sNomUnFichier+".ndx",fRepExe()+"\Temp\"+sNomUnFichier+".ndx",frRécursif) bErreurCopie = Vrai
fCopieFichier(PathBDD+"/"+sNomUnFichier+".mmo",fRepExe()+"\Temp\"+sNomUnFichier+".mmo",frRécursif)
SI PAS bErreurCopie ALORS
fSupprime(PathBDD+"/"+sNomUnFichier+".fic")
fSupprime(PathBDD+"/"+sNomUnFichier+".ndx")
fSupprime(PathBDD+"/"+sNomUnFichier+".mmo")
ToastAffiche("Mise à jour de la structure du fichier <"+ ...
sNomUnFichier+"> en cours..."+fRepExe()+"\Temp\",toastCourt,cvMilieu,chCentre)
HChangeRep(sNomUnFichier,fRepExe()+"\Temp\")
SI PAS HModifieStructure(sNomUnFichier,hmsSansContrôle)ALORS
// Echec de la mise à jour de la structure du fichier
slistedeserreurs+= [RC] + ...
"- Erreur de modification de structure pour le fichier <"+ ...
sNomUnFichier+"> : "+HErreurInfo()
SINON
bErreurCopie = Faux
HFerme(sNomUnFichier)
ToastAffiche(sNomUnFichier+" déplacement en cours...")
SI PAS fCopieFichier(fRepExe()+"\Temp\"+sNomUnFichier+".fic",PathBDD+"\"+sNomUnFichier+".fic",frRécursif) bErreurCopie = Vrai
SI PAS fCopieFichier(fRepExe()+"\Temp\"+sNomUnFichier+".ndx",PathBDD+"\"+sNomUnFichier+".ndx",frRécursif) bErreurCopie = Vrai
fCopieFichier(fRepExe()+"\Temp\"+sNomUnFichier+".mmo",PathBDD+"\"+sNomUnFichier+".mmo",frRécursif)
SI bErreurCopie ALORS
Erreur("Erreur copie fichier "+sNomUnFichier+" depuis: "+fRepExe()+"/Temp/")
FIN
FIN
SINON
Erreur("Erreur copie fichier "+sNomUnFichier+" vers : "+fRepExe()+"/Temp/")
FIN
SINON
// Autres erreurs qu'une différence de structure
slistedeserreurs+= [RC] +"- Erreur d'accès au fichier <"+ ...
sNomUnFichier+"> : "+HErreurInfo()
FIN
FIN
FIN
SI slistedeserreurs <> "" ALORS
Erreur("Erreur Modifications : "+RC+slistedeserreurs)
FIN
HChangeRep("*",PathBDD)


Aucune des fonction ne renvoie d'erreur ni sur la copie ni le Hmodifiestructure. Mais le fichier reste inchangé.

La seule chose que je ne peux pas vérifier c'est la création du dossier temp et la copie effective des fichiers dasn le dossier frepexe()/Temp.

Encore merci pour votre aide

Cezame
Posté le 04 mai 2016 - 14:40
Bonjour

1. il manque des contrôles d'erreur un peu partout (par exemple, il faut
faire
si pas frepcree(xxx) alors
info(errorinfo())
fin
pareil sur TOUTES Les fonctions (hferme, hverifiestructure, etc)

2. on veut créer le répertoire temp, donc frepsupprime est inutile.

Cordialement

--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

Plus d'information sur http://fabriceharari.com
Posté le 04 mai 2016 - 15:38
Je vais intégrer tous les contrôles.

J'ai ajouté le frepsupprime au cas ou.

Je te tiens au courant du résultat.

Cezame
Posté le 04 mai 2016 - 16:49
Voici le code avec tous les tests...

Procedure Vérifie_Structure_Fichiers()
sNomUnFichier est une chaîne
sListedesfichiers est une chaîne = "FichierA"+RC+"FichierB"+RC+"FichierC"+RC+"FichierD"+RC
slistedeserreurs est une chaîne
bErreurCopie est un booléen


fRepSupprime(fRepExe()+"\Temp\",frRécursif)
SI PAS fRepCrée(fRepExe()+"\Temp\") ALORS
Erreur(ErreurInfo())
RETOUR
FIN
HFerme("*")
// Vérification stricte de la structure de fichiers
HVérifieStructure("*", hIdentique)
// Pour tous les fichiers
POUR TOUTE CHAINE sNomUnFichier DE sListedesfichiers SEPAREE PAR RC
QUAND EXCEPTION DANS
// Ouverture ou création du fichier de données
HCréationSiInexistant(sNomUnFichier)
FAIRE
// Problème
// Il y a une différence de structure ?
SI HErreur(hErrEnCours) =70016 ALORS
// Erreur 70016: LE FICHIER NE CORRESPOND PAS A SA DESCRIPTION
// On met à jour la structure du fichier
bErreurCopie = Faux
SI PAS fCopieFichier(PathBDD+"/"+sNomUnFichier+".fic",fRepExe()+"\Temp\"+sNomUnFichier+".fic",frRécursif) bErreurCopie = Vrai
SI PAS fCopieFichier(PathBDD+"/"+sNomUnFichier+".ndx",fRepExe()+"\Temp\"+sNomUnFichier+".ndx",frRécursif) bErreurCopie = Vrai
fCopieFichier(PathBDD+"/"+sNomUnFichier+".mmo",fRepExe()+"\Temp\"+sNomUnFichier+".mmo",frRécursif)
SI PAS bErreurCopie ALORS
bErreurSuppression = Faux
SI PAS fSupprime(PathBDD+"/"+sNomUnFichier+".fic") bErreurSuppression = Vrai
SI PAS fSupprime(PathBDD+"/"+sNomUnFichier+".ndx") bErreurSuppression = Vrai
fSupprime(PathBDD+"/"+sNomUnFichier+".mmo")
SI PAS bErreurSuppression ALORS
ToastAffiche("Mise à jour de la structure du fichier <"+ ...
sNomUnFichier+"> en cours..."+fRepExe()+"\Temp\",toastCourt,cvMilieu,chCentre)
SI PAS HChangeRep(sNomUnFichier,fRepExe()+"\Temp\") ALORS
Erreur(sNomUnFichier+" "+ErreurInfo())
FIN
SI PAS HModifieStructure(sNomUnFichier,hmsSansContrôle)ALORS
// Echec de la mise à jour de la structure du fichier
slistedeserreurs+= [RC] + ...
"- Erreur de modification de structure pour le fichier <"+ ...
sNomUnFichier+"> : "+HErreurInfo()
SINON
bErreurCopie = Faux
HFerme(sNomUnFichier)
ToastAffiche(sNomUnFichier+" déplacement en cours...")
SI PAS fCopieFichier(fRepExe()+"\Temp\"+sNomUnFichier+".fic",PathBDD+"\"+sNomUnFichier+".fic",frConfirmer) bErreurCopie = Vrai
SI PAS fCopieFichier(fRepExe()+"\Temp\"+sNomUnFichier+".ndx",PathBDD+"\"+sNomUnFichier+".ndx",frConfirmer) bErreurCopie = Vrai
fCopieFichier(fRepExe()+"\Temp\"+sNomUnFichier+".mmo",PathBDD+"\"+sNomUnFichier+".mmo",frConfirmer)
SI bErreurCopie ALORS
Erreur("Erreur copie fichier "+sNomUnFichier+" depuis: "+fRepExe()+"/Temp/")
FIN
FIN
SINON
Erreur("Erreur suppression fichier "+PathBDD+"/"+sNomUnFichier)
FIN
SINON
Erreur("Erreur copie fichier "+sNomUnFichier+" vers : "+fRepExe()+"/Temp/")
FIN
SINON
// Autres erreurs qu'une différence de structure
slistedeserreurs+= [RC] +"- Erreur d'accès au fichier <"+ ...
sNomUnFichier+"> : "+HErreurInfo()
FIN
FIN
FIN
SI slistedeserreurs <> "" ALORS
Erreur("Erreur Modifications : "+RC+slistedeserreurs)
FIN
HChangeRep("*",PathBDD)


Aucune erreur généré sur aucune étape...

je pense que le HmodifieStructure n'a aucune action... De plus j'ai un fichier dont la structure est modifié qui n'est pas traité et si je lance l'affichage du fichier j'ai une erreur sur la description de fichier.

je pense que la fonction Hmodifiestructure ne fonctionne pas sous Android !

Est ce que vous voyez autre chose?

D'avance merci pour votre aide

Cezame
Posté le 04 mai 2016 - 20:28
je pense que la fonction Hmodifiestructure ne fonctionne pas sous Android !

Est ce que vous voyez autre chose?

Comme ca non, mais comme j'utilise hmodifiestructure sous android depuis
longtemps et que ca a toujours marché très bien, sans même utiliser de
sous répertoire, je sais qu ca peut fonctionner... pourquoi ca ne
fonctionne pas dans ce cas, sans être sur le matériel pour débuguer....

Perso, j'aouterais des infos(xxx) à chaque étape (erreur ou pas) pour
être sur des cas dans lesquels on passe.


Cordialement

--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

Plus d'information sur http://fabriceharari.com
Posté le 06 mai 2016 - 10:32
Bonjour,

Merci pour votre aide.

Je ne comprends surtout pas pourquoi si cela ne fonctionne pas je n'ai pas de message d'erreur en retour?

Je vais essayer de copier directement les fichiers dans la racine de l'exe.

J'ai vérifié par des infos la liste des fichiers dans le dossier de la BDD et le dossier Temp.

Une chose est sure, le frepsupprime() pour le dossier Temp dans le dossier de l'exe ne fonctionne pas. Aucune suppression.

La suppression d'un fichier lui fonctionne.

Le HmodifieStructure() ne revoie pas d'erreur. Et les copies se font bien dans les deux sens...

Cezame
Membre enregistré
37 messages
Popularité : +1 (1 vote)
Posté le 06 mai 2016 - 12:55
Bonjour,
voici une partie d'un code qui fonctionne parfaitement sur de l'Androide.
Mes fichiers se trouvent toujours sur une SDCard, mais même dans la mémoire interne cela devrait fonctionner.
Je n'ai jamais eu besoin de faire une copie de fichier. Le HModifieStructure() se fait directement sur les fichiers originaux et il crée aussi automatiquement une sauvegarde du fichier dans un répertoire cRepBackup .

Je crois l'important est le HFerme(cVar1) juste AVANT le HModifieStructure(), car l'aide de HModifieStructure() dit:
"Remarque : En mode hmsNormal ou hmsSansContrôle, le fichier de données manipulé ne doit pas être ouvert (par l'application ou par une autre application)."
Et le HCréationSiInexistant() OUVRE le fichier s'il existe !

J'espère que ça vous aide.

LOCAL
cListe,cVar1,cTxtErr est une chaîne
cRepBackup est une chaîne
bOk est un booléen
gcRepData,gcExt est une chaîne

cRepBackup= ComplèteRep(gcRepData+"backup")

HChangeRep("*",gcRepData)

cTxtErr = ""
cListe = [
FICHIER1
FICHIER2
FICHIER3
]

POUR TOUTE CHAINE cVar1 DE cListe SEPAREE PAR RC
SI PAS Vide(cVar1) ALORS
QUAND EXCEPTION DANS

bOk = HCréationSiInexistant(cVar1)
SI PAS bOk ALORS
cTxtErr += [RC]+"HCréationSiInexistant("+cVar1+")"+RC+Répète("-",50)+RC+HErreurInfo()+[RC]+Répète("-",50)
FIN
FAIRE
bOk = Faux
cTxtErr += [RC]+"HCréationSiInexistant("+cVar1+")"+RC+Répète("-",50)+RC+ExceptionInfo()+[RC]+Répète("-",50)
FIN

SI PAS bOk ALORS
bOk = Vrai
HFerme(cVar1) // IMPORTANT, ferme le fichier ouvert par HCréationSiInexistant()
Multitâche(-100)

QUAND EXCEPTION DANS

SI PAS HModifieStructure(cVar1,hmsNormal,Null,cRepBackup) ALORS
bOk = Faux
cTxtErr += [RC]+"HModifieStructure("+cVar1+",hmsNormal,Null,"+cRepBackup+")"+RC+Répète("-",50)+RC+HErreurInfo()+[RC]+Répète("-",50)
FIN
FAIRE
bOk = Faux
cTxtErr += [RC]+"HModifieStructure("+cVar1+",hmsNormal,Null,"+cRepBackup+")"+RC+Répète("-",50)+RC+ExceptionInfo()+[RC]+Répète("-",50)
FIN
FIN
FIN
FIN
HFerme("")
FinProgramme()


--
Bonne journée

J. Feyen
Posté le 23 mai 2016 - 17:02
Bonjour,

Merci de votre aide, j'ai essayé ce code et cela fonctionne à merveille.

Maintenant le passage en version 21 de mon application engendre des gros problèmes de plantage avec la gestion de tracés sur les cartes.

Le même code en qui fonctionne parfaitement en WM20 plante mon application en WM21 avec l'application s'est arrêtée.

Cezame
Posté le 23 mai 2016 - 19:40
Bonjour Cezame,

Le même code en qui fonctionne parfaitement en WM20 plante mon
application en WM21 avec l'application s'est arrêtée.

Et que dit le support ?

Cordialement

--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

Plus d'information sur http://fabriceharari.com
Posté le 24 mai 2016 - 17:52
Bonjour,

J'ai contourné le problème en changeant ma séquence de rafraichissement et en optimisant mon code.

Cezame
Posté le 16 avril 2018 - 22:18
Bonjour Cezame,

Merci de partager ce bout de code final car je suis dans le meme probleme et je galère grave

je suis debutant en windev mobile
Membre enregistré
2 messages
Posté le 16 avril 2018 - 22:30
Bonjour Cezame,

Stp peux tu partager ce bout de code final ou procedure car j'ai le meme souci et je galere grave dessus.

je suis debutant en windev mobile
Membre enregistré
14 messages
Posté le 19 octobre 2022 - 10:00
Bonjour,
J'ai repris exactement le code de J.Feyen mais pour ma part cela ne fonctionne toujours pas.

Je précise que mon terminal mobile est sous Android 11 et que sur les versions précédentes d'Android je n'avais pas le souci.
J'ai bien compris qu'il y avait désormais une question de droits à gérer, d'autant plus que ma base de données est stockée dans le dossier public "Documents" et non pas dans le dossier de l'application.
Lors de la génération de mon application, j'ajoute bien les permissions Android MANAGE_EXTERNAL_STORAGE,READ_EXTERNAL_STORAGE et WRITE_EXTERNAL_STORAGE.

Voici mon code de changement de dossier de ma base :

Chemin_DATA est une chaîne

//On doit demander à l'utilisateur l'autorisation d'accès à tous les fichiers de l'appareil
perm est une Permission = PermissionListe(permGestionStockageExterne)
SI PAS perm.Accordé ALORS
PermissionDemande(perm,procdemandepermission)

PROCEDURE INTERNE procdemandepermission
// si perm.Accordé alors
// info("permission accordée")
// sinon
// Info("permission refusée")
// FIN
FIN
FIN

//On stocke les données en stockage externe pour pouvoir y accéder depuis l’extérieur (en FTP notamment)
SI SysEtatStockageExterne(1) = sseDisponible ALORS
Chemin_DATA = SysRepStockageExterne(1,ssePublicDocument)
SINON
Erreur("Stockage externe (1) non disponible !")
FinProgramme()
FIN

SI fRepExiste(Chemin_DATA+fSep()+"Maquimobile") = Faux ALORS
SI PAS fRepCrée(Chemin_DATA+fSep()+"Maquimobile") ALORS Erreur(ErreurInfo(errMessage))
FIN

Chemin_DATA = Chemin_DATA+fSep()+"Maquimobile"

HChangeRep("*",Chemin_DATA)


Ce code fonctionne très bien puisque ma base de données se trouve bien dans mon dossier public "Documents" mais la fonction hmodifiestructure ne fonctionne pas, j'ai pourtant bien reprise le code de J.Feyen :

POUR TOUTE chaîne sNomUnFichier de liste_fichiers SEPAREE PAR RC

QUAND EXCEPTIONEXCEPTION DANS

bOk = HCréationSiInexistant(sNomUnFichier)
SI PAS bOk ALORS
//sListeDesErreurs += [RC]+"HCréationSiInexistant("+sNomUnFichier+")"+RC+Répète("-",50)+RC+HErreurInfo()+[RC]+Répète("-",50)
FIN
FAIRE
bOk = Faux
//sListeDesErreurs += [RC]+"HCréationSiInexistant("+sNomUnFichier+")"+RC+Répète("-",50)+RC+ExceptionInfo()+[RC]+Répète("-",50)
FIN

SI PAS bOk ALORS
bOk = Vrai
HFerme(sNomUnFichier) // IMPORTANT, ferme le fichier ouvert par HCréationSiInexistant()
Multitâche(-100)

QUAND EXCEPTIONEXCEPTION DANS

SI PAS HModifieStructure(sNomUnFichier,hmsTâcheDeFond) ALORS
bOk = Faux
sListeDesErreurs += [RC]+"HModifieStructure("+sNomUnFichier+",hmsNormal,Null,"")"+RC+Répète("-",50)+RC+HErreurInfo()+[RC]+Répète("-",50)
FIN
FAIRE
bOk = Faux
sListeDesErreurs += [RC]+"HModifieStructure("+sNomUnFichier+",hmsNormal,Null,"")"+RC+Répète("-",50)+RC+ExceptionInfo()+[RC]+Répète("-",50)
FIN
FIN

FIN

// Il y a eu des erreurs ?
SI sListeDesErreurs <> "" ALORS
Erreur("Erreur à l'ouverture des fichiers de données !"+RC+sListeDesErreurs)
FinProgramme()
FIN



A l'ouverture de mon application je reçois donc l'erreur suivante :
"Erreur à l'ouverture des fichier de données !
HModifieStructure(PERSONNE,hmsNormal,Null,")
Impossible de renommer le fichier </storage/emulated/0/Documents/Maquimobile/personne.fic> en </storage/emulated/0/Android/data/fr.societe.maquimobile/cache/hfou3NWL>.
Membre enregistré
328 messages
Posté le 19 octobre 2022 - 11:08
Salut,

https://doc.pcsoft.fr/fr-FR/?3044144&name=Constantes_Hyper_File
Regarde ce qu'il disent sur la constante hmsTâcheDeFond que tu utilises.
Ca semble réservé au mode C/S. Je pense que tu devrais utiliser hmsNormal ou hmsSansContrôle. D'ailleurs tu fermes bien le fichier juste avant le HmodifieStructure, ce qui ne serait pas cohérent avec une opération "à chaud".
Membre enregistré
14 messages
Posté le 19 octobre 2022 - 13:17
J'ai essayé les 3 modes, hmsNormal, hmsSanscontrôle et hmsTachedefond mais ça ne change rien
Membre enregistré
14 messages
Posté le 19 octobre 2022 - 14:04
En fait il semblerait que la fonction hmodifiestructure fasse une sauvegarde du fichier d'origine dans dossier "cache" contenu dans le dossier de l'application alors que ma base de données est dans le dossier public "Documents", et c'est là que ça coince mais je ne vois pas comment contourner ça...
Membre enregistré
328 messages
Posté le 19 octobre 2022 - 14:17
Il y a autre chose qui m'a parfois occasionné des problèmes avec les fichiers de données : ce sont les requête non libérées. Ca n'a peut-être rien à voir, mais peut-être qu'une ressource non libérée se trouve justement dans ce cache.
Tout HExécuteRequête ou HExécuteRequêteSQL doit avoir en face un HAnnuleDéclaration ou un HLibèreRequête. Attention, si la ressource n'est pas libérée avant la sortie de là où elle est déclarée, elle ne sera définitivement pas libérée, seule une sortie de l'appli remettra les choses en ordre.
Membre enregistré
14 messages
Posté le 19 octobre 2022 - 15:30
Mon code est situé vraiment au démarrage de mon projet, aucune requête n'a encore été lancée.
D'ailleurs je ferme même les fichiers avant de lancer le Hmodifiestructure() donc le problème vient d'ailleurs ...
Membre enregistré
328 messages
Posté le 19 octobre 2022 - 16:52
2 questions :
- As-tu essayé de faire un HChangeRep() explicitement (histoire de lui forcer un peu la main) ?
- As-tu testé le résultat du HCréationSiInexistant() (je vois que c'est commenté)

Tu peux aussi vérifier le dossier avec NomDeTonFichier.Nom (ou pour toi {sNomUnFichier,indFichier}.Nom)
Posté le 23 novembre 2022 - 17:58
Bonsoir,

J'ai exactement le même problème sous Android 11.

Impossible de modifier la structure des table avec HModifieStructure()

Quelqu'un aurat-il une solution? Merci.
Membre enregistré
328 messages
Posté le 24 novembre 2022 - 11:48
voir dans cette page le test sur le n° d'erreur :
https://doc.pcsoft.fr/fr-FR/?1000021445&name=hmodifiestructure_exemple

Mon code qui fonctionne en WM26 jusqu'à Android 12 :
QUAND EXCEPTIONEXCEPTION DANS
SI PAS HCréationSiInexistant(pNomLogiqueFichier) ALORS
SI HErreur() ALORS
Erreur("HCréationSiInexistant",HErreurInfo())
SINON
FIN
SINON
bOk = Vrai
FIN
FAIRE
bOk = Faux // pour être sûr !
SI ExceptionInfo(errCode) = 70016 ALORS
// ici j'utilise la syntaxe INDIRECTION car je ne suis pas sûr qu'une chaîne soit acceptée
SI PAS HModifieStructure({pNomLogiqueFichier,indFichier},hmsSansContrôle) ALORS
Erreur("La structure du fichier "+pNomLogiqueFichier+" n'a pas pu être mise à jour.", HErreurInfo(hErrComplet))
SINON
bOk = Vrai // car la modif a fonctionné
FIN
FIN
FIN
Posté le 24 novembre 2022 - 17:36
L'indirection est une bonne idée...malheureusement ça ne fonctionne toujours pas.

Pour résumer:
J'ai une base HFSQL sur le téléphone de 50 tables.
Je modifie sur le PC la table n°6 (rajout d'un champ texte)
Je compile, je déploie => le table 6 n'est pas mise à jour.
Pas de message d'erreur.
En tracant, je m'aperçois que les 5 premières table sont examinées, mais que la table 6 fait sortir de la boucle.
Les 44 tables suivantes ne sont pas examinées.

Toujours pas de solution...
Membre enregistré
328 messages
Posté le 25 novembre 2022 - 08:36
Désolé d'insister : est-ce que tu récupères le code erreur dans le QUAND EXCEPTION est quel est-il (ExceptionInfo(errCode)) ?
Posté le 25 novembre 2022 - 08:52
Merci pour le temps...

Et bien non justement, aucun message d'erreur...!!!

Il passe bien dans ExceptionInfo(errCode) = 70016, mais il y a sortie de boucle...sur la table modifiée.
Membre enregistré
328 messages
Posté le 25 novembre 2022 - 10:14
Quelque-soit le paramètre de HModifieStructure (la constante hmsXXXX) ? Peut-être aussi que l'opération se fait en arrière plan : une petite temporisation (style Multitâche(-100)) serait à tenter entre chaque fichier.

Sinon j'ai une autre idée. Une ré-indexation préalable pourrait peut-être résoudre le problème ...
Posté le 25 novembre 2022 - 11:37
Quelque soit la constante hmsXXXX, cela ne change rien

J'ai rajouté des tempo, toujours rien.

En fait dès qu'une table dont la structure n'est pas identique, code: 70016, on sort du code de vérification.
FAIRE
bOk = Faux
SI ExceptionInfo(errCode) = 70016 ALORS
FichierLog("0.Flag:" + bOk)
Multitâche(-100)
SI HRéindexe({sNomUnFichier,indFichier}, hNdxNormal) = Faux ALORS
Erreur(HErreurInfo(hErrComplet))
FichierLog(HErreurInfo(hErrComplet))
SINON
FichierLog("1.Flag:" + bOk)
FIN
Multitâche(-100)
SI PAS HModifieStructure({sNomUnFichier,indFichier},hmsSansContrôle) ALORS
Erreur("La structure du fichier "+sNomUnFichier+" n'a pas pu être mise à jour.", HErreurInfo(hErrComplet))
FichierLog(HErreurInfo(hErrComplet))
SINON
FichierLog("La structure du fichier "+sNomUnFichier+" a été mise à jour.")
bOk = Vrai
FIN
FichierLog("2.Flag:" + bOk)
FIN
FIN


Pour mettre à jour 100 téléphones, c'est la galère ;(

Peut être la surcouche Samsung??
Posté le 25 novembre 2022 - 11:53
La sortie LOG donne ça

2022112511492723 - 1-|-Table1
2022112511492724 - 2-|-Table2
2022112511492726 - 3-|-Table3
2022112511492727 - 4-|-Table4
2022112511492729 - 5-|-Table5
2022112511492731 - 6-|-Table6
2022112511492734 - 0.Flag:0


en fin de Procédure j'ai:
SINON
FichierLog("La structure du fichier "+sNomUnFichier+" a été mise à jour.")
bOk = Vrai
FIN
FichierLog("2.Flag:" + bOk)
FIN
FIN
FIN
FichierLog("3.Flag:" + bOk)
HFerme("*")
RENVOYER bOk


Le code FichierLog("3.Flag:" + bOk) n'est même pas executé!!
Membre enregistré
328 messages
Posté le 25 novembre 2022 - 12:26
Regarde ce qu'avait codé @Emmanuel MILLOT : il avait AUSSI mis le HModifieStructure dans un QUAND EXCEPTION. Tu peux ré-essayer en retirant la réindexation et en ajoutant ce 2ème niveau de gestion d'exception. Ce serait intéressant de savoir où il en est à sujet d'ailleurs.

Je pense à autre chose, la connexion à la base donne-t-elle les droits d'accès nécessaires aux fichiers à traiter avec HModifieStructure ?
Posté le 25 novembre 2022 - 15:53
Il est interdit de déclarer un traitement d'exception à l'intérieur d'un autre traitement d'exception...

Si je mets tout seul, sans SI ExceptionInfo(errCode) = 70016 ALORS
HModifieStructure({sNomUnFichier,indFichier},hmsSansContrôle)


même chose, dès que le code examine une table avec structure modifié, il sort...et continue sans planter!!!

La table n'est pas modifiée.
Que ce soit avec : hmsNormal, hmsSansContrôle ou hmsTâcheDeFond

J'ai même essayé un
HModifieStructure("*",hmsSansContrôle)

directement dans le code, ça ne fait strictement rien...même pas une erreur!!
Posté le 25 novembre 2022 - 16:04
PC Soft me répond: Il n'est as nécessaire de tester si la structure des fichiers et valide ou non, la fonction HModifieStructure fera le nécessaire...

OK, mais j'avis enlevé le
HVérifieStructure("*", hIdentique)


C'est l'impasse du vendredi soir...;(
Posté le 25 novembre 2022 - 16:49
J'ai utilisé le code de @Emmanuel MILLOT
POUR TOUTE chaîne sNomUnFichier de sListeFichier SEPAREE PAR RC
QUAND EXCEPTIONEXCEPTION DANS
bOk = HCréationSiInexistant(sNomUnFichier)
SI PAS bOk ALORS

FIN
FAIRE
bOk = Faux
FIN

SI PAS bOk ALORS
bOk = Vrai
HFerme(sNomUnFichier)
Multitâche(-100)

QUAND EXCEPTIONEXCEPTION DANS
SI PAS HModifieStructure({sNomUnFichier,indFichier},hmsTâcheDeFond) ALORS
bOk = Faux
sListeDesErreurs += [RC]+"1.HModifieStructure("+sNomUnFichier+",hmsNormal,Null,"")"+RC+Répète("-",50)+RC+HErreurInfo()+[RC]+Répète("-",50)
FIN
FAIRE
bOk = Faux
sListeDesErreurs += [RC]+"2.HModifieStructure("+sNomUnFichier+",hmsNormal,Null,"")"+RC+Répète("-",50)+RC+ExceptionInfo()+[RC]+Répète("-",50)
FIN
FIN

FIN


Et effectivement j'ai une erreur au sujet de ma Table6 à structure différente: Impossible de renommer le fichier dans le cache
Posté le 20 décembre 2022 - 10:35
Bonjour STZ,
As-tu fini par trouver la solution pour ce foutu hmodifiestructure qui ne fonctionne pas ?
Moi je suis toujours dans l'impasse pour info...
Posté le 27 décembre 2022 - 13:38
Bonjour,

Voici un petit bout de code qui fonctionne chez moi.

Perm1 est une Permission
Perm1 = PermissionListe(permGestionStockageExterne)
SI PAS Perm1.Accordé ALORS
PermissionDemande(Perm1, ProcDemandePermission)
Multitâche(-5s)
FIN

Perm1 = PermissionListe(permEcritureStockageExterne)
SI PAS Perm1.Accordé ALORS
PermissionDemande(Perm1, ProcDemandePermission)
Multitâche(-5s)
FIN

SI nEtat1 = sysCarteDisponible ALORS
sRep = SysRepCarteStockage()
FIN
sRep = sRep +[fSep()] + "Danae_Mobile"
SI PAS fRépertoireExiste(sRep) ALORS
fRepCrée(sRep)
FIN

ToastAffiche("Lancement de la modification des fichiers",toastCourt,cvMilieu,chCentre)
SI PAS fRépertoireExiste(sRep+"\backup\") ALORS
SI PAS fRepCrée(sRep+"\backup\") ALORS
ToastAffiche("Problème de création du backup")
RETOUR
FIN
FIN
HFerme("*")
HChangeRep("*",sRep)
fSupprime(sRep+"\backup\*.*",frLectureSeule)

HModifieStructure( "*" ,hmsNormal,"1Pass4DB*",sRep+"\backup\")


En espérant vous avoir aidé.
Posté le 02 janvier 2023 - 11:41
Bonjour et boçnne année!! :merci:

Je vais tester ce bout de code.

En réponse, et non je n'ai toujours pas réussi à modifier atomatiquement mes structures de tables!!!
Membre enregistré
964 messages
Popularité : +16 (20 votes)
Posté le 03 janvier 2023 - 10:42
Salut à tous
Je prends le fil en route.
Une question ; tu utilises quelle version de Android ? En effet, jusqu'à Android 10, si l'on prenait soin d'installer ses bases dans un dossier isolé de ceux de l'application, après que celle-ci ait été réinstallée (nouvelle version avec éventuellement des modifications dans le schéma de la base) HmodifieStructure avait tout son sens car on pouvait reconnecter son ancienne base et la mettre à jour.
Depuis Android 11 (voir https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windevmobile/43782-conservation-fichiers-entre-deux-installations-reve-pas/read.awp…), on ne peut plus isoler ses bases en dehors de l'espace de l'application. La base est donc supprimée lors des réinstallations. C'est bien dommage mais malheureusement c'est comme çà.
Comme la base est récréée à chaque installation, on n'a plus besoin d'utiliser hmodifiestructure.

--
Pascal Boulesteix
Applications Visiolittoral et WNat
Membre enregistré
796 messages
Popularité : +40 (42 votes)
Posté le 03 janvier 2023 - 14:12
Bonjour, si vous mettez à jour l'application, la base de données n'est pas supprimée. Donc hmodifiestructure est nécessaire si vous avez mis à jour sa structure.

Rubén
Membre enregistré
964 messages
Popularité : +16 (20 votes)
Posté le 03 janvier 2023 - 17:17
Ah OK,
Personnellement, sauf pour les tests internes, je n'ai jamais eu de bouton "Mettre à jour".

--
Pascal Boulesteix
Applications Visiolittoral et WNat
Membre enregistré
796 messages
Popularité : +40 (42 votes)
Posté le 09 janvier 2023 - 18:23
Bonjour, mise à jour du bouton ? Je pensais que la mise à jour se faisait depuis le Google Play Store. Lorsque vous le mettez à jour à partir de là, vous n'avez rien d'autre à faire. Il conserve vos données et vous pouvez utiliser hmodifiestructure si nécessaire. Si vous faites une mise à jour manuelle et que c'est la même application, il ne devrait pas y avoir de problème non plus.

Rubén
Posté le 12 janvier 2023 - 11:36
Bonjour,

Personnellement lors d'une modification de structure (changement de type, nouvelle table...) et le déploiement via un apk, la base ne se met pas à jour.
Mon application est dans le répertoire Phone, et non Card, tout comme la base de données.
C'est hyper gênant, aux vues des nouvelles modifications que je mets en place régulièrement.
Je suis obligé, de resynchroniser la base de chaque téléphone (un parc de 120 tél !!!), sur mon PC à chaque fois.

Ou je suis passé à côté d'une solution, ou c'est vraiment aberrant en 2023 de devoir procéder de la sorte.

A suivre...
Posté le 12 janvier 2023 - 11:36
Bonjour,

Personnellement lors d'une modification de structure (changement de type, nouvelle table...) et le déploiement via un apk, la base ne se met pas à jour.
Mon application est dans le répertoire Phone, et non Card, tout comme la base de données.
C'est hyper gênant, aux vues des nouvelles modifications que je mets en place régulièrement.
Je suis obligé, de resynchroniser la base de chaque téléphone (un parc de 120 tél !!!), sur mon PC à chaque fois.

Ou je suis passé à côté d'une solution, ou c'est vraiment aberrant en 2023 de devoir procéder de la sorte.

A suivre...