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 :

Utilisation de HCopieFichier(..) [WD22]


Sujet :

WinDev

  1. #1
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 327
    Points : 3 840
    Points
    3 840
    Par défaut Utilisation de HCopieFichier(..)
    Bonjour à tous,

    J'ai une application qui tourne sur un serveur HFSQL.
    Certains utilisateurs peuvent récupérer la base en local sur leur poste pour continuer à travailler dessus sans être connecté.

    Le problème que je rencontre lors de la récupération :
    Si un fichier est utilisé par un autre utilisateur, HCopieFichier(..) renvoie une erreur.
    Mais si je relance le HCopieFichier(..), l'erreur suivante apparaît et je ne sais quoi en faire , c'est-à-dire quel traitement doit être fait ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Une erreur de blocage est survenue sur la fonction 'HCopieFichier' précédente et n'a pas été traitée.
    Merci pour votre aide

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 174
    Points : 287
    Points
    287
    Par défaut
    Bonjour;
    PC Soft conseille de bloquer le fichier en lecture/écriture avant de le copier.

    je ne l'ai jamais utilisé, mais prochainement c'est sûr que je vais le faire.

    essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    si pas HCopieFichier  alors ToastAffiche

    Bon Dev.

  3. #3
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 327
    Points : 3 840
    Points
    3 840
    Par défaut
    oui j'avais lu mais le problème vient que certains fichiers sont déjà en cours d'utilisation par d'autres utilisateurs avant la copie.

    Le premier passage du HCopieFichier(..) me permet de récupérer l'erreur et d'informer à l'utilisateur qui synchronise que tel fichier est en cours.
    Si le fichier est fermé, le deuxième passage me renvoie l'erreur que j'ai indiqué dans mon premier message.

    Quel traitement est attendu dans ce cas ?

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 174
    Points : 287
    Points
    287
    Par défaut
    Re :

    Pas tester :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SI HBloqueFichier(NomFichier, hBlocageLectureEcriture) = Faux ALORS
    	Info("Fichier bloqué par un autre Utilisateur.")
    SINON
    	SI PAS HCopieFichier(.............) ALORS
    		Erreur(HErreurInfo(hErrComplet))
    	FIN
     
    FIN
    si c'est possible de tester comme ça, car bientôt j'en aurai besoin.

    merci d'avance.

  5. #5
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 327
    Points : 3 840
    Points
    3 840
    Par défaut
    Ah oui pas bête en effet
    Je teste ça et te redis.

  6. #6
    Membre confirmé
    Homme Profil pro
    Admin - Gestion reconverti en informatique
    Inscrit en
    Septembre 2017
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Admin - Gestion reconverti en informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 328
    Points : 493
    Points
    493
    Par défaut
    Bonsoir,

    Comme précisé par fouedusa, au lieu de passer directement à HCopieFichier, commencez par bloquer le fichier,
    si cela réussisse, c'est bon faire la copie du fichier.

    Concernant l'erreur de blocage non traitée :
    vous avez 2 processus qui accèdent en même temps à la base de données, en local et en serveur HFSQL
    utiliser la fonction HSurErreur, peut être ça va fonctionner.

    dans le code de projet :
    HSurErreur("*",hErrBlocage,"ErreurBlocage")

    rajouter une procédure globale ErreurBlocage()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    PROCEDURE ErreurBlocage()
    Info("une erreur de blocage est survenue","et vient d'être annulée")
    RENVOYER opAnnuler

  7. #7
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 327
    Points : 3 840
    Points
    3 840
    Par défaut
    J'ai dû mal m'exprimer :
    2 utilisateurs :
    - les 2 sont connectés à l'instant t sur le serveur
    - le user 1 est sur une fiche client
    - le user 2 va synchroniser pour récupérer la base en local

    Ce qui veut dire que je ne peux pas bloquer le fichier Client car utilisé par le user 1, donc à part tester que le fichier n'est pas déjà bloqué, je ne vois pas quoi faire.

  8. #8
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 174
    Points : 287
    Points
    287
    Par défaut
    Bonjour;
    et si on améliore un peu l'algorithme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SI HBloqueFichier(NomFichier, hBlocageLectureEcriture) = Faux ALORS
    	SI HErreurBlocage() = Vrai ALORS
    		Info("Les données auxquelles vous voulez accéder sont actuellement bloquées par un AUTRE Utilisateur.",...
    		"Vous pouvez réessayer d'y accéder un peu plus tard OU Annuler l'opération.")
    	FIN
    SINON
    	SI PAS HCopieFichier(.............) ALORS
    		Erreur(HErreurInfo(hErrComplet))
    	FIN
    	HDébloqueFichier()
    FIN
    toujours la même remarque : pas tester

    Bon Dev

  9. #9
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 327
    Points : 3 840
    Points
    3 840
    Par défaut
    oui bien sûr c'est ce que j'aurai fait.

    merci ^^

  10. #10
    Membre confirmé
    Homme Profil pro
    Admin - Gestion reconverti en informatique
    Inscrit en
    Septembre 2017
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Admin - Gestion reconverti en informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 328
    Points : 493
    Points
    493
    Par défaut
    Bonjour,

    Citation Envoyé par Lo² Voir le message
    Ce qui veut dire que je ne peux pas bloquer le fichier Client car utilisé par le user 1, donc à part tester que le fichier n'est pas déjà bloqué, je ne vois pas quoi faire.
    par exemple, envoyer un message aux utilisateurs pour qu'ils libèrent le fichier client

  11. #11
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 327
    Points : 3 840
    Points
    3 840
    Par défaut
    Le problème n'est pas ce que je peux faire si je rencontre le cas, je sais faire.

    Le problème est qu'attends/entend Windev par le fait que le HCopieFichier(..) en erreur n'a pas été traité !
    Car j'aurai bon envoyé des messages, des fleurs ou autre, ce message apparaîtra sauf en testant un HBloqueFichier(..) avant et donc de ne pas avoir d'erreur sur un HCopieFichier(..).

  12. #12
    Membre confirmé
    Homme Profil pro
    Admin - Gestion reconverti en informatique
    Inscrit en
    Septembre 2017
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Admin - Gestion reconverti en informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 328
    Points : 493
    Points
    493
    Par défaut
    Citation Envoyé par Lo² Voir le message
    Le problème est qu'attends/entend Windev par le fait que le HCopieFichier(..) en erreur n'a pas été traité !
    Effectivement le message d'erreur qui apparait, après une 2ème tentative est bizarre.
    Il se pourrait que la gestion automatique des erreurs hfsql de windev a été désactivée.
    Pour mieux contrôler ce problème, je vous ai proposé de personnaliser la gestion de l'erreur de blocage, suivant mon premier message.
    Ainsi, dès que l'erreur de blocage survient, la procédure ErreurBlocage() se lance pour renvoyer l'action Annuler.

  13. #13
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 327
    Points : 3 840
    Points
    3 840
    Par défaut
    En tout cas, en passant par la gestion de l'erreur de blocage, couplé avec le hBlocageFichier(..) permet une sortie propre du traitement.
    Merci à tous

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonjour la famille.
    Perso, j'aurais procédé autrement : lorsque l'utilisateur se connecte au réseau, l'application va générer un fichier au format XML / CSV / autre sur le serveur, ce fichier contiendra toutes les données à importer dans la base HFSQL, sur le serveur, un service va analyser les fichiers à importer, l'importation se ferait dans une transaction une fois le fichier traité, il est alors supprimé.

  15. #15
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 327
    Points : 3 840
    Points
    3 840
    Par défaut
    Hello,

    Ca s'est pour la partie synchro local vers serveur et je n'ai pas de problématique à ce niveau, c'est dans l'autre sens.
    Par contre ta remarque me fait penser à une fonction que j'ai vu hier HVersFichier(..) et que je vais essayer pour mon cas.

    Ce que j'en vois de son utilisation, c'est que si un fichier est bloqué, au lieu d'afficher un message pour dire qu'un autre user est dessus, c'est de faire un "select * " du fichier puis de faire un HVersFichier(..) et là à mon avis, si ça marche c'est tout bon et les synchro serveur vers local pourront se faire sans contrainte , mais je vous redis ça.

  16. #16
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 327
    Points : 3 840
    Points
    3 840
    Par défaut
    It works !!

    Ci-dessous mon code :
    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
    29
    30
    31
    32
    33
    34
    35
     
    // Je gère déjà le blocage avec une fenêtre maison, donc je désactive
    HSurErreur("*", hErrBlocage, "")
    POUR TOUTE CHAÎNE sFichier DE sListeFichiers SEPAREE PAR RC
    	SI PAS HBloqueFichier(sfichier) ALORS
    		bOK est un booléen = Vrai
     
    		sSQL est chaîne = "SELECT * FROM " + sFichier
    		maSourceDonnees est une Source de Données
    		SI HErreurBlocage() _ET_ HExécuteRequêteSQL(maSourceDonnees, hRequêteDéfaut, sSQL) ALORS
                            // Il faut supprimer les fichiers au préalable
    			SI fSupprime(sCheminDonnéesLocal + sFichier + ".*") ALORS
    				HVersFichier(maSourceDonnees, sCheminDonnéesLocal + sFichier + ".fic")
    			SINON
    				bOK = Faux
    			FIN
    		SINON
    			bOK = Faux
    		FIN
     
    		SI PAS bOK ALORS
    			SI HErreurBlocage() ALORS
    				Avertissement("Le fichier en cours de traitement (" + sfichier + ") est en cours d'utilisation.", "Vérifiez sur les autres postes que soit la fenêtre (ou le logiciel) soit fermée avant de reprendre la synchronisation.")
    			FIN
                            // Je réactive ma fenêtre maison
    			HSurErreur("*", hErrBlocage, FEN_Blocage)
    			RENVOYER Faux
    		FIN
    	SINON
    		HCopieFichier("", sCheminDonnéesLocal + sFichier + ".fic", maConnexionHFSQL, sFichier + ".fic")
    		HDébloqueFichier(sfichier)
    	FIN
    	iCpt++
    FIN
    HSurErreur("*", hErrBlocage, FEN_Blocage)
    Merci à tous pour votre contribution.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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