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 :

HCopieFichier - Erreur avec la constante hCréeIndex


Sujet :

WinDev

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 117
    Points : 90
    Points
    90
    Par défaut HCopieFichier - Erreur avec la constante hCréeIndex
    Bonjour,

    Je mets en place la copie de plusieurs fichiers (typiquement, une clôture comptable). Pour ce faire, je parcours en boucle un tableau qui contient les fichiers .fic concernés. Les connexions, répertoire de destination et source sont contenus dans des variables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        POUR TOUT lsaFichier DE ltabTableauFic
                         SI HCopieFichier(gcnxConnexionServer,lsaRepDestination + lsaFichier,gcnxConnexionServer,lsaRepRacinesSource + lsaFichier,hCopieIndex) ALORS
                          lblCopieRéussie = Vrai
                         FIN
            FIN
    Si j'utilise cette ligne de code avec la constante hCopieIndex ou la constante hSansIndex, pas de soucis : la copie se passe bien.

    Par contre, la constante hCréeIndex me renvoie systématiquement un message d'erreur du type
    "Que s'est-il passé ?
    Erreur renvoyée par le serveur <w8-fixe:4900> :
    Impossible d'écrire dans le fichier <BD\4\Compta\ecriture.fic>.

    Code erreur : 70152
    Niveau : erreur fatale (EL_FATAL)
    Code erreur WD55 : 152

    Message d'erreur système :
    Accès refusé.
    "

    Ce qui m'interpelle, c'est que cette erreur fait allusion au fichier source ?!?
    Pourquoi la fonction de copie doit avoir accès (et écrire sur) au fichier source ?

    Et, cerise sur le gâteau, malgré le message d'erreur, le .fic est bien copié, mais sans index (ou index corrompu), et les index du fichier source sont eux aussi corrompus ?!?

    Quelqu'un a une idée de ce qui se passe ? Est-ce que j'ai loupé une "subtilité" ?
    L'aide précise pour hCréeIndex : "Le ou les index du fichier de données ne sont pas copiés (fichier NDX et fichier FTX s'il existe). Ils sont automatiquement re-créés sur la destination par ré-indexation.
    Si le fichier de données est protégé par mot de passe, le paramètre <Mot de passe> doit être spécifié.
    "

    J'avoue ne vraiment pas comprendre...

    D'avance merci.

    Cordialement.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Bonjour, peut être que le problème vient d'une connexion ouverte sur la BDD.
    Essayez Hdeconnecte avant votre hcopiefichier pour vérifier que ca ne provient pas de la.

  3. #3
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    S'il se déconnecte, il n'aura plus accès à la base (HcopieFichier est une fonction Hxxxx).

    Ne serait-ce pas une histoire d'intégrité ?

    Pour tester cela, je ferais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    hgereintégrité(xxx,faux)
    HcopieFichier(xxx,....,hcopieIndex)
    hgereintégrité(xxx,vrai)
    Ce n'est pas très propre mais logiquement, mais c'est un test.

    Pour être plus "carré", il te reste la possibilité de passer par un alias (halias), et de copier le contenu de ton fichier source vers cet alias.

    Tu es en HFCS ou en classic ?
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 117
    Points : 90
    Points
    90
    Par défaut
    Concernant une connexion ouverte, la seule qui est ouverte est la mienne, et j'en ai effectivement besoin pour lancer la commande HCopieFichier.
    Les fichiers sont par ailleurs libérés.
    Donc, je doute que ce soit un problème de connexion.

    Concernant l'intégrité, pourquoi pas... Mais ce n'est pas une erreur de violation d'intégrité que le serveur me retourne, mais une erreur d'accès. De plus, l'intégrité se vérifie au moment d'une modification/création d'un enregistrement, or une simple copie ne manipule pas les enregistrement (quoique, venant de PCSoft, je ne sais quel protocole ils utilisent derrière leur fonction HCopieFichier...)

    Toujours est-il que je viens de tester l’éventualité d'un problème d'intégrité en collant un HGèreIntégrité(Faux) en début de code et... NADA ! Toujours ce même message d'erreur

    Concernant le HAlias : je ne suis absolument pas à l'aise avec ces fonctions. J'ai déjà lu, et relu, et rerelu la doc et j'ai très difficile à appréhender le concept. Ça reste pour moi une des plus grandes nébuleuses de l'univers Windev...

    Je suis en C/S.

    Si une âme charitable pouvait faire un simple test chez lui, histoire d'évacuer l'éventualité d'un bug chez PCSoft : il me semble anormal que cette fonction touche aux index du fichier d'origine. (et y foute une mélasse sans nom)
    Je ferai également un test sur un autre projet.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 117
    Points : 90
    Points
    90
    Par défaut
    Testé sur un autre projet : rigoureusement le même message d'erreurs


  6. #6
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 329
    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 329
    Points : 3 841
    Points
    3 841
    Par défaut
    Hello,

    Histoire de te rassurer, je viens d'effectuer un test et je rencontre le même message ^^
    Plus de précision :
    - Si je ferme la connexion en cours, j'ai le message
    - Si je ne ferme pas la connexion, le fichier de copie est créé mais mon serveur C/S ne trouve pas de ndx correspondant


    Question : Pourquoi souhaites-tu copier sans les index ? C'est pour une histoire de durée ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 117
    Points : 90
    Points
    90
    Par défaut
    @Lo²

    De fait, il y avait cet aspect "durée", mais aussi l'intérêt de recréer les index (j'ai remarqué que même en réindexant, les fichiers d'index avaient une fâcheuse tendance à l'embonpoint).
    L'idée était également de copier ces fichiers, recréer ces index, et sortir ces fichiers de toute maintenance future de la base : ils reflètent une situation qui est figée, on n'écrira plus dedans.

    Et puis, ça c'est mon côté un peu obstiné : j'aime pas quand ça me résiste, j'aime comprendre...

    Je vais attendre encore peu, histoire de voir si un 3e larron rencontre également le problème, et je vais de toute façon faire remonter vers PCSoft.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Avez vous essayer ce code ci dessous :
    HClient.Base = NomBDD
    HDeconnecteClient(connexionBDD,"Deco",30)
    // la suite du code

    Et non hdeconnecteclient ne déconnecte pas le poste qui déclenche la commande (enfin pas en windev19)

    Si ce n'est pas ca, regardez du coté de l'utilisateur qui accède à la base. Si ce n'est pas "admin", vérifiez qu'il possède bien tous les droits sur la base de données mais ca m'etonnerait que ca soit cela.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 117
    Points : 90
    Points
    90
    Par défaut
    Je répète que je suis le seul à me connecter à la base. Donc, si HdéconnecteClient ne me déconnecte pas, je ne vois pas l'utilité.

    Comme je suis en phase de développement (raison pour laquelle je suis le seul connecté à cette base), je fais mes tests en qualité d'admin.

    Cependant, pour évacuer définitivement cette question de connexion : j'ai testé, le message d'erreur est rigoureusement le même.

    @Lo² : quand le fichier est copié, sans ses index, et avec le message d'erreur, peux-tu vérifier si tu as également un problème avec le .ndx du fichier source ? Merci.

  10. #10
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 329
    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 329
    Points : 3 841
    Points
    3 841
    Par défaut
    confirmé

  11. #11
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Pour le Halias, je peux te donner un exemple simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    sdIsaFichierDestination est une Source de Données
    SI HAlias(IsaFichierExistant, sdIsaFichier)  ALORS // alias = clone
    HchangeNom(sdIsaFichier, "IsaFichierNouveau") // on lui donne un beau nom à cet alias
    hchangerep(sdIsaFichier, lsaRepDestination) // on se place au bon endroit
    hcreation(sdIsaFichier) // on le crée
    pour tout IsaFichierExistant // on fait la copie
      hcopieenreg(sdIsaFichier,IsaFichierExistant)
      hajoute(sdIsaFichier)
    fin
    hannulealias(sdIsaFichier) // suppression de l'alias
    Une idée qui me vient : fais tu un hferme("*") avant le hcopiefichier ?

    Autre idée : Je pense que le fait d'être en C/S "limite" le hcopiefichier(). Tu ne dois pas avoir le droit (au sens droit utilisateur/programme:windows) de faire ce que tu veux dans le dossier dbb de manta.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 117
    Points : 90
    Points
    90
    Par défaut
    @Frenchsting : je viens d'essayer le HFerme => ça ne fonctionne toujours pas... J'ai fait remonter à PCSoft, je vais voir ce qu'ils disent, et je posterai leur réponse.

    Concernant le HAlias, une des étapes que je ne comprends pas, c'est pourquoi il faut faire un HChangeNom.
    L'aide de PCSoft est, je trouve, particulièrement mal rédigée pour HAlias et j'ai l'impression que leurs exemples ne sont pas très cohérents, ce qui n'aide pas à capter les concepts sous-jacents.

    Et quand je vois le nombre de lignes de codes nécessaires avec HAlias, il faut reconnaître que HCopieFichier est tout de même vachement (10 x ) plus rapide.

    Ceci dit, merci de ta tentative pour lever la brume qui entoure cette fonction.

  13. #13
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Tu es obligé de faire un hchangenom car comme le halias crée un clone du fichier d'origine, il a par définition, le même nom.
    Pour être complet, c'est un clone logique et pas physique. C'est pour cela que l'on fait un hchangenom (et éventuellement un hchangerep). Le hcreation permet de passer à la forme physique (vive le sport ).

    Je pense qu'au départ, les performances de HF étant limitées, cette fonction a été créée pour pouvoir faire de l'archivage (càd, vider les fichiers de travail).
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 117
    Points : 90
    Points
    90
    Par défaut
    @ Lo²

    Salut.

    Le support technique de PCSoft n'est pas arrivé à reproduire le problème (et ne m'a guère aidé, si ce n'est en me disant que le problème résidait dans mon projet, et bla, et bla, et bla)

    Comme tu as aussi rencontré ce soucis, et que je l'ai reproduit dans un autre projet, je me suis dit "Y a certainement qqch. qui déconne, mais où ?"

    J'ai donc créé un projet, à partir de rien, pour tenter de reproduire l'incident et l'envoyer au support technique.

    Et... Plus d'incident dans ce nouveau projet. A devenir dingue

    Je cherche pourquoi : j'ai importé mes descriptions de fichier, j'ai importé la procédure. Bref, tout à l'identique.
    Sauf un hCréationSiInexistant que j'avais placé à l'initialisation.

    Et donc : la fonction fonctionne parfaitement (avec la constante hCréeIndex) en utilisant préalablement un hOuvre ou un hCréationSiInexistant.

    Peux-tu refaire un petit test chez toi, et me confirmer la chose ?

    Merci.

  15. #15
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 329
    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 329
    Points : 3 841
    Points
    3 841
    Par défaut
    Hello,

    Avec un HOuvre(..) sur le fichier source, la copie s'effectue mais l'index est corrompu.

    Le code que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    HOuvre(monFichierCS)
     
    MaConnexionCopie est une Connexion
    MaConnexionCopie..Provider = MaConnexion..Provider
    MaConnexionCopie..Utilisateur = MaConnexion..Utilisateur
    MaConnexionCopie..MotDePasse = ""
    MaConnexionCopie..Serveur = MaConnexion..Serveur
    MaConnexionCopie..BaseDeDonnées = MaConnexion..BaseDeDonnées + "Copie"
     
    SI PAS HCopieFichier(MaConnexionCopie, ".\monFichierCSCopie.fic", MaConnexion, ".\monFichierCS.fic", hCréeIndex) ALORS
    	Erreur(HErreurInfo(hErrComplet))
    FIN

Discussions similaires

  1. Erreur avec procédure LockWorkStation ...
    Par simonseztech dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 16/08/2004, 15h33
  2. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 15h45
  3. Erreur avec les ADO
    Par megane dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/03/2004, 21h37
  4. Erreur avec WM_COMMAND (BN_CLICKED)
    Par cyberlewis dans le forum Windows
    Réponses: 2
    Dernier message: 09/02/2004, 00h25
  5. Réponses: 6
    Dernier message: 03/09/2003, 10h29

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