SUPINFO International University

SUPINFO Institute of Information Technology
Laboratoire Microsoft




Tous les Articles du Laboratoire Microsoft

Essentiel ASP (Active Server Pages) : Les quatres premiers chapitres
Accueil > Articles > Développement
Auteurs 
Olivier BOISNE
LABORATOIRE MICROSOFT


 Tous les articles de cet auteur

0,5/5

Mauvais


123749
326/167

Connecter une base avec un DSN
Connecter une base sans DSN
Application
Formatage des chaînes de caractère pour SQL
Première Requête SQL : Sélection
Deuxième Requête SQL : Ajout, Mise à jour et Effacement
Un conseil pour finir

Connecter une base avec un DSN

Connecter une base de données dans le DSN (Data Source Name) de votre serveur ou du serveur distant est une opération qui permet de ne pas faire référence à la position de la base dans vos pages, mais uniquement au nom virtuel que vous aurez défini pour cette base.

Pour cela rendez-vous dans Panneau de configuration, Section ODBC 32 bits, puis cliquez sur l'onglet DSN système. Cliquez ensuite sur le bouton ajouter, puis sur Microsoft Access Driver (*.mdb), puis Terminer. 

Dans la Zone, Nom de la source de Données inscrivez Nom_de_Votre_Base_Virtuel, puis par l'intermédiaire du bouton sélectionner, sélectionnez votre base sur le disque dur. 
Côté Asp, la référence ce fera désormais à Nom_de_Votre_Base_Virtuel et non plus au fichier lui-même.

Exemple avec une base Access :

<%
  Set rst = Server.CreateObject("ADODB.Connection")
  rst.open "Nom_de_Votre_Base_Virtuel","","" 
%>

Connecter une base sans DSN

Il est souvent plus simple de ne pas déclarer la base de donnée dans le DSN du serveur. On peut se connecter directement à la base, placée dans un dossier protégé en accès comme par exemple \fpdb (répertoire réservé aux bases par FrontPage). Dans la suite de cet essentiel, nous utiliseront des accès à nos bases sans DSN.

Exemple avec une base Access :
<%
  strProvider = "Driver = {Microsoft Access Driver (*.mdb)};DBQ = "
                &Server.MapPath("\") &"\labo-microsoft\fpdb\site.mdb;"
  Set rst = Server.CreateObject("ADODB.recordset")
  rst.Open strProvider
%>

Application

Nous allons dans cet exemple faire afficher la liste de tous les articles du site du laboratoire des technologies Microsoft.

<%
  strProvider = "Driver = {Microsoft Access Driver (*.mdb)};DBQ = "
                &Server.MapPath("\") &"\labo-microsoft\fpdb\site.mdb;"

  Set rst = Server.CreateObject("ADODB.recordset")
  ' Chaine de connexion

  strQuery = "SELECT * from articles"
  ' Requète SQL sur la base de donnée

  rst.Open strQuery, strProvider
  ' Ouverture de la connexion

  strtable = "<center><table border=1>" &vbcrlf
  Do UNTIL rst.EOF
    strtable = strtable &"  <tr><td>" &rst("titre") &"</td></tr>" &vbcrlf
    rst.MoveNext
  Loop
  ' Affichage du champ Titre de chacun des enregistrements
  strtable = strtable &"</table></center>" &vbcrlf

  Response.write strTable
  ' Envoi du code HTML construit au navigateur Client

  rst.Close
  set rst=nothing
  ' fermeture et destruction de la connexion
%>

Formatage des chaînes de caractère pour SQL

Prenons une requête SQL simple. Notez que c'est une chaîne de caractères, il faut donc la délimiter 
pas des guillemets.

Requete = "SELECT * FROM articles WHERE no=1"
Cet exemple ne pose aucun problème parce qu'il n'y a aucune autre chaîne imbriquée à l'intérieur, 
car la recherche est effectuée sur un nombre (no=1). Mais si vous désirez faire une requête sur le 
champ titre vous devrez ajouter les apostrophes autour de la chaîne à rechercher.
Requete = "SELECT * FROM articles WHERE titre='titre'"
Jusque ici tout va bien, mais si la chaîne de recherche contient une apostrophe ou un guillemet la 
construction de la chaîne ne sera pas bien interprétée.
Requete = "SELECT * FROM articles WHERE titre='l'apostrophe expliquée'"
Ainsi, cette requête provoquera une erreur, car la chaîne recherchée est "l". Donc, " apostrophe 
expliquée" sera un intrus dans sa construction.

En ASP, il faut doubler le caractère que l'on veut intégrer.

Exemples :
" L''apostrophe "
"Un ""mot"" entre guillemets"

Première Requête SQL : Sélection

Vous devez pointer un enregistrement dans une base de données en effectuant une requère SQL. Votre 
recherche s'effectue sur le titre d'un article par exemple et vous désirez trouver l'enregistrement 
"L'apostrophe expliquée".

Exemple :
Requete = "SELECT * FROM articles WHERE titre='L''apostrophe expliquée'"
Ou
ntitre = "L''apostrophe expliquée"
Requete = "SELECT * FROM articles WHERE titre='" &ntitre & "'"
Mise en pratique :
<table>

<%
strProvider="Driver={Microsoft Access Driver (*.mdb)};DBQ=" &Server.MapPath("\") &"\site.mdb;"
Set rst = Server.CreateObject("ADODB.recordset")

strtable = ""
strQuery ="SELECT numero,utilisateur from utilisateurs"
rst.Open strQuery, strProvider
Do UNTIL rst.EOF
  strtable = strtable &"<tr>" &vbcrlf
  strtable = strtable &"  <td>" &rst("numero") &"</td>" &vbcrlf
  strtable = strtable &"  <td>" &rst("utilisateur") &"</td>" &vbcrlf
  strtable = strtable &"</tr>" &vbcrlf
  rst.MoveNext
Loop
Response.write strTable
rst.Close
%>

</table>

Deuxième Requête SQL : Ajout, Mise à jour et Effacement

L'ajout, la mise à jour ou l'effacement d'enregitrements dans une base de donnée diffèrent de la sélection car il n'y a pas d'affichage. Ici, il y a juste une requète à exécuter.
<%
strProvider="Driver={Microsoft Access Driver (*.mdb)};DBQ=" &Server.MapPath("\") & "\site.mdb;"
set objConn = server.createobject("ADODB.Connection")
set cm = Server.CreateObject("ADODB.Command")
objConn.Open strProvider
cm.ActiveConnection = objConn

strQuery="INSERT INTO articles(titre,texte) values('mon titre','mon texte')"
'Requète d'ajout

strQuery2="UPDATE articles SET
    articles.titre = 'mon titre2',
    liste_actions.priority = 'mon texte2'
  where ((articles.numero) = 10)"
'Requète de mise à jour

strQuery3="DELETE articles.numero FROM articles WHERE ((articles.numero) = 10)"
'Requète d'effacement

cm.CommandText=strQuery
cm.Execute
%>
Si vous n'utilisez pas de chaîne SQL et modifier directement un champ, vous n'avez pas besoin de 
doubler les apostrophes et les guillemets.

Exemple :
ntitre = "L'apostrophe expliquée"
ntexte = "texte"
connexion.AddNew
connexion.Fields("titre") = ntitre
connexion.Fields("texte") = ntexte
connexion.update
Non seulement cela fonctionne mais si vous aviez doublé l'apostrophe, les deux apostrophes seraient 
sauvées dans la base.

Un conseil pour finir

Ne sauvegardez jamais dans une base une chaîne modifiée (par exemple avec des doubles guillemets) en pensant par la suite éviter un traitement. Sauvez toujours vos informations le plus brut possible. Par exemple, n'ajoutez pas les balises HREF dans un texte qui comporte des hyperliens. C'est lors de l'affichage d'un texte qu'il faut le manipuler. Ça semble contraire aux pratiques du programmeur de refaire toujours le même traitement qui pourrait être fait une seule fois mais une loi l'emporte cette fois-ci. C'est la loi de la portabilité. En effet, on ne sait jamais ce qui peut arriver à une base de données ni ce que les langages de demain vont nous apporter. Un texte brut sera toujours valide alors qu'un texte altéré pour usage local ne le sera pas.
Chapitre 1 | Chapitre 2 | Chapitre 3 | Chapitre 4


En Savoir Plus 
Evaluez cet article 


Pour afficher ou poster un commentaire, cliquez sur ce lien : Forum-Microsoft



Retrouvez ci-dessous les autres sections du Laboratoire Microsoft