1. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

Copie des enregistrements d'une BDD HF vers Base de Données MySql distante

Discussion dans 'Windev' créé par karamaster, Jan 17, 2022.

  1. karamaster

    karamaster New Member

    Inscrit:
    Oct 26, 2021
    Messages:
    6
    J'aime reçus:
    0
    e dois faire une copie de ma base de données local HF vers une BDD MySql en ligne. Après une recherche sur le forum, j'ai trouvé une solution que j'ai adapté à mon cas.
    La connexion s'établit correction correctement à la BDD MySql sauf qu'il y a un soucis lors de la copie des données dans le tables en ligne. J'ai beau vérifier le code, je ne vois pas le problème au niveau de HCopieEnreg

    Voici mon code :
    SI HOuvreConnexion(MaCnx) = Vrai ALORS
    HChangeConnexion("*", MaCnx)
    gsListeTableHF= HListeFichier(
    TableHF = ExtraitChaîne(gsListeTableHF,rangPremier,RC)

    TANTQUE TableHF <> EOT
    HAlias(TableHF, "alias")
    HChangeNom(alias, TableHF)
    HChangeConnexion(alias , MaCnx_MySQl)

    HLitPremier(TableHF)
    TANTQUE PAS HEnDehors(TableHF)
    HCopieEnreg(alias, TableHF, hCopieIdAuto )
    SI HAjoute(alias, hFixeIdAuto)
    Trace(TableMYSQL+" ajouté")
    SINON
    Erreur(HErreurInfo(hErrComplet))
    FinProgramme()
    FIN
    HLitSuivant(TableHF)
    HAnnuleAlias(alias)
    FIN

    TableHF = ExtraitChaîne(gsListeTableHF, rangSuivant,RC)
    FIN
    FIN

    Le message d'erreur est le suivantLa source de données <_SOURCE_alias_1> n'est pas initialisée.
    - S'il s'agit d'un fichier de données, le fichier n'a pas été trouvé dans l'analyse ou n'a pas été décrit avec les fonctions HDéclare / HDéclareExterne.
    - S'il s'agit d'une requête ou d'une vue, l'exécution a peut-être échoué.
    Pour récupérer l'erreur correspondante, testez le résultat des fonctions HExécuteRequête / HExécuteRequêteSQL / HCréeVue.
     
    Tags:
  2. Dandypunk

    Dandypunk Well-Known Member

    Inscrit:
    Nov 28, 2019
    Messages:
    598
    J'aime reçus:
    328
    Bonjour,
    Le WL considère que le nom de la source est TableHF et non son contenu (le nom de la table).
    Il faut passer par une indirection
     
  3. karamaster

    karamaster New Member

    Inscrit:
    Oct 26, 2021
    Messages:
    6
    J'aime reçus:
    0

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour,
    Le WL considère que le nom de la source est TableHF et non son contenu (le nom de la table).
    Il faut passer par une indirection
    Cliquez pour agrandir...
    Merci pour ta réponse. Comment le faire ?
     
  • Gemini1961

    Gemini1961 Well-Known Member
    MEMBRE WX DUMP TEAM

    Inscrit:
    Jan 2, 2018
    Messages:
    578
    J'aime reçus:
    867
    Bonjour

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Lire la documentation est parfois très utile :)

    Voici le lien vers la solution de ton problème ;-)

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Bien Cordialement
     
    Isabelle apprécie ceci.
  • DomergueR

    DomergueR New Member

    Inscrit:
    Juin 21, 2018
    Messages:
    18
    J'aime reçus:
    5
    Fais une requête sur la première table.
    Parcours cette requête pour copier et ajouter les enregistrements dans l'autre table.
    De cette façon tu n'as pas besoin de changer de connexion entre chaque enregistrement.
     
  • karamaster

    karamaster New Member

    Inscrit:
    Oct 26, 2021
    Messages:
    6
    J'aime reçus:
    0

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    L'exemple devrait beaucoup t'aider.
    Cliquez pour agrandir...
    Merci beaucoup pour ton aide.
    j'ai réussi à faire la copie dans la BDD. Voici mon code

    gsListeTableHF, TableHF, sCleSource est une chaîne
    bConnecter est un booléen = Faux
    AccesMySQL est un c_Php4WX
    alias est une Source de Données
    SI InternetConnecté() ALORS

    //Connexion via Php4WX
    AccesMySQL:TypeBase = "PDOMySQL"
    AccesMySQL:CleCryptage = "MACLE"
    AccesMySQL:CryptRetour = Faux
    AccesMySQL:CrypteReq = Vrai
    AccesMySQL:methodeZip = Faux
    AccesMySQL:dataHexa = Faux
    AccesMySQL:modeUTF8Entree = Vrai
    AccesMySQL:modeUTF8Sortie = Faux
    AccesMySQL:charset = "utf-8"
    AccesMySQL:alphabet = alphabetUTF8

    SI PAS EnModeTest() ALORS AccesMySQL:pocketPC = Vrai

    SI PAS AccesMySQL:mySQLConnecte("adresse_IP_du_serveur/php4wd.php","user","mp","BDD") ALORS
    Erreur("Impossible de se connecter au serveur de base de données distant.")
    FinProgramme()
    FIN

    MaCnx_MySQl..Utilisateur = "root"
    MaCnx_MySQl..MotDePasse = ""
    MaCnx_MySQl..Serveur = "Serveur"
    MaCnx_MySQl..BaseDeDonnées = "BDD"
    MaCnx_MySQl..Provider = hAccèsNatifMySQL
    MaCnx_MySQl..Accès = hOLectureEcriture
    MaCnx_MySQl..InfosEtendues = "Infos étendues"
    MaCnx_MySQl..OptionsCurseur = hCurseurClient

    SI HOuvreConnexion(MaCnx_MySQl) = Faux ALORS
    Erreur("Impossible de se connecter à la base de données distant. Vérifier votre connexion Internet."+RC+" Si l'erreur persiste, contacter l'administrateur.")
    FIN


    SI HOuvreConnexion(MaCnx) = Vrai ALORS

    gsListeTableHF = HListeFichier()
    TableHF = ExtraitChaîne(gsListeTableHF, rangPremier,RC)

    TANTQUE TableHF <> EOT
    SI HAlias(TableHF, alias) = Vrai ALORS

    HChangeNom(alias, TableHF)
    HChangeConnexion(alias, MaCnx_MySQl)
    HCréation("*")

    HLitPremier(TableHF)
    TANTQUE PAS HEnDehors(TableHF)
    SI HCopieEnreg(alias, TableHF, hCopieIdAuto ) ALORS

    //Ajout des enregistrement dans la base de données MySQl
    HAjoute(alias, hFixeIdAuto)
    FIN
    HLitSuivant(TableHF)
    FIN
    HAnnuleAlias(alias)
    SINON
    Erreur("Détail du Problème lors de la création du fichier tampon " + HErreurInfo())
    FIN
    TableHF = ExtraitChaîne(gsListeTableHF, rangSuivant,RC)

    FIN
    SINON
    ToastAffiche("La connexion à la base de données distant a échoué. La sauvegarde reprendra dans 30 minutes.",toastCourt,cvMilieu)
    FIN
    SINON
    ToastAffiche("Le réseau internet a été interrompu. La sauvegarde reprendra dans 30 minutes.",toastCourt,cvMilieu)
    FIN
    HFermeConnexion(MaCnx_MySQl)


    J'ai une préoccupation. je suis obligé de toujours vider mes fichiers avant de faire la sauvegarde. J'a modifié mon code mais le message de doublon s'affiche. Comment le désactivé ?

    TANTQUE TableHF <> EOT
    SI HAlias(TableHF, alias) = Vrai ALORS

    HChangeNom(alias, TableHF)
    HChangeConnexion(alias, MaCnx_MySQl)
    HCréation("*")

    HLitPremier(TableHF)
    TANTQUE PAS HEnDehors(TableHF)

    sListeClé = HListeClé(alias, hLstDétail)
    i est entier = 0
    bTest est un booléen = Faux

    POUR TOUT CHAÎNE sCle DE sListeClé SÉPARÉE PAR RC

    //Astuce : Permet de récupérer la position de la rubrique clé unique du fichier qui sera utilisée pour la recherche.
    SI bTest = Faux ALORS
    i++
    FIN
    //On Récupère la clé Unique
    SI Position(sCle,TAB+"1"+TAB) <> 0 ALORS
    bTest = Vrai
    sRubriqueClePrimaire = SansEspace(ExtraitChaîne(sCle,1))
    FIN
    FIN

    SI HCopieEnreg(alias, TableHF, hCopieIdAuto ) ALORS
    sCleSource = ExtraitChaîne(HRécupèreEnregistrement(alias),i)

    //Ajout ou Modification des enregistrement dans la base de données MySQl
    //L'enregistrement n'existe pas on l'ajoute sinon on le modifie
    // En cas de doublon détecté, on le modifie

    SI HAjoute(alias, hFixeIdAuto) = Faux OU HErreurDoublon() = Vrai ALORS

    HLitRecherchePremier(alias, sRubriqueClePrimaire, sCleSource)
    SI HTrouve(alias) = Vrai ALORS
    HModifie(alias)
    HLitSuivant(alias, sRubriqueClePrimaire)
    FIN
    FIN
    FIN
    HLitSuivant(TableHF)
    FIN
    HAnnuleAlias(alias)
    SINON
    Erreur("Détail du Problème lors de la création du fichier tampon " + HErreurInfo())
    FIN
    TableHF = ExtraitChaîne(gsListeTableHF, rangSuivant,RC)
     
  • Partager cette page

    Chargement...