Cours CPTIC 158
Bases de données sur Internet
16 et 17 avril 2002

Les objets ADO

Pour communiquer avec un base de données à travers une page ASP, il faut utiliser un composant ActiveX Data Objects (ADO). Il fournit un certain nombre d'objets susceptible de se connecter à une base de donnée et de l'interroger. Nous allons principalement nous intéresser à deux objets ADODB.Connexion et ADODB.RecordSet.

Les requêtes que l'on va utiliser à partir de maintenant font appel à une quantité non négligeable de constantes qui sont prédéfinies dans le fichier adovbs.inc, qui se trouve (dans le cas présent) à la racine du serveur. Il suffi donc d'inclure systématiquement ce fichier dès que l'on travail avec une base.

<!--#include virtual="/adovbs.inc"-->


L'objet ADODB.Connection

L'objet Connection permet, comme son nom l'indique, de se connecter à une base de données. Nous utiliserons pour nos TPs que trois commandes de cet objet, l'ouverture de la connexion et sa fermeture, ainsi que l'exécution directe d'une requête.

Pour se connecter à une base de données:

<%
  
DIM Connexion
   DIM ConnectStr

   Set Connexion = Server.CreateObject("ADODB.Connection")
   ConnectStr="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.Mappath("nomdelabase.mdb")
   Connexion.Open ConnectStr
%>

Il existe deux modes de connexion à des base de données sur des machines Microsoft. Les connexions utilisant le DSN (Data Source Name, à ne pas confondre avec DNS, Domain Name Service), et les connexions sans DSN. Sur le serveur mis en place pour ce cours, ainsi que sur wwwedu, nous n'utilisons pas le DSN. Ainsi la reqûete de connexion doit fournir tous les paramètres pour effectuer cette connection, d'ou la ligne barbare au milieu du code ci-dessus.

Pour exécuter une requête, telle que la suppression d'un enregistrement, ce quine nécesssite pas à priori un retour d'information de la base, la commande Connexion.Execute permet de faire la chose simplement:

<%
  
DIM RequeteSQL

  RequeteSQL = "DELETE FROM NomDeLaTable WHERE ID = " & Request.Form("ID")
  Connexion.Execute RequeteSQL
%>

Pour femer la connexion à la base:

<%
  
Connexion.Close
  Set Connexion = Nothing
%>


L'objet ADODB.RecordSet

RecordSet signifie en anglais ensemble d'enregistrement. L'objet RecordSet peut être utilisé pour contenir un sous-ensemble d'enregistrement d'une table, voire tous les enregistrements qu'elle contient. Il intègre des méthodes et des propriétés qui permettent une gestion par page du RecordSet.

La création et las suppression d'un objet RecordSet se font de la même manière que pour l'objet connexion, à savoir:

<%
  
DIM RS

   Set RS = Server.CreateObject("ADODB.RecordSet")

  ...

  RS.Close
   Set RS = Nothing
%>

Propriétés

AbsolutePage Permet de définir la page courante dans le RecordSet
AbsolutePosition Permet de définir l'enregistrement courant
BOF Indique que l'on est positionné avant le premier enregistrement
EOF Indique que l'on est positionné après le dernier enregistrement
CacheSize Indique le nombre d'enregistrment à mettre dans le cache del'objet RecordSet
Filter Permet de définir un filtre sur les enregistrements visible dans le RecordSet
MaxRecords Définit le nombre maximum d'enregistrment que le RecordSet peut fournir à partir d'une requête
PageCount Indique le nombre de page dans le RecordSet
PageSize Indique le nombre d'enregistrment maximum pour une page d'un RecordSet
RecordCount Retourne le nombre d'enrgistrement dans le RecordSet
... et bien d'autres....

Méthodes

AddNew Créée un nouvel enregistrment
Cancel Annule une exécution
CancelUpdate Annule les changements effectués sur un enregistrment du RecordSet
Close Ferme le RecordSet
Delete Supprime un enregistrement ou un groupe d'enregistrements
Find Recherche un enregistrement qui répondau critère de recherche.
MoveFirst Déplace le curseur vers le premier enregstrement du RecordSet
MoveLast Déplace le curseur vers le dernier enregstrement du RecordSet
MoveNext Déplace le curseur vers le prochain enregstrement du RecordSet
MovePrevious Déplace le curseur vers l'enregstrement précédent du RecordSet
Open Sélectionne un ensemble d'enregistrement en fonction des paramètres fourni
(voir ci.-dessou)
Update Enregistres les modifications effectuées sur un enregistrement unique de la table
... et bien d'autres....

Collections

Fields Contient la liste de champs de l'enregistrement courant du RecordSet
... et bien d'autres....

La méthode Open

L'objet RecordSet reçoit des enegistrements grâce à la méthode Open. Elle accepte différents jeux d'arguments qui peuvent être utilisés de divers manières. La forme générale se présente ainsi:

RS.Open Source, Connexion, TypeDeCurseur, TypeDeVerrou, TypeDeCommande

Source est une chaîne de caractère qui contiet soit un nom de table, soit une commande SQL.

Connexion est soit un objet ADODB.Connection, soit une châine de caractère contenant l'information de la connexion.

TypeDeCurseur indique la manière dont vous voulez vous déplacer dans l'ensemble d'enregistrement, (RecordSet). La valeur par défaut est la constante ADO adOpeForwardOnly. C'est le curseur le plus utilisé. Il indique que seul le déplacement vers l'avant est permis. Le type de curseur contrôle aussi la manière dont les changements apportés à une table par d'autre utilisateurs affecte ce que vous voyez.

TypeDeVerrou autorise ou non l'écriture dans la table, et si oui, comment. Du fait que plusieurs clients peuvent accéder simultanément à une table, vous devez faire attention à la façon dont les modifications seront effectuées. Il existe différent type de vérrou, entre autres:

adLockReadOnly Les enregistrements sont en lecture seul. Ils ne peuvent pas être modifiés, et aucun nouvel enregistrement peut être ajouté. C'est le type de verrou par défaut.
adLockPessimistic Les enregistrments sont vérouillé dès l'édition pour éviter toute interférence entre eux quand de nouvelles commandes sont entrées et que le commande de ise à jour Update a été appliquée.
adLockOptimistic Les enregistrements ne sont verouillés qu'au moment où la méthode Update est appelée

TypeDeCommande précise comment le paramètre Source doit être évalué. Une valeur possible est adCmfTable (Il y en a d'autres). Quand elle est fournie, le paramètre Source est considéré comme un nom de table, et s'il omis, alors Source est inteprété comme une commande SQL.