misa a jour bdd mysql par access

misa a jour bdd mysql par access - PHP - Programmation

Marsh Posté le 14-03-2005 à 11:45:25    

Bonjour,
 
Voici ma question : est-ce que vous avez trouvé un moyen pour mettre à jour une base de donnée mysql (qui tourne sur un serveur et est exploité par php) par une base access qui est installée offline, chez le client.
 
Contraintes : C'est pas pour des pros de l'informatique ... donc faut que je leur fasse une solution où on clique sur quelques boutons mais rien de plus.
 
! Précisions : Vous pourriez me dire qu'il est tout simple de faire un csv et ensuite de générer les requete "INSERT INTO ..."
 
MAIS : le problème est que le client a plus de 5000 fiches (pour l'instant ...) donc hors de question de les mettre toutes dans un seul fichier csv et de faire l'insertion en une fois en générant la requete.
-> Exporter seulement les fiches modifiées dans access réduirait de beaucoup le volume de fiche à traiter. Mais cela veut dire qu'il pourrait y en avoir des anciennes et des nouvelles (donc pas de routine avec INSERT).
 
J'ai cherché sur internet et je n'ai pas trouvé de personnes ayant rencontré précisément ce problème ... pourtant, je doute que je soit le premier à vouloir faire une maj de access vers php mysql ...
 
Topheee

Reply

Marsh Posté le 14-03-2005 à 11:45:25   

Reply

Marsh Posté le 14-03-2005 à 11:49:20    

elles sont modifiées comment dans Access les données ???  
si c'est par l'utilisateur via un/des formulaire, ben c'est lors des modifs dans access que tu génère ton CSV, celui-ci contiendra les modifs, et uniquement elles.
Et dans le scripts de MAJ de mysql, qui triture ce CSV et génère les requetes, ben à la fin tu supprime le CSV (ou tout au moins tu le vide)...


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 14-03-2005 à 11:53:27    

il existe des drivers mysql pour access qui fonctionnent assez bien.

Reply

Marsh Posté le 14-03-2005 à 12:01:06    

Xav_ a écrit :

elles sont modifiées comment dans Access les données ???  
si c'est par l'utilisateur via un/des formulaire, ben c'est lors des modifs dans access que tu génère ton CSV, celui-ci contiendra les modifs, et uniquement elles.
Et dans le scripts de MAJ de mysql, qui triture ce CSV et génère les requetes, ben à la fin tu supprime le CSV (ou tout au moins tu le vide)...


Via le formulaire mais aussi dans les tables ... donc les données seront exportées toutes en même temps.
 
 :na: Il me vient une idée, le csv que j'importe contiendra aussi bien les fiches modifiées que les fiches crées. Alors, dans le script qui traite le csv, il pourrait comparer la clé primaire de la fiche du csv (qui vient d'access) avec celle qu'il y a dans mysql et :
- si c'est une nouvelle fiche : il génére un "INSERT INTO ..."
- si c'est une fiche déjà présente : il génère un "UPDATE ..."
 
Dites moi ce que vous en pensez ...
 
Topheee

Reply

Marsh Posté le 14-03-2005 à 12:02:21    

soju a écrit :

il existe des drivers mysql pour access qui fonctionnent assez bien.


Oui, mais je ne pourrai pas me connecter à la base qui est online ...
 
Topheee

Reply

Marsh Posté le 14-03-2005 à 12:10:28    

topheee a écrit :


 :na: Il me vient une idée, le csv que j'importe contiendra aussi bien les fiches modifiées que les fiches crées. Alors, dans le script qui traite le csv, il pourrait comparer la clé primaire de la fiche du csv (qui vient d'access) avec celle qu'il y a dans mysql et :
- si c'est une nouvelle fiche : il génére un "INSERT INTO ..."
- si c'est une fiche déjà présente : il génère un "UPDATE ..."
 
Dites moi ce que vous en pensez ...
 
Topheee


 
En y repensant, ça va bouffer du temps serveur et être source d'erreur ...
 
Topheee

Reply

Marsh Posté le 14-03-2005 à 12:11:11    

Citation :

Dites moi ce que vous en pensez ...


ben vi, c'est kler que faut que tu check ce qui existe pour savoir si c'est INSERT ou UPDATE...


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 14-03-2005 à 14:14:37    

Ca y est, je pense avoir trouvé une solution relativement simple et rapide ...
 
$sql="LOAD DATA INFILE '$fichier_csv' REPLACE INTO TABLE `$table` FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\\\' LINES TERMINATED BY '\r\n'";
 
C'est inspiré de l'insertion de csv dans phpmyadmin. Mais alors y a un truc auquel il faut faire attention, SEULS les champs TEXT (donc je ne parle pas des champs varchar et autres) doivent etre entre guillemets et ne pas oublier les antislashes pour les guillemets et apostrophe (et autres trucs infames qui feraient foirer une requete).
 
D'ailleurs, y'aurait pas une fonction dans access qui fait ça : qui protège les caractères interdits par un slashe ? (Parce que je ne m'occupe pas du développement de la partie access, je fais la partie php/MySQL, donc ce serait pour préciser au type qui s'occupe d'access ce qu'il doit faire).
 
Topheee

Reply

Marsh Posté le 14-03-2005 à 14:36:45    

ben tu le fais toi avec une zoli fonction nommée addslashes de PHP ;)


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 14-03-2005 à 14:51:14    

Une toute petite question qui n'apportera certainement rien mais ...
 
Il ne risque pas d'y avoir des pbs de conflits de données utilisées par plusieurs gars avec ton systeme ?
C'est à dire si 2 gars modifie, en meme temps (ou le meme laps de temps), un enregistrement ? Tu veux le gérer ou sauvegarder le dernier enregistrement uniquement (on écrase la modif du 1er) ?

Reply

Marsh Posté le 14-03-2005 à 14:51:14   

Reply

Marsh Posté le 14-03-2005 à 14:56:23    

Pourquoi ne pas te faire envoyer la base Access et mettre à jour la base mysql via ODBC ?
 
(bon ça doit être ce qui a été proposé avant, les drivers MySQL pour Access, mais peut-être que je ne vois pas bien le problème)...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed