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 :

HChangeRep non respecté en C/S


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    Ingé Indus
    Inscrit en
    Juillet 2014
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingé Indus
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 107
    Par défaut
    Citation Envoyé par xavier.ninane Voir le message
    Je suis (mal)heureusement arrivé à créer un projet ab initio qui permet de reproduire exactement le soucis que je rencontre.
    Cool ...

    Bon alors en 51t.
    Je confirme, en prenant l'exemple tel quel, ca merde.
    Pour être précis:
    - oui: 3 produits sont supprimé de ".\1\Compta\2015\Produit.FIC" et non pas dans ".\1\Compta\Produit.FIC" comme attendu.
    - oui HChangerep() retourne Vrai, oui Produit..Répertoire est le bon ensuite
    - oui, très bizzare: si on passe en pas à pas sur le code, tout va bien.
    - oui un changeconnexion permet de contourner le problème.
    - contrairement a vos indications, je ne tombes jamais sur le message "enregistrement supprimé", ni le STOP
    - J'ai systématiquement l'erreur de modification de donnés que vous indiqué, mais la valeur de ma modif est vide (normal vu que la ligne est commentée)

    Je pense cerner le problème:
    Un Hferme() ne change rien.
    En revanche, un HOuvre() ou un HCréationSiInexistant() après le HChangeRep() résout le problème.

    Le déroulement:
    1. Ouverture de la connexion
    2. chemin = ".\"
    3. HChangeRep(Produit, ".\1\Compta\")
    4. a priori ok, mais fichier pas utilisé
    5. HChangeRep(Produit, ".\1\Compta\2015\")
    6. Changement bien effectif (avec des contenus différents c'est plus simple a voir)
    7. HChangeRep(Produit, ".\1\Compta\")
    8. Windev dis que c'est bon, mais pas vraiment
      1. Si on fait rien, la suppression sera dans le 2015: pas bien
      2. si on lit d'abord une données: Youpi on est dans le bon fichier, la suppression ce fera on bon endroit!
    9. Par contre, vous effacer dans LigneFacture
    10. HChangeRep(LigneFacture, ".\1\Compta\")
    11. Windev dit que c'est bon, mais pas vraiment
    12. on fait comme pour Produits et c'est réglé ? Heu, et bien ca marche pas ... le changement ne ce fait pas ...




    Mon analyse est qu'il semble que PCSoft est oublié certains cas de réouverture automatique d'un fichier lors de son premier accès.
    De même qu'une simple case à cocher dans les propriétés du projet permet d'oublier la fonction HCréationSiInexistant()

    Au final, j'ai surcharger la fonction HChangeRep:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PROCEDURE HChangeRep(sdNomFic est une Source de Données, sRep est une chaîne)
     
    SI WL.HChangeRep(sdNomFic, sRep) = Faux ALORS Erreur("Impossible de changer le rep: " + sdNomFic)
    // créer le fichier si besoin ET OUVRE le fichier // HOuvre fera le même effet
    SI HCréationSiInexistant(sdNomFic) = Faux ALORS Erreur("Impossible d'ouvrir: " + sdNomFic)
    Ainsi, l'(ré)ouverture du fichier est explicite et cela ne pose plus de problème.
    Le changementConnexion a le chemin = ".\" à l'ouverture de la connexion.


    HChangeRep() indique que tout ce passe bien, c'est le cas quand le fichier pointé au paravent n'existait pas ou n'as j'amais été ouvert/accéder.
    Ainsi, HChangeRep() peut ne pas avoir d'effet.

    Par ailleurs les exemples de HChangeRep() sous tous accompagné d'un HCréation() ou HCréationSiInexistant() ...
    Il a peu-être obligation implicite d’enchaîner ces deux fonctions.


    Bon aller, un pause maintenant

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 121
    Par défaut
    Citation Envoyé par yoshi570 Voir le message
    Cool ...

    Bon alors en 51t.
    Je confirme, en prenant l'exemple tel quel, ca merde.
    Ouf : c'est bien une hérésie Windevienne

    Citation Envoyé par yoshi570 Voir le message
    - contrairement a vos indications, je ne tombes jamais sur le message "enregistrement supprimé", ni le STOP
    Le test ne lance pas le debug à la ligne 55 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SI Produit.IDProduit = 9 ALORS STOP
    Autrement dit, le comportement diffère entre chez vous et chez moi

    Citation Envoyé par yoshi570 Voir le message
    - J'ai systématiquement l'erreur de modification de donnés que vous indiqué, mais la valeur de ma modif est vide (normal vu que la ligne est commentée)
    Cela confirmerait que le comportement n'est pas reproduit à l'identique.


    Citation Envoyé par yoshi570 Voir le message
    Mon analyse est qu'il semble que PCSoft est oublié certains cas de réouverture automatique d'un fichier lors de son premier accès.
    Votre théorie est séduisante. Je vous avoue que je suis un peu fatigué et que je n'ai pas le recul pour l'analyser plus finement.
    Notamment en regard du fait que si la procédure stockée n'est pas utilisée (en lieu et place, on utilise une procédure propre au projet), tout se déroule correctement.
    Et cette apparition d'un "utilisateur fantôme" est tout de même intriguant...

    Citation Envoyé par yoshi570 Voir le message
    Par ailleurs les exemples de HChangeRep() sous tous accompagné d'un HCréation() ou HCréationSiInexistant() ...
    Il a peu-être obligation implicite d’enchaîner ces deux fonctions.
    Je pense pouvoir être catégorique en affirmant qu'il ne faut pas utiliser explicitement ces fonctions, en tout cas avec un HEnregistre, dans la mesure où j'utilise le HEnregistre à de nombreux endroits après avoir fait un HChangeRep et sans HCréation, et que jamais je n'ai noté d'erreur de pointage vers le fichier concerné.

    Je garde l'intuition que l'appel à une procédure stockée, laquelle utilise une connexion, fout le berzingue dans le cœur de HFSQL.

    En tout cas merci de votre contribution et d'avoir pris la peine de tester le projet !

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