Documente Academic
Documente Profesional
Documente Cultură
9
ASP și bazele de date
Cuprins:
Obiective
Însuşirea noţiunilor generale despre conectarea la o bază de date ASP
Înțelegerea notiunilor de actualizare a datelor în bazele de date prin
intermediul paginilor web.
Utilizarea limbajului ASP în proiectarea paginilor web care preiau
informații din baze de date.
150
După salvare şi execuţie, browserul va afişa ca mai sus:
Inserarea efectivă se face prin următoarea secvenţă de cod ASP, pe care-o
vom salva sub numele insert_data.asp.
<HTML><HEAD><TITLE> Script de inserare a datelor </TITLE>
</HEAD>
<BODY>
<%
'Setează variabilele din formularul precedent
Nume = request.form("Nume")
Email = request.form("Email")
Telefon = request.form("Telefon ")
'Trimiterea datelor către baza de date
set conn = server.createobject("adodb.connection")
'Face conectarea către DSN
conn.open "Persoane"
'Inserarea datelor în the baza de date este terminată
'prin inserarea în limbaj SQL, urmată de numele tabelei
'şi apoi de numele câmpurilor între paranteze, separate
'prin virgulă. Apoi, valorile sunt introduse în câmpuri.
SQLstmt = "INSERT INTO Persoane (Nume, Email, Telefon)"
SQLstmt = SQLstmt & " VALUES ("
SQLstmt = SQLstmt & "'" & Nume & "',"
SQLstmt = SQLstmt & "'" & Email & "',"
SQLstmt = SQLstmt & "'" & Telefon & "')"
Set RS = conn.execute(SQLstmt)
151
'Rutina pentru erori:
If err.number>0 then
response.write "VBScript Errors Occured:" & "<P>"
response.write "Error Number=" & err.number & "<P>"
response.write "Error Descr.=" & err.description & "<P>"
response.write "Help Context=" & err.helpcontext & "<P>"
response.write "Help Path=" & err.helppath & "<P>"
response.write "Native Error=" & err.nativeerror & "<P>"
response.write "Source=" & err.source & "<P>"
response.write "SQLState=" & err.sqlstate & "<P>"
End If
If conn.errors.count> 0 then
response.write "A apărut eroare!" & "<P>"
response.write SQLstmt & "<P>"
for counter= 0 to conn.errors.count
response.write "Error #" & conn.errors(counter).number & "<P>"
response.write "Error desc. -> " & conn.errors(counter).description & "<P>"
Next
Else
End If
conn.close
%>
Informaţia a fost inserată cu succes în baza de date.
</BODY> </HTML>
152
Declaraţie de selecţie cu condiţie, care foloseşte
select * from table where
clauza LIKE. Orice cuvânt din coloana unde se face
column LIKE
căutarea ce conţine ceea ce se găseşte după LIKE
'% condiţie%'
între caracterele ,,%” va fi găsit, chiar dacă se
găseşte text înainte sau după el. Semnele procent pot
fi folosite de fiecare parte a datei care a fost
selectată.
Do while not rs.eof Această secvenţă este un exemplu de ciclu
... condiţional. Atâta timp cât setul de înregistrări nu a
... ajuns la capăt, se vor executa instrucţiunile din ciclu.
rs.MoveNext
Loop
Pe exemplul tabelei Persoane, vom crea următoarea secvenţă de cod, pe
care o vom salva cu numele select_data.asp:
<HTML>
<HEAD>
<TITLE>Script de selecţie</TITLE>
</HEAD>
<BODY>
<%
„Setează DSN-ul, crează exprimarea SQL şi
„conectează setul de înregistrări la acestea.
set DB = Server.CreateObject ("adodb.Connection")
DB.open ("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE = "
+Server.MapPath("/Persoane.mdb"))
set rs=Server.CreateObject("adodb.Recordset")
rs.open ("SELECT * FROM Persoane"), DB
'Rutina logică. Dacă nu există date în baza de date
'(rs.eof sau recordset-ul este la sfârşit),
'afişează un mesaj că nu sunt înregistrări
'Altfel, va afişa înregistrările
If rs.eof then
response.write "Nu sunt înregistrări în baza de date!"
response.end
Else
'Acesta este un exemplu de ciclu. Instrucţiunea "Do"
'face pereche cu "Loop" de la sfarşitul acestui script. Este asociată
'execuţiei scriptului ce urmează, atata timp cât este indeplinită condiţia
'ca fişierul să nu se afle la sfârşit.
Do while not rs.eof
Nume = rs("Nume")
Email = rs("Email")
Telefon = rs("Telefon")
153
%>
Numele este: <%= Nume %><BR>
Adresa de email a persoanei este: <%= Email %><BR>
Telefonul persoanei: <%= Telefon %><BR>
<HR>
<%
rs.MoveNext
loop
End If
%>
</BODY>
</HTML>
Se va afişa:
154
Totuşi, dacă se alege metoda ştergerii înregistrărilor dintr-o bază de date,
aceasta se face potrivit tabelului de mai jos:
155
ID=rs(“ID”)
Nume = rs("Nume")
Email = rs("Email")
Telefon = rs("Telefon")
'Se va afişa fiecare înregistrare într-o căsuţă ascunsă
„Se vor afişa toate înregistrările baze de date şi se va selecta înregistrarea
'pe care dorim să o ştergem.
%>
<OPTION VALUE="<%= ID %>"><%= Nume %></OPTION>
<%
rs.MoveNext
loop
End If
%>
</SELECT>
<INPUT TYPE="SUBMIT">
</FORM>
</BODY>
</HTML>
156
După această parte de selecţie a datelor care vor fi şterse urmează operaţia
efectivă de ştergere, care se face prin următorul paragraf de cod asp, pe care-l vom
salva cu numele delete_data.asp.
<HTML>
<HEAD>
<TITLE>Script de ştergere a datelor</TITLE>
</HEAD>
<BODY>
<%
'Această variabilă este selectată prin formularul precednt.
ID = request.form("ID")
„Setează DSN-ul, crează exprimarea SQL şi
„conectează setul de înregistrări la acestea.
set DB = Server.CreateObject ("adodb.Connection")
DB.open ("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE = "
+Server.MapPath("/Persoane.mdb"))
set rs=Server.CreateObject("adodb.Recordset")
' Crează cererea de stergere pe baza valorii primite
rs.open ("delete *from Persoane where ID= “& ID), DB
%>
<h2>Înregistrarea selectată a fost ştearsă.</h2>
<%
DB.close
%>
</BODY>
</HTML>
După rularea şi a acestui cod, se va şterge înregistrarea selectată din baza
de date, iar browserul afişează mesajul de confirmare a ştergerii.
Astfel, operaţia de ştergere a datelor selectate din baza de date MS Access
a fost realizată cu success. Urmează o altă operaţie importantă asupra datelor unei
baze de date, şi anume actualizarea acestora.
157
9.5. Actualizarea datelor
Se face foarte uşor utilizând doar trei pagini ASP. Sunt şi alte căi de
actualizare a datelor, dar prin ASP manipularea datelor se face fără ştergerea
datelor şi apoi readăugarea actualizată a lor. Pentru actualizarea datelor se foloseşte
instrucţiunea Update, cu sintaxa:
UPDATE table SET column='valoare' column2='valoare'… where column=
'identificator'
Folosind acelaşi exemplu al tabelei Persoane vom avea trei scripturi
principale, unul de selecţie a datelor pe care vrem să le actualizăm, cel de-al doilea
pentru afişarea formularului şi a tuturor valorilor câmpurilor din baza de date iar
cel de-al treilea va realiza efectiv actualizarea bazei de date.
Primul script, pe care-l salvăm ca select_update_data.asp, va fi un formular
asemănător cu cel de la selecţia datelor pentru ştergere:
<HTML>
<HEAD>
<TITLE>Script de selectie si actualizare a datelor</TITLE>
</HEAD>
<BODY>
<FORM ACTION="modify_data1.asp" METHOD="POST">
<SELECT NAME="ID">
<OPTION SELECTED>Alegeţi înregistrarea pe care o modificaţi</OPTION>
<%
„Setează DSN-ul, crează exprimarea SQL şi
„conectează setul de înregistrări la acestea.
set DB = Server.CreateObject ("adodb.Connection")
DB.open ("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE = "
+Server.MapPath("/Persoane.mdb"))
set rs=Server.CreateObject("adodb.Recordset")
rs.open ("SELECT * FROM Persoane"), DB
158
'Rutina logică. Dacă nu există date în baza de date
'(rs.eof sau recordset-ul este la sfârşit),
'afişează un mesaj că nu sunt înregistrări
'Altfel, va afişa înregistrările
If rs.eof then
response.write "Nu sunt înregistrări în baza de date!"
response.end
Else
'Acesta este un exemplu de ciclu. Instrucţiunea "Do"
'face pereche cu "Loop" de la sfarşitul acestui script. Este asociată
'execuţiei scriptului ce urmează, atâta timp cât este îndeplinită condiţia
'ca fişierul să nu se afle la sfârşit.
Do while not rs.eof
ID=rs(“ID”)
Nume = rs("Nume")
Email = rs("Email")
Telefon = rs("Telefon")
'Se va afişa fiecare înregistrare într-o căsuţă ascunsă
„Se vor afişa toate înregistrările baze de date şi se va selecta înregistrarea
'pe care dorim să o modificăm.
%>
<OPTION VALUE="<%= ID %>"><%= Nume %></OPTION>
<%
rs.MoveNext
loop
End If
%>
</SELECT>
<INPUT TYPE="SUBMIT">
</FORM>
</BODY>
</HTML>
<HTML>
<HEAD>
<TITLE>Formular de modificare a datelor</TITLE>
</HEAD>
<BODY>
<FORM ACTION="modify_data2.asp" METHOD=POST>
159
<%
'Această variabilă este selectată prin formularul precednt.
ID = request.form("ID")
„Setează DSN-ul, crează exprimarea SQL şi
„conectează setul de înregistrări la acestea.
set DB = Server.CreateObject ("adodb.Connection")
DB.open ("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE = "
+Server.MapPath("/Persoane.mdb"))
set rs=Server.CreateObject("adodb.Recordset")
rs.open("SELECT * from Persoane WHERE „ID =‟" & ID & " "), DB
If rs.eof then
response.write "Nu sunt înregistristrări pentru acest ID."
response.end
Else
„Se declară toate variabilele câmp
Dim ID, Nume, Email, Telefon
„Extrage datele pentru fiecare câmp pentru a fi afişate şi schimbate
Nume=rs(“Nume”)
Email=rs(“Email”)
Telefon=rs(“Telefon”)
End If
%>
<INPUT TYPE=HIDDEN NAME=ID VALUE="<%= ID %>">
<TABLE WIDTH=600 BORDER=1>
<TR><TD>Nume:</TD>
<TD><INPUT NAME="Nume" TYPE=text VALUE="<%= Nume %>"></TD>
</TR>
<TR>
<TD>Email:</TD>
<TD><INPUT NAME="Email" TYPE=text VALUE="<%= Email %>"></TD>
</TR>
<TR>
<TD>Telefon:</TD>
<TD><INPUT NAME="Telefon" TYPE=text VALUE="<%= Telefon
%>"></TD>
</TR>
<TR>
<TD COLSPAN=2><INPUT TYPE="Submit"></TD>
</TR>
<%
rs.close
%>
</TABLE>
160
</FORM>
</BODY>
</HTML>
Cel de-al treilea script, care va actualiza efectiv datele modificate prin
formularul din scriptul precedent, va fi salvat ca modify_data2.asp:
<HTML><HEAD><TITLE>Formular de modificare a datelor</TITLE>
</HEAD>
<BODY>
<%
'Această variabilă este selectată prin formularul precedent.
ID = request.form("ID")
Nume= request.form(“Nume”)
Email= request.form(“Email”)
Telefon= request.form(“Telefon”)
„Setează DSN-ul, crează exprimarea SQL şi
„conectează setul de înregistrări la acestea.
set DB = Server.CreateObject ("adodb.Connection")
DB.open ("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE = "
+Server.MapPath("/Persoane.mdb"))
161
set rs=Server.CreateObject("adodb.Recordset")
rs.open(Persoane), DB
SQLstmt = "UPDATE [Persoane]"
SQLstmt = SQLstmt & " SET Nume='" & Nume &"',"
SQLstmt = SQLstmt & " Email='" & Email & "',"
SQLstmt = SQLstmt & " Telefon ='" & Telefon & "'"
SQLstmt = SQLstmt & " where ID=" & ID
Rs.Execute(SQLstmt)
%>
Înregistrarea pentru numele <b><%= Nume %></b>a fost modificată.
<%
DB.close
%>
</BODY>
</HTML>
În browser se va afişa:
Afişarea datelor dintr-o bază de date se face simplu pentru un număr mic
de înregistrări prin instrucţiunea select * from table, însă pentru un număr foarte
mare de înregistrări această metodă nu este adecvată, browserul nefăcând faţă
162
încărcării atâtor înregistrări. Pentru a rezolva aceste neajunsuri s-a pus la cale o
metodă de afişare pe pagini, bazată pe informaţiile din tabelul următor:
9.7. Aplicații
165