IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Problème de blocage de fichier [WD11]


Sujet :

WinDev

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 51
    Points : 32
    Points
    32
    Par défaut Problème de blocage de fichier
    Bonjour,

    Je rencontre des difficultés pour effacer un fichier de type .NDX dans mon application.
    Ce fichier est un index d'un fichier parcourui par une des table de mon application.

    J'ai essayer la fonction Ferme() mais le fichier physique sur le disque est toujours bloqué (Vérification faite avec le programme Unlocker)
    J'ai aussi essayer de faire MaTable..FichierParcouru = "" (le problème est que la table incriminée est dans une fenêtre qui est fermée donc cette syntaxe est impossible)

    Le but est de sauvegarder/restaurer selon les besoins des fichiers .FIC (charger par une table de mon application) stockés avec HAttacheMémo dans une autre table

    Ci-joint le code qui provoque une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    	// On génére un fichier ImportXLS.FIC vide
    	SI PAS HCréation(ImportXLS) ALORS
    		Info("Erreur : "+HErreur())
    	FIN
     
    	// Sélection du fichier XLS
    	SI PAS HExtraitMémo(Campagnes,FicXLSCamp,"./bases/ImportXLS.FIC") ALORS
    		Info("Erreur : "+HErreur())
    		RETOUR
    	FIN
     
    	// Suppression du fichier ImportXLS.NDX
    	TANTQUE PAS HFerme(ImportXLS) 
    		// Libération du fichier avant suppression
    	FIN
     
    	SI fFichierExiste("./bases/ImportXLS.NDX") ALORS
    		SI PAS fSupprime("./bases/ImportXLS.NDX") ALORS
    			Info("Erreur lors de la suppression de l'ancien fichier campagne (ImportXLS.NDX)" + RC + ErreurInfo())
    		FIN
    	FIN
     
    	// on ouvre le fichier pour provoqué la réindexation automatique
    	HOuvre(ImportXLS)
    	TANTQUE HRéindexationEnCours(ImportXLS)<>0
    		// Réindexation en cours ;)
    	FIN
    Cordialement
      0  0

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    Il faut, avec les fonctions HF, femer la connexion au fichier HFerme()
    Puis supprimer les fichiers .FIC et .NDX avec fSupprime("nomfichier.*")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    HFerme(Nom_Fich)
    SI PAS fSupprime("Nom_Fich.*") ALORS
    	Erreur("Fichier pas supprimé")
    FIN
      0  0

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 51
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par Guardian
    Il faut, avec les fonctions HF, femer la connexion au fichier HFerme()
    Puis supprimer les fichiers .FIC et .NDX avec fSupprime("nomfichier.*")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    HFerme(Nom_Fich)
    SI PAS fSupprime("Nom_Fich.*") ALORS
    	Erreur("Fichier pas supprimé")
    FIN
    Si tu regardes en détail mon exemple je fais bien un HFerme(ImportXLS)
    Donc ce n'est pas la solution à mon problème.
    De plus je ne veux surtout pas effacer le fichier .FIC mais uniquement le fichier .NDX
      0  0

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    1- Je n'ai pas décortiqué tout ton code, mais le code que j'ai mis fonctionne (testé)
    2- pour ne supprimer que le .NDX il suffit de faire fSupprime("Nom_Fich.ndx")
      0  0

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 51
    Points : 32
    Points
    32
    Par défaut
    C'est exactement ce que je fais
    Connaissez-vous une API qui permette de débloquer un fichier ?
      0  0

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    Non.
    Mais cela ne doit pas être nécessaire.

    Vous êtes sûr que tout ce qui est relatif à votre fichier est fermé dans votre projet ? Tables, saisie, Requête ?
      0  0

  7. #7
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    C'est quoi l'erreur quand tu fais un fsupprime ? Pour débloquer le fichier il faut utiliser HDebloque ou alors HFerme!
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]
      0  0

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 51
    Points : 32
    Points
    32
    Par défaut
    Le principe est simple (Pour mémo mes bases HF se trouve dans le répertoire /bases.)

    1) Je crée à zéro mon fichier (ImportXLS.FIC et ImportXLS.NDX)
    Ici tout est Ok, le fichier est bien crée à zéro.

    2) J'extrait d'un autre fichier HF le fichier ImportXLS.FIC
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HExtraitMémo(Campagnes,FicXLSCamp,"./bases/ImportXLS.FIC")
    Le fichier ImportXLS.FIC crée à l'étape 1 est remplacé par le fichier ImportXLS.FIC précèdement enregistrer dans mon fichier Campagnes.FIC.
    Ici encore tout est OK. Le fichier est bien remplacé.

    3) Je ferme mon fichier ImportXLS
    La fermeture se passe bien.

    4) Je teste l'existence du fichier ImportXLS.NDX
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fFichierExiste("./bases/ImportXLS.NDX")
    Ici tout est ok, le fichier est présent.

    5) si il est présent je le supprime
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fSupprime("./bases/ImportXLS.NDX")
    Mon erreur ce situe à ce niveau. Le fichier est bloqué par ma propre application quand je lance l'exécutable et par WDTST.EXE quand je lance mon application de l'environnement de développement.

    Ensuite "l'astuce" que j'ai mis en place ne fonctionne plus.
    En effet si Windev détecte un fichier .FIC sans son pendant .NDX, il ré-indexe automatiquement ce fichier quand on lance l'ouverture de celui-ci.
    Comme je n'ai pas réussi à supprimer le fichier .NDX j'ai de gros problème à l'utilisation du fichier ImportXLS dans mes tables.
      0  0

  9. #9
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Ca ne nous dis pas l'erreur exacte que tu as quand tu fais un fsupprime.

    Puis c'est la première fois que je vois que windev recrée automatiquement les fichiers .NDX si il ne le trouve pas...Normalement tu as un message d'erreur t'invitant à le reindexer.
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]
      0  0

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 51
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par hegros
    Ca ne nous dis pas l'erreur exacte que tu as quand tu fais un fsupprime.

    Puis c'est la première fois que je vois que windev recrée automatiquement les fichiers .NDX si il ne le trouve pas...Normalement tu as un message d'erreur t'invitant à le reindexer.
    Pour la recréation automatique ça fonctionne plutôt bien (En pas à pas en supprimant le fichier NDX après l'avoir débloquer pas de souci, dès qu'on ouvre un fichier FIC sans son NDX Windev s'occupe de tout. Pour l'anecdote j'ai au départ essayer de forcer moi-même la réindexation et la gros bug)

    Je retesterai mon code en essayant de traquer l'erreur renvoyée par fsupprime.
      0  0

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 51
    Points : 32
    Points
    32
    Par défaut
    Finalement j'ai opté pour l'extraction du fichier .FIC et du fichier .NDX.
    J'ai bien les bons fichiers maintenant.

    J'ai cependant encore un petit problème qui apparait de manière aléatoire.
    Quand j'ouvre dans une table les fichiers précedement importés j'ai l'erreur suivante:

    Le champ 'TABLE_ImportXLSTelNonTraite' n'a pas pu s'initialiser, car il a rencontré l'erreur Hyper File suivante :
    =============================
    Impossible d'accéder à l'enregistrement numéro <1> du fichier <C:\Huiphonie\Exe\bases\ImportXLS.FIC>. Une transaction ayant accédé à cet enregistrement a échoué et la transaction n'a pas encore été annulée. Vous devez annuler la transaction avant de pouvoir accéder à cet enregistrement. La transaction sera annulée lors du prochain HTransactionDébut. Vous pouvez aussi annuler la transaction par HTransactionAnnule.
    =============================


    Informations techniques

    Projet : AgenDAF 2

    Dump de l'erreur du module <WD110OBJ.DLL> <11.00Esi>.

    - Niveau : erreur fatale (EL_FATAL)

    - Code erreur : 10085

    - Code erreur WD55 : 34

    - Pas de code d'erreur système

    - Pas de message d'erreur système

    - Que s'est-il passé ?
    Le champ 'TABLE_ImportXLSTelNonTraite' n'a pas pu s'initialiser, car il a rencontré l'erreur Hyper File suivante :
    =============================
    Impossible d'accéder à l'enregistrement numéro <1> du fichier <C:\Huiphonie\Exe\bases\ImportXLS.FIC>. Une transaction ayant accédé à cet enregistrement a échoué et la transaction n'a pas encore été annulée. Vous devez annuler la transaction avant de pouvoir accéder à cet enregistrement. La transaction sera annulée lors du prochain HTransactionDébut. Vous pouvez aussi annuler la transaction par HTransactionAnnule.
    =============================

    - Infos de debug :
    iehf=5007

    - Infos attachées :
    EIT_LOGICALTABLENAME : <ImportXLS>
    EIT_RECNUM : <1>
    EIT_PATHFIC : <C:\Huiphonie\Exe\bases\ImportXLS.FIC>

    - Identifiant dans le .err : 10085


    Assistance

    - Consultez l'aide HF sur le probleme HF rencontré.
    - Vous pouvez tester si tout est correct avant d'ouvrir cette fenêtre en appelant HOuvre()
    - Si vous utilisez une requête, vérifiez qu'elle est bien initialisée.
    - Cette initialisation ne doit pas être dans le traitement de fin d'initialisation,
    mais dans le code d'initialisation du champ ou de déclaration de globales de la fenêtre.
    Je ne vois pas pourquoi j'ai une erreur de transaction alors que je ne fait qu'ouvrir et fermer les fichiers FIC et NDX
      0  0

  12. #12
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Y'a d'autres personnes qui accèdent au fichier sur le réseau ?
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]
      0  0

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 51
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par hegros
    Y'a d'autres personnes qui accèdent au fichier sur le réseau ?
    Non je suis le seul utilisateur
      0  0

  14. #14
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Annue la transaction avec l'outil WD...

    Mais regarde bien que dans ton code tu n'as AUCUN HTransactionDebut
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]
      0  0

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 51
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par hegros
    Annue la transaction avec l'outil WD...

    Mais regarde bien que dans ton code tu n'as AUCUN HTransactionDebut
    Le problème est que je n'utilise pas du tout les transactions dans mon projet
      0  0

  16. #16
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Citation Envoyé par slick42
    Le problème est que je n'utilise pas du tout les transactions dans mon projet
    Beh qui à bloquer l'enregistrement y'a un Casper de caché dans ton réseau alors

    Sérieusement tu as annulé la transaction et de refaire ton traitement...
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]
      0  0

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 51
    Points : 32
    Points
    32
    Par défaut
    Bon finalement je n'ai pas pu localiser le problème.
    J'ai essayé de fermer les transactions (qui ne sont jamais ouvertes ) de fermer les fichiers, de couper les liens des tables avec les fichiers, de mettre des temporisations... rien ne semble améliorer le code

    Vu la faible apparition du problème en fonctionnement (1 fois sur 10) j'utilise une parade avec les exceptions.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    QUAND EXCEPTION DANS
         Partie du code qui plante de temps en temps
    FAIRE
        Avertir l'utilisateur de relancer la fonction ultérieurement
    FIN
    J'informe l'utilisateur que la table est en cours d'utilisation sur le réseau (application en monoposte) et qu'il doit relancer ultérieurement la fonction.
      0  0

  18. #18
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Essaies d'envoyer sinon un protocole reproductible du probléme à PCSoft
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]
      0  0

  19. #19
    Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    J'ai rencontré le problème aujourd’hui et j'y est perdu une matinée.
    Après avoir fait des delete malencontreux et avoir coupé brutalement le tout, et il m'était impossible de franchir le démarrage de mon projet.
    Le projet se figeait sans bug et impossible de faire un point d'arret.

    J'ai identifié le problème sur une fonction HCréationSiInexistant que j'ai implémenté à l'initialisation. Cette fonction était sur la table "endommagé".
    En plus cela arrivait même après avoir supprimer la table physiquement.
    Celle-ci était était recrée et la transaction inachevé (opéré durant le delete) se relançait d'une manière ou d'une autre alors qu'aucune transaction n'était détecté dans le centre HyperFile !

    Bref, la misère ...

    J'ai du couper le service HyperFile et le service MantaManager pour pouvoir supprimer les tables de transactions concernés (celle de la table est les tables appelés TRSOperation ...).
    En jetant un coup d'oeil dedans via le CCHF, c'est la que j'ai vus les opérations obsolètes en stand-by.
    Attention, ces tables sont par défaut dans des dossiers cachés.


    Après suppression des tables, redémarrage des services et lancement du projet, tout c'est relancé normalement.

    En espérant que ça aidera d'autres gens ...
      0  0

Discussion fermée
Cette discussion est résolue.

Discussions similaires

  1. [FTP] Problème pour uploader un fichier
    Par Crazyblinkgirl dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 07/01/2008, 22h21
  2. problème écriture sur un fichier
    Par drinkmilk dans le forum MFC
    Réponses: 4
    Dernier message: 24/06/2007, 00h08
  3. Problème pour Télécharger des fichiers
    Par joce3000 dans le forum C++Builder
    Réponses: 8
    Dernier message: 21/01/2005, 10h30
  4. Réponses: 4
    Dernier message: 16/04/2004, 08h20
  5. [langage] Problème de taille de fichier à mettre dans
    Par And_the_problem_is dans le forum Langage
    Réponses: 10
    Dernier message: 13/08/2002, 09h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo