Affichage des articles dont le libellé est access. Afficher tous les articles
Affichage des articles dont le libellé est access. Afficher tous les articles
5/29/2008

Synchronisation entre deux bases de données (Access/Mysql)

La première phase de mon stage consiste à mettre en place un script, un programme, qui permettra de synchroniser une partie de la base de données CIEL (qui contient l'ensemble des articles, famille, fournisseur, ventes, etc...) avec la base de donnée du site (Mysql).

CIEL repose sur une base de données ACCESS, le script devra donc être capable d'effectuer des requêtes sur cette base de données. La synchronisation est unidirectionnel (Ciel -> Site) lorsqu'il s'agit des articles, et bidirectionnel lorsqu'il s'agit des stocks.


Voici donc la façon dont j'effectue la synchronisation (dans cet exemple pour les articles).

Le serveur web du magasin accueil un mini-site, qui effectue via des requêtes AJAX les différents traitements de synchronisation. Le dialogue entre les deux serveurs s'effectue exclusivement en JSON, plus léger que XML et très facilement lisible en cas de debuggage.

Les requêtes AJAX envoyées depuis le serveur web du magasin peuvent être dirigées :

  1. soit vers un script php interne au serveur qui va permettre de créer un interface entre les données de la base de donnée ACCESS et le reste de l'application
  2. soit vers un script php "proxy" qui va effectuer une requête POST sur le serveur web e-commerce et retournera le résultat de cette requête. La requête POST ne contient qu'un seul champs : "data". Ce champs "data" - qui sera envoyé au serveur e-commerce - contient l'intégralité des variables POST ($_POST) envoyées au script proxy. Ainsi, le mini-site envoie une requête AJAX de type POST sur le script "proxy", le script proxy transforme toutes ces variables en JSON (serialisation) et les inclus dans la variable "data" qu'il envoi par POST au serveur web e-commerce, le serveur web e-commerce va alors déserialiser la variable $_POST['data'] et effectuer les traitements en fonction des paramètres transmis.


Ps : J'utilise CURL pour l'envoi de requête POST sur le serveur ainsi que PDO pour la communication avec la base de donnée ACCESS.

5/26/2008

Problème requête SQL avec INNER JOIN multiple sur base de donnée Access

Je viens de commencer réellement mon stage et pour cela, il me faut extraire des données d'une base de données Access par une requête SQL depuis PHP en utilisant PDO. Pour cela j'ai eu besoin de faire plusieurs INNER JOIN  (j'ai simplifié à 2 pour l'exemple) et une fois le deuxième INNER JOIN ajouté l'erreur suivante s'est produite :

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression

Voici la requête produisant l'erreur :

SELECT Articles.code, Articles.libellélong, Articles.libellécourt, ArticlesTarifs.TTC, ArticlesStocks.QtéStock
FROM `Articles`
INNER JOIN `ArticlesTarifs` ON (Articles.N°) = ArticlesTarifs.N°Article
INNER JOIN `ArticlesStocks` ON (Articles.N°) = ArticlesStocks.N°Article
WHERE Articles.bWeb = 1

 

En fait, il suffit de concaténer tout les INNER JOIN directement dans le FROM de la requête et le tour est joué :

SELECT Articles.code, Articles.libellélong, Articles.libellécourt, ArticlesTarifs.TTC, ArticlesStocks.QtéStock
FROM (
(`Articles` INNER JOIN `ArticlesTarifs` ON Articles.N° = ArticlesTarifs.N°Article)
INNER JOIN `ArticlesStocks` ON Articles.N° = ArticlesStocks.N°Article)
WHERE Articles.bWeb = 1

 

Ainsi on a une requête sql sur la forme :

SELECT *
FROM (table 1 INNER JOIN `table2` ON table1.id = table2.id) INNER JOIN `table3` ON table1.id = table3.id)

 

Je reparlerai sans doute de PDO qui est vraiment une classe formidable

»
 
 
Made with on a hot august night from an airplane the 19th of March 2017.