Transmettre des données Access via HTTP

A partir d’Access, je souhaiterais remplir un formulaire Web via le protocole HTTP. Comment faire ?

Scénario

Dans cet article, on part d’un scénario simple, pour poser les bases. Je dispose :

  • D’un serveur HTTP de test Apache, avec quelques bouts de code en PHP. En pratique, il s’agit d’un serveur WAMP installé sur une machine de test (WAMP = Windows, Apache, MySQL et PHP, plus quelques outils supplémentaires).
  • Les serveurs Apache et MySQL sont supposés en cours d’exécution.
  • Sur ce serveur, un dossier access_tests. Sur une installation standard de WAMP, ce dossier est physiquement situé dans C:wampwwwaccess_tests. Son adresse HTTP est par conséquent : http://SERVEUR/access_tests, où SERVEUR est soit le nom du serveur, soit son adresse IP.
  • Dans le dossier, un formulaire HTML a été créé. La page qui contient ce formulaire s’appelle formulaire.html.
  • Le formulaire est lui-même transmis à une page de traitement appelée resultat.php.

Le formulaire HTML

La construction du formulaire n’est pas le sujet de cet article. Voici simplement à quoi ressemble le formulaire :

Les champs, de haut en bas, s’appellent (attribut name de la balise <input>, en HTML) :

  • nom
  • prenom
  • email

Ce sont ces noms de champs qui vont servir à la transmission de données.
Le formulaire HTML a pour méthode POST, et pour action resultat.php (la page qui traitera les résultats).

La page de traitement de résultats

La page de traitement des résultats s’appelle donc resultat.php. Voici le code simplifié de cette page (le code gagnerait à être amélioré et sécurisé, mais nous irons à l’essentiel pour la démo, puisque l’exemple tourne sur un serveur fermé).

Si vous êtes habitué à PHP, vous voyez que ce code affiche les champs nom, prenom et email transmis par la méthode POST. J’ai supposé que ces champs étaient vraiment transmis (qu’il n’en manque pas lors de la transmission). On pourra ajouter des vérifications plus fines plus tard.

A ce stade, si vous remplissez le formulaire et cliquez sur le bouton Envoyer, le formulaire est transmis à la page de traitement, et les résultats bruts sont affichés dans le navigateur.

Envoi des données à partir d’Access

Maintenant que tout est en place et que l’enchaînement formulaire / traitement a pu être testé, nous souhaitons transférer les mêmes données à partir d’Access. En d’autres termes : le formulaire HTML ne sert plus, c’est Access qui va transmettre directement les résultats à la page resultat.php. De retour à votre base de données Access :

  1. Démarrez Visual Basic Editor (touches ALT + F11).
  2. Commencez par établir une référence à Microsoft XML, dans le menu Outils / Références (si vous avez plusieurs bibliothèques de même nom, prenez la plus récente).
  3. Cliquez sur le menu Insertion / Module, puis recopiez dans le module le code suivant :

Quelques explications

  • Le code repose principalement sur l’objet ServerXMLHTTP déjà abordé dans la série Lecture de flux RSS. D’où la référence faite plus haut, et la variable http.
  • La variable strURL contient l’adresse de la page PHP de traitement (encore une fois : le formulaire HTML ne joue plus aucun rôle ici, on transmet directement les résultats à la page finale).
  • La chaîne strParams contient la liste des valeurs à transmettre (celles qui au départ étaient renseignée dans le formulaire HTML). Les valeurs sont écrites sous la forme « champ1=valeur1&champ2=valeur2« . Les noms de champs doivent respecter ceux traités par la page PHP (nom, prenom et email).
  • L’adresse est ensuite ouverte par l’instruction http.Open.
  • Quelques paramètres sont ensuite définis pour préciser le type de demande : encodage des caractères, type de contenu et taille des données (il s’agit de la taille de la chaîne de paramètres). Dans un exemple simple, le code devrait fonctionner même si ces paramètres sont manquants.
  • Une fois la communication paramétrée, on peut envoyer les paramètres via la commande http.Send.
  • Les résultats sont cette fois affichés dans Access, et plus dans le navigateur. Le serveur répond par un statut de 200 si tout s’est bien passé, auquel cas on peut afficher sa réponse (http.responseText). Dans le cas contraire, on affiche les valeurs d’erreur.

Il y a bien d’autres améliorations à prévoir par la suite, mais vous avez déjà les principes pour tester !

Vous aimerez aussi...

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *