dimanche 28 février 2010

Exporter données HyperFile SQL vers MySQL

Voici le but de ce projet.

J'ai une application windev avec une base HyperFile SQL (non client/serveur).
J'ai un site internet à distance avec une base MySQL.
Je souhaite faire une synchronisation de l'application windev vers la base de données à distance.
A chaque synchronisation, les tables sont remises à zéro sur la base distante.

Comment j'ai fait

Dans l'application windev et plus particulièrement dans l'analyse, j'ai ajouté une connexion MySQL vers la base distante. (Pensez à installer l'accès natif MySQL pour windev)

J'ai fait la synchronisation dans une nouvelle fenêtre.
Ayant une base d'environ 1000 lignes, j'ai trouvé une "astuce" pour réaliser la synchronisation facilement.

Ajouter un tableau d'un fichier Windev voulu, sélectionnez tous les champs (chargé en mémoire !)
Tester la fenêtre, vos enregistrements devraient s'afficher.
Ajoutez ensuite un bouton, nous allons mettre du code dedans...

L'idée est de stocker dans le tableau les enregistrements de votre base HyperFile SQL puis de changer de connexion vers MySQL, de reparcourir le tableau et d'ajouter dans MySQL chaque ligne de ce tableau. Astucieux non ? :D

Dans le code du bouton, avant toute chose, il faut forcer le parcours de toutes les lignes du tableau pour que windev mette en mémoire l'ensemble des lignes.

POUR i = 1 _A_ TABLE_Produits..Occurrence
//Rien
FIN

Ensuite on change de connexion. De HyperFile SQL vers MySQL

HChangeConnexion("*",ConnexionMySQL)
HSupprimeTout(Produits)
HCréationSiInexistant("*")

Je crée également les tables MySQL si elles n'existent pas (hCréationSiInexistant).

Puis on re-parcours le tableau en ajoutant les lignes dans MySQL

POUR i = 1 _A_ TABLE_Produits..Occurrence
HRAZ(Produits)
Produits.id= TABLE_Produits.COL_id[i]
Produits.nom= TABLE_Produits.COL_nom[i]

HAjoute(Produits)
FIN

On peut finalement compter le nombre d'ajout dans MySQL. Soit en ajoutant un compteur lorsque le hAjoute réussit (meilleure fiabilité), soit en faisant :

Info(TABLE_Produits..Occurrence + " produits ajoutés")

Je vous conseille également de vérifier le nombre de lignes dans votre base HyperFile SQL et le nombre de lignes ajoutées afin de contrôler l'intégrité des données.


On lance la synchronisation
Windev a créé dans MySQL les tables nécessaires et à ajouté les enregistrements.

Problème d'accents
Windev fait la synchronisation mais on peut avoir des problèmes d'accents. L'astuce est d'ajouter une information dans les connexions windev. Dans l'onglet "Avancé" de la connexion MySQL (dans votre analyse), mettre dans la zone "Infos. étendues" :

WD Unicode Support = 0;

Conclusion
Ce n'est pas la solution idéale je pense, mais c'est une solution rapide pour transférer les informations de HyperFile SQL vers une base MySQL distante (ou locale).

Aucun commentaire:

Enregistrer un commentaire