III- KẾT NỐI VÀ TRUY XUẤT DATABASE
5. Phương thức Close: Để ngắt kết nối với cơ sở dữ liệu, ta dùng phương thức Close có trong đối tượng Recordset cũng như có trong đối tượ ng Connection Sau đ ó
3.3.2.4. Sử dụng câu truy vấn SQL
Bạn có thể xây dựng sẵn một câu lệnh truy vấn và thực thi nó bằng phương thức Open của đối tượng ADODB.Recordset để lấy ra tập bản ghi thoả mãn câu truy vấn đó. Sử dụng câu truy vấn SQL bạn có thể lọc ra những dữ liệu cần thiết theo một số điều kiện, đồng thời có thể sắp xếp được dữ liệu.
Ví dụ 1: Hiện những người có Họ tên bắt đầu là chữ N
<%
set conn=Server.CreateObject("ADODB.Connection") conn.Open "bangluong"
sql="SELECT * FROM LUONG WHERE HOTEN LIKE 'N%’ ” set rs=Server.CreateObject("ADODB.recordset")
rs.Open sql, conn %>
<table border="1" width="100%"> <%do until rs.EOF%>
<tr>
<%for each x in rs.Fields%>
<td><%Response.Write(x.value)%></td> <%next rs.MoveNext%> </tr> <%loop rs.close conn.close %> </table>
Ví dụ 2 : Hiện toàn bộ nhưng Họ tên được sắp xếp
<%
set conn=Server.CreateObject("ADODB.Connection") conn.Open "bangluong"
set rs=Server.CreateObject("ADODB.recordset")
rs.Open sql, conn %>
<table border="1" width="100%"> <%do until rs.EOF%>
<tr>
<%for each x in rs.Fields%>
<td><%Response.Write(x.value)%></td> <%next rs.MoveNext%> </tr> <%loop rs.close conn.close %> </table>
Có một cách khác để thực hiện câu truy vấn là sử dụng phương thức Execute của đối tượng ADODB.Connection rồi gắn kết quả trả về của phương thức này cho đối tượng ADODB.Recordset. Trong trường hợp này, ta không cần phải khai báo trước đối tượng ADODB.Recordset.
Thí dụ sau tương đương với ví dụ 1 ở trên, nhưng ta sử dụng phương thức ADODB.Connection.Execute để thực hiện câu truy vấn.
<%
set conn=Server.CreateObject("ADODB.Connection")
conn.Open "bangluong" ‘Mở CSDL gắn với DSN là “bangluong” sql="SELECT * FROM LUONG WHERE HOTEN LIKE 'N%’ ” ‘Bỏ lệnh này set rs=Server.CreateObject("ADODB.recordset")
‘Bỏ lệnh này rs.Open sql, conn
Set rs=conn.Excute(sql) ‘Không cần khai báo trước đối tượng rs
%>
<table border="1" width="100%"> <%do until rs.EOF%>
<tr>
<%for each x in rs.Fields%>
<%next rs.MoveNext%> </tr> <%loop rs.close conn.close %> </table> 3.3.2.5. Một số ví dụ
Ví dụ 1: Ta hiện toàn bộ danh sách trong bảng lương nhưng có thêm tiêu đề
các cột cho dễđọc : <html> <body> <% set conn=Server.CreateObject("ADODB.Connection") conn.Open “bangluong” set rs = Server.CreateObject("ADODB.recordset") sql="SELECT * FROM LUONG"
rs.Open sql, conn %>
<table border="1" width="100%"> <tr>
<% for each x in rs.Fields
response.write("<th>" & x.name & "</th>") next%>
</tr>
<%do until rs.EOF%> <tr>
<% for each x in rs.Fields%>
<td><% Response.Write(x.value)%></td> <%next rs.MoveNext%> </tr> <%loop rs.close conn.close %>
</body> </html>
Ví dụ 2 : Thêm record vào database
<html> <body> <%
set conn=Server.CreateObject("ADODB.Connection")
conn.Open “bangluong”,2,3 ‘ Tham sốđể có thể truy xuất , cập nhật database set rs = Server.CreateObject("ADODB.recordset")
sql="SELECT * FROM LUONG" rs.Open sql, conn rs.addnew rs.fields(“MaNV”)=5 rs.fields(“Hoten”)=”Hoang Hai” rs.fields(“LuongCB”)=100000 rs.fields(“PhuCap”)=40000 rs.fields(“TongTien”)=140000 rs.update rs.close conn.close %> </table> </body> </html>
Ví dụ 3: Trong các trang Web ta hãy thêm hit-counter vào. Đây là một kỹ thuật đểđếm số lượt người dùng đên thăm trang Web. Ta xây dựng một CSDL chứa giá trị hiện thời số lượt người đến, mỗi một lượt duyệt Web nữa tăng giá trị trong cơ sở dữ liệu lên 1.
Ta tạo một tệp ASP chuyên dùng để đếm lượt duyệt Web có tên là DEM.ASP sau đó trên toàn bộ các trang Web khác ta sẽ gọi tệp ASP này ở trong mỗi tệp ASP của ta (include file).
Giả sử ta có tệp counter_db.mdb có bảng hit_count. Trong bảng này có hai trường là Page_name và Hit_count. Page_name chứa tên file ASP và Hit_count chứa số lần user duyệt trang đó
<%
Const adOpenKeyset = 1 Const adLockPessimistic = 2 Const adCmdText = &H0001 Dim strFilename
Dim strSQL Dim rsCounter Dim iCount
strFilename = Request.ServerVariables("SCRIPT_NAME")
strSQL = "SELECT page_name, hit_count FROM hit_count WHERE page_name='" & strFilename & "';"
Set rsCounter = Server.CreateObject("ADODB.Recordset")
rsCounter.Open strSQL, "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("counter_db.mdb") & ";", _
adOpenKeyset, adLockPessimistic, adCmdText If rsCounter.EOF Then rsCounter.AddNew iCount = 0 rsCounter.Fields("page_name").Value = strFilename Else rsCounter.MoveFirst iCount = rsCounter.Fields("hit_count").Value End If
‘ Tăng giá trị lên 1 và update vào DB rsCounter.Fields("hit_count").Value = iCount + 1 rsCounter.Update
rsCounter.Close
Set rsCounter = Nothing ' Trả về giá trị hiện thời
RetrieveAndIncrementCount = iCount End Function
%>
<!--#include file="DEM.ASP”-->