INTRANET L`offre Microsoft

Transcription

INTRANET L`offre Microsoft
INTRANET
L’offre Microsoft
Internet Information Server (IIS)
VisualInterdev
Activex Server Page (ASP)
Les constituants
•
•
•
•
•
Windows NT (administration, sécurité)
Internet Information Server (IIS)
SQL-Server (Serveur et produits clients)
Visual Interdev (Serveur et outils clients)
ODBC, ADO, Active X
Michel Tuffery
Intranet et les Bases de Données
2
Architecture Multi-tiers
Exploitation
CLIENT
IE
Netscape
Mosaic
HTML
(HTTP)
Serveur Web
Serveur de Données 1
SQL
Server
IIS
Middleware
Navigateur
Page.asp
Page.html
Active
Server
Page
ADO
OLE-DB
ODBC
Serveur Applicatif
Oracle
Serveur de Données 2
Michel Tuffery
Intranet et les Bases de Données
3
Architecture Développement
Windows 95
Navigateur
Connexion NT
in.
m
d
a
t
e
Tests
nt
e
m
e
p
p
o
l
Déve
Interdev (client)
SQL
Enterprise
Manager
IIS
Interdev
ODBC
LIB-SQL(client)
Serveur NT
ODBC
LIB-SQL(client)
Serveur NT
Connexion SQL
LIB-SQL(serveur)
SQL-Server
Client
Michel Tuffery
Intranet et les Bases de Données
4
IIS : Internet Information server
•
•
•
•
•
•
•
Serveur Web proposé par MS sur NT
Outil d ’administration (Windows ou Web)
Gestion du service WWW
Utilisateur anonyme (IUSR_machine)(# Unix)
Répertoires autorisés
Journal des connexions
Fonctions de sécurité (accès refusés)
Michel Tuffery
Intranet et les Bases de Données
5
IIS : Internet Information server
Michel Tuffery
Intranet et les Bases de Données
6
IIS : Internet Information server
Lancer
Michel Tuffery
Intranet et les Bases de Données
7
SQL – Server
7.0 Î 2000
•
•
•
•
•
SGBD proposé par MS sur NT ou 2000 Server
Plusieurs bases , plusieurs utilisateurs
Une seule instance sur une machine serveur
Norme SQL Ansi 2
Produits Clients Windows 95 / 98 / 2000 pro
Michel Tuffery
Intranet et les Bases de Données
8
Enterprise Manager
Michel Tuffery
Intranet et les Bases de Données
9
Analyseur de Requêtes
Michel Tuffery
Intranet et les Bases de Données
10
Création de tables
if exists (select table_name
where table_name='employe')
drop table employe
GO
from information_schema.tables
if exists (select table_name
where table_name= ’service')
drop table service
GO
from information_schema.tables
create table service
(nservice tinyint,
nom_service varchar(20),
constraint pk_service primary key(nservice)
)
GO
Michel Tuffery
Intranet et les Bases de Données
11
Création de tables
create table employe
(nume int identity(1,1),
nome varchar(20),
date_emb datetime default getdate(),
salaire decimal(8,2),
commission as (salaire*10)/100,
nservice tinyint constraint nn_nser not null,
constraint ck_salaire check (salaire > 5000),
constraint fk_emp_ser foreign key(nservice)
references service(nservice)
)
GO
Michel Tuffery
Intranet et les Bases de Données
12
Manipulation des données
INSERT [INTO] {nom_table} [(liste cols)] VALUES
(liste_valeurs)
GO
INSERT
GO
INSERT
VALUES
GO
INSERT
VALUES
GO
SELECT
GO
Michel Tuffery
INTO service VALUES (10,’Informatique’)
INTO emp(nome,date_emb,salaire,nservice)
(‘Michel’,’12-04-2001’,12000,10)
INTO emp(nome,date_emb,salaire,nservice)
(‘Annie’,’12-01-2001’,9000,10)
id=@@identity
Intranet et les Bases de Données
Variable id
13
Manipulation des données
DELETE [FROM] {nom_table} [WHERE clause]
GO
UPDATE {nom_table} SET
col= {valeur|expression} [WHERE expression]
GO
BEGIN TRANSACTION
DELETE FROM employe WHERE salaire > 100000
GO
UPDATE employe SET
Salaire = salaire * 1.1
Where nservice=10
GO
COMMIT TRANSACTION
Michel Tuffery
Intranet et les Bases de Données
14
Sélection de données
SELECT e.nome as nom_emp,e.salaire as salaire_emp,
e.commission as commission_emp
FROM employe e, service s
WHERE UPPER(s.nom_service) LIKE '%INFO%'
GO
mom_emp
-------------------Michel
Annie
salaire_emp
----------12000.00
9000.00
commission_emp
----------------1200.000000
900.000000
(2 ligne(s) affectée(s))
Michel Tuffery
Intranet et les Bases de Données
15
Visual Interdev
•
•
•
•
Environnement de développement intégré
Partie de Visual Studio (Java, Active x, ..)
Installation sur NT et client W95
Serveur :
– File-New Project : création d ’un Work-Space
– Web Permission : autorisation à un user NT
• Client :
– New Work-space : lien avec NT
– Connexion NT (connexion SQL)
Michel Tuffery
Intranet et les Bases de Données
16
Visual Interdev
Michel Tuffery
Intranet et les Bases de Données
17
ASP : Active Server Page
• Page contenant du HTML et du script (VB
ou Java) entre <% et %>
• Appel de fonctions permettant d ’instancier
des objets (connexion, record set, ...)
• Les pages doivent être sauvegardées sur le
serveur
• Connexion BD, ordres SQL
• Pages HTML dynamiques
Michel Tuffery
Intranet et les Bases de Données
18
Un exemple de page ASP
<%@ Language=VBScript %>
<% Response.Buffer = True
'Vérification du nombre d'essais
if IsNumeric(session("nb_connect")) then
'On est déjà passé...
if session("nb_connect") > 2 then
session("nb_connect")=""
Response.Redirect ("default.htm")
else
session("nb_connect") = session("nb_connect") + 1
end if
else
session("nb_connect") = "1"
'On n’est jamais passé...
end if %>
<HTML>
<HEAD>
<TITLE>Anciens étudiants</TITLE>
</HEAD>
<BODY background="fondPierreRose.jpg">
<P align=center><FONT size=6>Identification d'un étudiant</FONT></P><BR>
<P align=center><FONT color=black size=5>Saisissez les informations vous
concernant</FONT></P>
<P align=center><FONT size=3>(Tous les champs sont
obligatoires)</FONT></P><BR><BR>
Michel Tuffery
Intranet et les Bases de Données
19
../..
Un exemple de page ASP (suite)
<% if Request.Form("connect")="Valider" then
set ocon = Server.CreateObject ("ADODB.Connection")
ocon.Open "websql", "user", "password"
if Request.Form ("ine") <> "" then
if Request.Form ("nom") <> "" then
ine=Request.Form ("ine")
nom=Request.Form ("nom")
end if
end if
sql = "select ine, nom_etu, prenom_etu FROM du6.etudiant
WHERE (UPPER(ine)=UPPER('"&ine&"') and UPPER(nom_etu) = UPPER('"&nom&"'))"
set result = Server.CreateObject("ADODB.Recordset")
result.Open sql, ocon, 3 , 3
if result.EOF then
Response.Write("<CENTER><FONT COLOR=red>
Vous avez tapé un numéro INE ou un nom incorrect</FONT></CENTER>")
else
session("ine")=ine
session("nb_connect") = ""
Response.redirect ("menu_etu.asp")
end if
end if %>
Michel Tuffery
Intranet et les Bases de Données
20
../..
Un exemple de page ASP (fin)
<CENTER>
<FORM METHOD = post ACTION="login.asp"><BR><BR>
<TABLE border=0 cellPadding=1 cellSpacing=1 id=TABLE1>
<TR>
<TD>Entrer votre numéro INE* :</TD>
<TD><INPUT name=ine type=password></TD></TR>
<TR>
<TD>Entrer votre Nom : </TD>
<TD><INPUT name=nom></TD></TR>
</TABLE><BR><BR>
<INPUT TYPE=submit name=connect VALUE="Valider">
<INPUT id=reset1 name=reset1 type=reset value=Annuler>
</FORM>
<BR>* Identifiant National Etudiant
(Il se trouve sur votre carte d'étudiant )</P>
<a href="default.htm">Retour</a></center>
</BODY>
</HTML>
Michel Tuffery
Intranet et les Bases de Données
21
Ensemble des composants Objet
Objet REQUEST
Collections :
CLIENT
cookies
form
querystring
servervariables
clientcertificate
SERVEUR
Objet RESPONSE
Objet Server
(Méthodes)
Collections :
cookies
(Propriétés)
(Méthodes)
Objet Application
Objet Session
(Propriétés)
(Méthodes)
(Propriétés) (Méthodes)
Michel Tuffery
Intranet et les Bases de Données
22
Objet Request :
plusieurs collections
• Collection “QueryString”
– <METHOD=GET> données envoyées dans l’URL en clair
– variable_ado=Request.QueryString(“champ_html”)
• Collection “Form”
– <METHOD=POST> données incluses dans l’en-tête http
– variable_ado=Request.Form(“champ_html”)
• Collection “ServerVariables”
– Adresse IP client : <%=Request.ServerVariables(“Remote_Adr”)%>
– Compte Utilisateur : ......
Logon_User
– Chaine HTTP : .....
All_Http
Michel Tuffery
Intranet et les Bases de Données
23
Objet Request :
plusieurs collections
• Collection “Cookies”
– objet Request : lecture cookie
if Request.Cookies("Boutique")("id_client") = "" then
– objet response : envoi de cookie
Response.Cookies("Boutique")("id_client") = rs("id_client")
• Collection “ClientCertificate”
– Avec “Secure Socket layer” (SSL)
– https:// .... Envoi du certificat identifiant le client
– seuls les clients connus sont autorisés
Michel Tuffery
Intranet et les Bases de Données
24
Objet Response
• Collection “Cookies”
– valeur des cookies à envoyer au navigateur
• Propriété “Buffer”
– indique s’il faut mettre la page en buffer (response.buffer=true)
• Propriété “ContentType”
– type du contenu (“text/html”) de la réponse
• Propriété “Expires”
– durée de vie de la page dans le cache du navigateur
Michel Tuffery
Intranet et les Bases de Données
25
Objet Response (suite)
• Propriété “ExpiresAbsolute”
– date et heure d’expiration du cache navigateur
• Propriété “Status”
– valeur de la ligne d’état renvoyée par le serveur
• Méthode “AddHeader”
– ajoute ou modifie une valeur de l’en tête http
• Méthode “Clear”
– vide le buffer de sortie html
Michel Tuffery
Intranet et les Bases de Données
26
Objet Response (suite)
• Méthode “End”
– interrompt le traitement de la page et renvoie le résultat courant
• Méthode Flush
– envoie immédiatement le buffer de sortie
• Méthode “Redirect”
– demande au navigateur de se connecter à une autre URL
• Méthode “Write”
– écrit une variable dans la page en tant que chaine
Michel Tuffery
Intranet et les Bases de Données
27
Objet Response (suite)
• Affichage de l’heure
z
–
z
–
z
–
z
–
Heure simple
<% response.write time %>
Date simple
<% response.write(FormatDateTime(Now(),2) & " " ) %>
Date et heure simples
<% response.write now %>
Date complète
<% response.write(FormatDateTime(Now(),1) & " " ) %>
• Autres exemples
<%Response.Write(“Voilà la valeur :”&variable)%>
équivalent à
Voilà la valeur : <%=variable%>
<%Response.Redirect(“http://salines.cict.fr:9000/”)%>
Michel Tuffery
Intranet et les Bases de Données
28
Objet Response : erreur de
re-direction
Après une instruction <%Response.redirect page.asp%>
On obtient souvent :
Response object error 'ASP 0156 : 80004005
...
The HTTP header are already written to the client Browser.
(Les entêtes ont déjà été envoyées au client).
Un ordre response.write (écriture) ayant déjà été exécuté dans la page :
la page a déjà envoyé quelque chose au navigateur client
et on souhaite faire une re-direction de page.
Corriger l'erreur :
Ajouter en entête de fichier la ligne suivante :
<%response.buffer=True%>
Cette ligne provoque l'éxécution du script ASP en complet dans le cache
du serveur avant l'envoi au navigateur
Michel Tuffery
Intranet et les Bases de Données
29
Objet Server
• Sommet de la hiérarchie du modèle objet
• Propriété “ScriptTimeOut”
– temps max d’éxécution d’un script avant erreur
<% Response.Write("Délai d'expiration du script = "&Server.ScriptTimeOut&" sec.")%>
Délai d'expiration du script = 90 sec.
• Méthode “CreateObject”
– crée une instance d’un objet ou d’un composant serveur
– tout composant possède un identifiant
– cet identifiant est passé à la méthode qui crée une instance de
l’objet
– MS promet des composants de plus en plus nombreux ...
Michel Tuffery
Intranet et les Bases de Données
30
Objet Server (suite)
Exemple : le composant “BrowserCapabilities”
<% Dim Objbrowser
'définit une variable objet
On Error Resume Next
'ignore les erreurs
Set Objbrowser = Server.CreateObject("MSWC.BrowserType")
If IsObject(Objbrowser) Then
'vérifie si l'objet a bien été crée%>
Le Navigateur
<%=Objbrowser.Browser%>
<%=Objbrowser.Version%> supporte ? <P>
<UL>
<LI> Tables = <%=Objbrowser.Tables%> </LI>
<LI> Frames =<%=Objbrowser.Frames%> </LI>
<LI> Cookies =<%=Objbrowser.Cookies%> </LI>
<LI> VBScript =<%=Objbrowser.vbscript%> </LI>
</UL>
<%Else
Response.Write("Problème pour créer l'objet : ")
Response.Write(Err.Description&"("&Err.Number&")")
End If%>
Michel Tuffery
Intranet et les Bases de Données
Le Navigateur IE5.0 supporte ?
•Tables = Vrai
•Frames =Vrai
•Cookies =Vrai
•VBScript =Vrai
31
Le modèle ADO
(Active x Data Objects)
• Déclaration d ’objets
• Exécution de ces objets
• Retour des lignes résultat de la base de
données dans un record set
• Activation de méthodes (addnew, movefirst,
open, ...)
• Différents types d’ouverture d’un record set
Michel Tuffery
Intranet et les Bases de Données
32
Objet Application et Objet
Session
• 1 objet application --> n objets session (client)
• 1 serveur --> n applications
• Application : tous les fichiers référencés à
partird’une adresse virtuelle (répertoire) sur le
serveur web
• Evènements : OnStart et OnEnd
• Méthodes : Lock et Unlock (autres clients)
Michel Tuffery
Intranet et les Bases de Données
33
Le fichier ‘global.asa’
• Présent sur la racine du service
• Contient les routines exécutées au :
–
–
–
–
Début Application ‘Application_OnStart’
Fin Application ‘Application_OnEnd’
Début Session ‘Session_OnStart’
Fin Session ‘Session_OnEnd’
• Utilisé souvent pour paramétrer les
variables session et application
Michel Tuffery
Intranet et les Bases de Données
34
Le fichier ‘global.asa’
Exemple
<script LANGUAGE="VBScript" RUNAT="Server">
SUB Application_OnStart
Application ("visiteur")=0
END SUB
SUB Application_OnEnd
END SUB
SUB Session_OnStart
Application.lock
Application("visiteur")=Application("visiteur") + 1
Application.unlock
END SUB
SUB Session_OnEnd
Application.lock
if Application("visiteur")>0 then
Application("visiteur")=Application("visiteur") - 1
else
Application("visiteur")=0
end if
Application.unlock
END SUB
</script>
Michel Tuffery
Intranet et les Bases de Données
35
Les variables session
•
•
•
•
•
Élément important de l’offre ASP
Mémoriser le contexte d’un Internaute
Articles commandés (caddie)
Identification page par page (droits)
Limitation des droits d’accès à certaines
informations
Michel Tuffery
Intranet et les Bases de Données
36
Les variables session (suite)
• Au bout de 20 minutes consécutives
inactives : ‘mort’ de la variable
• Reconfigurable dans global.asa avec
Session.Timeout
• Affectation d’une nouvelle valeur :
destruction de l’ancienne valeur
Michel Tuffery
Intranet et les Bases de Données
37
Exemple : Protection
de l’accès
default.htm
Saisie login
et password
(login, password)
OK
contrôle.asp
Contrôle du
login et pwd
OK
(login)
suite.asp
login vide ?
Michel Tuffery
Intranet et les Bases de Données
38
default.htm
Exemple : Protection
de l’accès
<HTML><HEAD></HEAD><BODY>
<FORM method="post" action= "controle.asp">
<p>Votre identifiant:
<INPUT TYPE="text" SIZE="20" name="login">
<p>Votre code confidentiel:
<INPUT TYPE="password" SIZE="20" name="password">
<INPUT TYPE="SUBMIT" value="Envoyer">
</BODY></HTML>
suite.asp
‘En début de chaque page
<% if Session("login")
= "" Then
Response.Redirect
"default.htm"
end if
%>
<% login = Request.Form("login") password = Request.Form("password")
SQL = "SELECT * FROM Clients WHERE login LIKE '" &
login & "' AND password LIKE '" & password & "'"
Set OBJdbConnection = Server.CreateObject("ADODB.Connection")
OBJdbConnection.Open "mabase"
Set RS = OBJdbConnection.Execute(SQL)
if NOT rs.EOF then Session("login") = login
Response.Redirect "suite.asp"
Else Response.Redirect "default.htm"
end if RS.Close%>
controle.asp
Michel Tuffery
Intranet et les Bases de Données
39
Le modèle ADO
(Active x Data Objects)
• Véritable force motrice : lien page bd
• Composant : Active Database
• ADO est construit sur OLE-DB mais peut
aussi dialoguer avec ODBC
ASP
Composants Active Database
ADO
Michel Tuffery
Intranet et les Bases de Données
Pilotes ODBC
40
Le modèle ADO
L ’objet connection
• Objet Connection
– Ouverture d’une connexion vers une base de données
• Objet RecordSet
– Remplissage d’un rs
– Utilisation de méthodes
• Objet Command
– Exécution de commandes
Michel Tuffery
Intranet et les Bases de Données
41
L ’objet Connection
•
•
•
•
Création d ’une instance de l ’objet Connection
Implémentation par le composant Active database
L ’identifiant ou ‘ progid ’ est ‘ ADODB ’
Connexion à SQL Server :
Set oconn = Server.CreateObject(« ADODB.Connection »)
méthode de l’objet
contient une référence vers l’instance de l’objet connection
Michel Tuffery
Intranet et les Bases de Données
42
L ’objet Connection (suite)
Ouverture d’une connexion (SQL Server) :
oconn.Open “DSN” , “User_name” , “Passwd”
DSN : Data Source Name (*)
(*) Voir Concepts : ODBC
Michel Tuffery
Intranet et les Bases de Données
43
Connexion à une base Oracle
<% sql="select ...."
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.DbOpenDatabase
("chaîne_centrale", "login/password", &H0&)
Set rs = OraDatabase.DbCreateDynaset(sql, &H0&)
...
...
...
OraDatabase.close %>
Michel Tuffery
Intranet et les Bases de Données
44
Connexion à une base Oracle
<% sql="select * from scott.emp"
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.DbOpenDatabase("beq-local", "scott/tiger", &H0&)
Set rs = OraDatabase.DbCreateDynaset(sql, &H0&)
%>
<table border=1>
<tr><td>N° emp</td><td>Nom </td><td>Job </td> </tr>
<%do while rs.EOF=False%>
<tr>
<td> <%=rs("empno")%> </td>
<td> <%=rs("ename")%> </td>
<td> <%=rs("job")%> </td>
</tr>
<%rs.movenext
loop%>
</table>
<%
rs.close
OraDatabase.close %>
Michel Tuffery
Intranet et les Bases de Données
45
L ’objet Connection
les méthodes
• Open : ouvre une nouvelle connexion
• Close : ferme une connexion
• Execute : exécute une instruction SQL ou une
procédure stockée
• BeginTrans : début d’une nouvelle transaction
• CommitTrans : valide une transaction et en
commence une autre
• RollbackTrans : annule une transaction et en
commence une autre
Michel Tuffery
Intranet et les Bases de Données
46
L ’objet Connection
les propriétés
• Attributes : détermine si, à la fin d’une session, il faut en
commencer une nouvelle
• CommandTimeOut : nbre de secondes avant d’envoyer
un message d’erreur
• ConnectionString : chaîne de connexion
• ConnectionTimeOut : nbre de secondes suite à un échec
de connexion
• DefaultDatabase : renvoie la base par défaut
• Provider : définit ou renvoie le nom du fournisseur
Michel Tuffery
Intranet et les Bases de Données
47
L ’objet Connection
exécution de méthode
• Récupération des données des données dans
un record set local et exécution de méthodes
(plus loin)
• Ou exécution directe d’ordres SQL :
Set oconn = Server.CreateObject(“ADODB.Connection”)
oconn.Open “base_proj”, “michel”, “tuf”
oconn.Execute “DELETE FROM projet”
oconn.Execute(“procedure_cat”) ou (“call procedure_cat”)
Michel Tuffery
Intranet et les Bases de Données
48
Transaction et ADO
•
•
•
•
3 méthodes au niveau de l’objet connection
BeginTrans : Début de la transaction
CommitTrans : Validation de la transaction
RollbackTrans : annule la transaction en
cours
• Validation du ‘record set’ au commit
Michel Tuffery
Intranet et les Bases de Données
49
Exemple de Transaction
<% On Error Resume Next
'--- Client_debit est le numéro du compte client à débiter
client_debit = Request.Form("client_debit")
'--- Client_credit est le le numéro du compte à créditer
client_credit = Request.Form("client_credit")
'--- Montant de la transaction montant_transac
montant_transac = Request.Form("montant_transac")
'------- Ouverture de l'accès aux données
Set conn=server.createObject ("ADODB.connection")
conn.open "base_de_donnees","user","passwd"
'----- Début de la transaction
conn.Begintrans
SQL="select * From client where id_compte="&client_debit
Set rs=server.createObject("ADODB.recordset")
rs.open SQL, conn, 3, 3
rs.movefirst
rs("compte")=rs("compte")-montant_transac
rs.update
Michel Tuffery
Intranet et les Bases de Données
../..
50
Exemple de Transaction
(fin)
SQL="select * From client where id_compte="&client_credit
Set rs1=server.createObject("ADODB.recordset")
rs1.open SQL, conn, 3, 3
rs1.movefirst
rs1("compte")=rs1("compte")+montant_transac
rs1.update
'--- Si les deux actions précédentes se sont effectuées correctement
'--- La transaction est validée
If Err.Number=0 then
conn.CommitTrans
Else
'--- sinon : affichage éventuellement d'un message
'--- avec Err.Description et Err.Source ....
conn.RollbackTrans
End
set
set
set
if
rs=nothing
rs1=nothing
conn=nothing
Michel Tuffery
%>
Intranet et les Bases de Données
51
L’objet RecordSet
les méthodes
• AddNew : crée un nouvel enregistrement
• CancelUpdate : annule toutes les modifications faites sur
l’enr. Courant
• Close : ferme le record set et les objets dépendants
• Delete : supprime l’enr. Courant
• Move : déplace la position de l’enr. Courant
– MoveFirst, MoveLast, MoveNext, MovePrevious
• Open : ouverture d’un curseur dans un record set
• Requery : re-exécute la requète
• Update : enregistre toutes les modifications
Michel Tuffery
Intranet et les Bases de Données
52
L’objet RecordSet
les propriétés
•
•
•
•
AbsolutePosition : position de l’enr. courant
BOF : vrai si l’enr. courant < premier
EOF : vrai si l’enr. courant > dernier
RecordCount : nombre d’enregistrements
dans le record set
Michel Tuffery
Intranet et les Bases de Données
53
L’objet RecordSet :
fonctionnement
Client
Serveur
SELECT col1,col2 FROM table WHERE prédicat
Rs
col1
col2
100
Michel
250
Jacques
120
Annie
450
Jean-Pierre
Rs.Update
Michel Tuffery
SGBD
Rs.Delete
Intranet et les Bases de Données
54
L’objet RecordSet
exemples de mise en oeuvre
Création d’un record set
Set ors=Server.CreateObject(“ADODB.RecordSet”)
set ors=oconn.Execute(“SELECT ....”)
Déplacement dans un record set
while ors.EOF=false
--------ors.MoveNext
wend
Michel Tuffery
Fermer un record set
ors.Close
set ors=Nothing
Intranet et les Bases de Données
55
L’objet RecordSet :
Modes d’ouvertures en modification
Ouverture du record set
ors.Open instruction_sql,oconn,valeur1,valeur2
Valeur1 :
0 --> open forward only
1 --> openkeyset
2 --> open dynamic
3 --> open static
Valeur2 :
1 --> lock read only
2 --> lock pessimiste
3 --> lock optimiste
Michel Tuffery
Intranet et les Bases de Données
Type du curseur
Type du verrou
56
L ’Objet Record Set :
les différents types de curseur
CursorType: RS.Open Source, ActiveConnection, CursorType, LockType,
Options
Lors de l'open, CursorType définit le type de curseur à ouvrir parmi:
OpenForwardOnly : 0
Un curseur à déplacement vers l'avant uniquement.
OpenKeyset : 1
Curseur clavier. Identique au curseur dynamique, cependant vous ne pouvez
pas voir les enregistrements ajoutés par d'autres utilisateurs, bien que
les enregistrements supprimés par d'autres utilisateurs soient inaccessibles
à partir de votre recordset. Les modifications apportées aux données par
d'autres utilisateurs restent visibles.
Michel Tuffery
Intranet et les Bases de Données
57
L ’Objet Record Set :
les différents types de curseur
OpenDynamic : 2
Curseur dynamique. Les ajouts, modifications et suppressions
par d'autres utilisateurs sont visibles et tous les types de
mouvement dans le record set sont permis
OpenStatic : 3
Curseur statique. Une copie statique d'un ensemble
d'enregistrements que vous pouvez utiliser pour retrouver
des données ou produire des rapports.
Les ajouts, modifications et suppressions par
d'autres utilisateurs ne sont pas visibles.
Michel Tuffery
Intranet et les Bases de Données
58
L ’Objet Record Set :
les différents verrous
• LockreadOnly : 1
– Lecture seule
– Les données ne sont pas modifiables
• LockPessimistic : 2
– Verrouillage pessimiste
– Les enregistrements sont verrouillés au début
• LockOptimimistic : 3
– Verrouillage optimiste
– Les enregistrements sont verrouillés à l’appel de la méthode update
Michel Tuffery
Intranet et les Bases de Données
59
L’objet RecordSet
méthodes pour modifier
Modifier :
Ors.open sql,oconn,2,3
‘modificatons ...
Ors.update
Supprimer :
‘positionnement sur l’enr
ors.Delete
Ajouter :
Ors.open sql,oconn,2,3
ors.AddNew
‘remplissage des champs de l’enr....
Ors.update
Michel Tuffery
Intranet et les Bases de Données
60
Exemple 1
Connexion et remplissage tableau
<H1>
<CENTER>
Liste des postes
</CENTER>
</H1>
<HR>
<BR>
<FORM METHOD=post ACTION="essai1.asp">
Entrer le numéro de segment : <INPUT TYPE=TEXT
NAME=seglu value="130.120.80">
<INPUT TYPE=SUBMIT name="bouton" VALUE="Afficher">
</FORM>
<HR>
<BR>
Michel Tuffery
Intranet et les Bases de Données
61
Connexion et remplissage tableau
<%if request.form("bouton")="Afficher" then
SET segment_lu = Request.Form("seglu")
sql = "SELECT * FROM poste WHERE n_segment = '"&segment_lu&"'"
'création de l'objet conn
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "WebSQL","michel","michel"
set res = server.createobject("ADODB.recordset")
Set res = conn.Execute(sql) %>
<table border=1>
<tr><td>No de poste</td><td>Nom du poste</td><td>Adresse IP</td>
<td>Segment</td><td>Type de poste</td><td>No de salle</td></tr>
<%do while res.EOF=False%>
<tr>
<td> <%=res("n_poste")%> </td>
<td> <%=res("nom_p")%> </td>
<td> <%=res("n_segment")%>.<%=res("ad")%> </td>
<td> <%=res("n_segment")%> </td>
<td> <%=res("type_p")%> </td>
<td> <%=res("n_salle")%> </td>
</tr>
<%res.movenext loop%>
</table>
<%res.close
conn.close
end if%>
Michel Tuffery
Intranet et les Bases de Données
62
Connexion et remplissage tableau :
résultat
Michel Tuffery
Intranet et les Bases de Données
63
Remplissage tableau :
autre façon
<b>Liste des postes :<p>
<table border=1>
<tr><td>No de poste</td><td>Nom du poste</td>
<td>Numéro segment</td><td>Adresse</td>
<td>Type de poste</td><td>No de salle</td></tr>
<%while res.EOF=False%> <tr>
<%For Each col in res.fields%>
<td> <%response.write col.value%> </td>
<%next%>
<%res.movenext%>
</tr>
<%wend%>
</table>
Michel Tuffery
Intranet et les Bases de Données
64
Exemple 2
Ajout, suppression et modification
<%@ LANGUAGE="VBSCRIPT" %>
<HTML> <HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual InterDev 1.0">
<META HTTP-EQUIV="Content-Type«
content="text/html; charset=iso-8859-1">
<TITLE>M.A.J. BD</TITLE>
</HEAD> <BODY>
<form method=post action="essai3.asp">
Entrer le type du logiciel : <input type=text name=typelu>
<input type=submit value="Rechercher">
</form>
<hr>
../..
Michel Tuffery
Intranet et les Bases de Données
65
Ajout, suppression et modification
(suite)
<%set typeado=request.form("typelu")
sql="select * from logiciel where type_l='"&typeado&"'"
' Création de de l'objet conn
set conn=server.createobject("adodb.connection")
'Ouverture de la connexion physique
conn.Open "WebSQL","michel","michel"
'objet record set
set enr=server.createobject("adodb.recordset")
'ouverture du record set enr dans la connexion active conn
enr.open sql,conn,3,3 %>
../..
Michel Tuffery
Intranet et les Bases de Données
66
Ajout, suppression et modification
(suite)
<%if enr.recordcount<>0 then%>
<form method=post action="essai3.asp">
Numéro logiciel <br>
<input type=text name="nlog" value=" <%=enr("n_log")%> "> <br>
Nom logiciel <br>
<input type=text name="nomlog" value=" <%=enr("nom_l")%> "> <br>
Date d'achat <br>
<input type=text name="dateach" value=" <%=enr("date_ach")%> "> <br>
Version <br>
<input type=text name="verlog" value=" <%=enr("version")%> "> <br>
Type logiciel <br>
<input type=text name="typlog" value=" <%=enr("type_l")%> "> <br>
<input type=hidden name="typelu" value=" <%=request.form("typelu")%>">
<br>
<input type=submit name="action" value="Ajouter">
<input type=submit name="action" value="Supprimer">
<input type=submit name="action" value="Modifier">
<br> </form>
../..
<%end if%>
Michel Tuffery
Intranet et les Bases de Données
67
Ajout, suppression et modification
(suite)
<%
if request.form("action")="Ajouter" then
'ajout d'une ligne dans le record set
enr.addnew
'affectation col record set <-- valeur champ
enr("n_log")=request.form("nlog")
enr("nom_l")=request.form("nomlog")
enr("date_ach")=request.form("dateach")
enr("version")=request.form("verlog")
enr("type_l")=request.form("typlog")
'mise à jour de la bd : insert
enr.update
end if
Michel Tuffery
Intranet et les Bases de Données
../..
68
Ajout, suppression et modification
(suite)
if request.form("action")="Modifier" and enr.recordcount<>0 then
'Positionnement dans le record set sur
' la même ligne que le formulaire
enr.movefirst
do while enr("n_log")<>request.form("nlog")
enr.movenext
loop
'affectation colonne record set <-- valeur champ
enr("nom_l")=request.form("nomlog")
enr("date_ach")=request.form("dateach")
enr("version")=request.form("verlog")
enr("type_l")=request.form("typlog")
‘mise à jour de la bd : update
enr.update
end if
../..
Michel Tuffery
Intranet et les Bases de Données
69
Ajout, suppression et modification (fin)
if request.form("action")="Supprimer" and enr.recordcount<>0 then
'Positionnement dans le record set sur
'la même ligne que le formulaire
enr.movefirst
do while enr("n_log")<>request.form("nlog")
enr.movenext
loop
'suppression dand la bd : delete
enr.delete
end if
enr.close
conn.close
%>
</BODY>
</HTML>
Michel Tuffery
Intranet et les Bases de Données
70
Exemple 3
Liste dynamique
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual InterDev 1.0">
<META HTTP-EQUIV="Content-Type"
content="text/html; charset=iso-8859-1">
<TITLE>Liste dynamique</TITLE>
</HEAD>
<BODY>
<!-- Remplissage et utilisation d'une liste dynamique-->
<H1>
<CENTER> Liste des postes</CENTER>
</H1> <HR> <BR>
<% 'création de l'objet conn
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "WebSQL","michel","michel"
%>
Michel Tuffery
Intranet et les Bases de Données
71
Liste dynamique (suite)
<%sql = "select distinct type_p from poste"
set res = server.createobject("ADODB.recordset")
set res = conn.execute(sql) %>
<FORM METHOD=post ACTION="essai4.asp">
Entrer le numéro de segment :
<INPUT TYPE=TEXT NAME=seglu value="130.120.80">
<INPUT TYPE=SUBMIT name="bouton" VALUE="Afficher">
Choisissez le type de poste
<select name="typelu">
<% do while res.EOF=false%>
<option> <%=res("type_p")%>
<%res.movenext
loop%>
</select>
<%res.close%>
</FORM> <HR> <BR>
Michel Tuffery
Intranet et les Bases de Données
72
Liste dynamique (fin)
<%if request.form("bouton")="Afficher" then
SET segment_lu = Request.Form("seglu")
SET type_lu = Request.Form("typelu")
sql = "SELECT * FROM poste WHERE n_segment = '"&segment_lu&"'
and type_p = '"&type_lu&"'"
set res = server.createobject("ADODB.recordset")
Set res = conn.Execute(sql) %>
<table border=1>
<tr><td>No de poste</td><td>Nom du poste</td><td>Adresse IP</td>
<td>Segment</td><td>Type de poste</td><td>No de salle</td></tr>
<%do while res.EOF=False%>
<tr>
<td> <%=res("n_poste")%> </td>
<td> <%=res("nom_p")%> </td>
<td> <%=res("n_segment")%>.<%=res("ad")%> </td>
<td> <%=res("n_segment")%> </td>
<td> <%=res("type_p")%> </td>
<td> <%=res("n_salle")%> </td>
</tr>
<%res.movenext
loop%>
</table>
<%res.close conn.close
end if%> </BODY></HTML>
Michel Tuffery
Intranet et les Bases de Données
73
Exemple 4
Parcours record set et affichage
<%@ LANGUAGE="VBSCRIPT" %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual InterDev 1.0">
<META HTTP-EQUIV="Content-Type"
content="text/html; charset=iso-8859-1">
<TITLE>Suivant et précédent</TITLE>
</HEAD>
<BODY>
<!-- Parcours record set et affichage -->
<form method=post action="essai5.asp">
Entrer le type du logiciel : <input type=text name=typelu>
<input type=submit value="Rechercher">
</form> <hr>
Michel Tuffery
Intranet et les Bases de Données
74
Parcours record set et affichage
<%set typeado=request.form("typelu")
sql="select * from logiciel where type_l='"&typeado&"'"
set conn=server.createobject("adodb.connection")
conn.Open "WebSQL","michel","michel"
set enr=server.createobject("adodb.recordset")
enr.open sql,conn,3,3 %>
<%if enr.recordcount<>0 and request.form("action") <> "Précédent »
and request.form("action") <> "Suivant" then%>
<form method=post action="essai5.asp"> Numéro logiciel <br>
<input type=text name="nlog" value= "
<%=enr("n_log")%> "> <br> Nom logiciel <br>
<input type=text name="nomlog" value= "
<%=enr("nom_l")%> "> <br> Date d'achat <br> b
<input type=text name="dateach" value= "
<%=enr("date_ach")%> "> <br> Version <br>
<input type=text name="typlog" value=" <%=enr("type_l")%> "><br>
<input type=hidden name="typelu" value=" <%=request.form("typelu")%>"><br>
<input type=submit name="action" value="Précédent">
<input type=submit name="action" value="Ajouter">
<input type=submit name="action" value="Supprimer">
<input type=submit name="action" value="Modifier">
<input type=submit name="action" value="Suivant">
<br> </form>
<%end if%>
Michel Tuffery
Intranet et les Bases de Données
75
Parcours record set et affichage
if request.form("action")="Précédent" and enr.recordcount<>0 then
do while enr("n_log")<>request.form("nlog")
enr.movenext
loop
enr.moveprevious
if enr.BOF=false then %>
<form method=post action="essai5.asp">
On remet ici le formulaire du haut ....
</form>
<%
else %> ‘Premier enregistrement ....<br>
<%end if
end if
if request.form("action")="Suivant" and enr.recordcount<>0 then
do while enr("n_log")<>request.form("nlog")
enr.movenext
loop
enr.movenext
if enr.EOF=false then %>
<form method=post action="essai5.asp">
On remet ici le formulaire du haut ....
</form>
<% else %> ‘Dernier enregistrement .... <br>
<%end if
end if%> </BODY> </HTML>
Michel Tuffery
Intranet et les Bases de Données
76
Commandes VB script
• Ne pas oublier les début et fin de script
• <%
%>
• Syntaxe du if : If .. Then .. Else .. End If
• Différentes boucles possibles
– Do While condition .... Loop
– While condition ... Wend
– For Each valeur in plage_valeurs ... Next
Michel Tuffery
Intranet et les Bases de Données
77
Commandes VB script
• Les comparaisons de chaînes tiennent compte de
la casse
• Fonction Ucase(" chaîne ") pour mettre en
majuscule
• Concaténation de deux chaînes : ch3=ch1&ch2
• ‘ Ligne de commentaires ...
• Renvoyer une valeur dans HTML : <%=valeur%>
• Arrondir un réel à n décimales : round (valeur,n)
Michel Tuffery
Intranet et les Bases de Données
78
Commandes VB script
• Important : utiliser les champs cachés
– pour vérifier que l ’on est déjà entré dans une page qui
s ’appelle elle même (faire des tests)
– pour passer la valeur d ’un champ au nouvel appel de la
page
– <input type=" hidden" name=" .. " value=" .. ">
• Récupération de la valeur d ’un champ d ’un
formulaire (text, submit, hidden,..) :
– Request.Form(" champ ")
Michel Tuffery
Intranet et les Bases de Données
79
Commandes VB script
• Test d ’une valeur nulle : IsNull(variable)
• Récupération de la date du jour au format
jj/mm/aaaa :
<%=day(date)&" / "&month(date)&"/ "&year(date)%>
Michel Tuffery
Intranet et les Bases de Données
80
Bibliographie
• Bases de données sous Linux
– Eyrolles
• Interface entre Web et Bases de données
– Eyrolles
• Client/Serveur Guide de survie
– Editions Vuibert
• Serveur d’applications
– Eyrolles
• Active Server Page
– Eyrolles
• Oracle 8 Architecture
– Oracle Press
Michel Tuffery
Intranet et les Bases de Données
81
Adresses Web utiles
• http://technet.oracle.com
• http://lagune.cict.fr:9000/doc/
Michel Tuffery
Intranet et les Bases de Données
82

Documents pareils