ASP:ACCESS Database
การติดตั้ง ODBC Active Server Pages สามารถติดต่อฐานข้อมูลโดยผ่าน Object Database Connectivity (ODBC). ในการใช้ ODBC เราจะต้องทำให้ฐานข้อมูลของเรารู้จัก ODBC ก่อน ฐานข้อมูลติดต่อกับ ODBC โดยผ่าน Data Source Name (DSN) ASP with Access
การสร้าง ODBC Data Source Name 1. ในวินโดว์ Control Panel ดับเบิ้ลคลิ๊กที่ไอคอน ODBC 2. เลือกแท็บ System DSN 3. คลิ๊กที่ปุ่ม Add… 4. จะปรากฏพร้อมพ์ให้ใส่ database driver ถ้าเป็น Access ให้เลือก Microsoft Access Driver (*.mdb). เลือกคลิ๊กปุ่ม finish 5. ต่อไปให้กำหนดค่า Data Source Name. สำหรับช่อง Description อาจละไว้ก็ได้ 6. ขั้นต่อไปให้เลือก database. โดยคลิกที่ปุ่ม Select… 7. ใช้วินโดว์เลือกชื่อฐานข้อมูลแล้วคลิก OK. ASP with Access
การจัดการฐานข้อมูลด้วย Active Server Pages มีขั้นตอนทั้งหมด 4 ขั้นตอนดังนี้ 1. Create instance of database component set instance_name = Server.CreateObject("ADODB.Connection") เราใช้ instance_name ติดต่อกับฐานข้อมูล 2. Open a connection to the database instance_name.Open "data_source_name" เมื่อ data_source_name คือ DSN ที่ระบุใน ODBC ASP with Access
การจัดการฐานข้อมูลด้วย Active Server Pages 3. Create an Instance of the Recordset set recordset = Server.CreateObject("ADODB.recordset") recordset จะใช้เก็บผลของ query. โดยจะเก็บจำนวนของระเบียนซึ่งเป็นผลมาจากคำสั่ง SQL query 4. Execute the SQL statement and store the result recordset.Open query_name,instance_name,3 เมื่อ query_name คือสตริงที่เก็บคำสั่งของ SQL query และ 3 คือ parameter ที่ระบุ cursortype. ASP with Access
ตัวอย่างการติดต่อผ่าน DSN เราได้กำหนด DNS ให้กับฐานข้อมูล recordsนี้โดยผ่าน ODBC แล้วชื่อว่า records ต่อไปนี้เป็นโปรแกรม ASP ที่ใช้ติดต่อกับฐานข้อมูลจากฐานที่กำหนด <% Query="Select Title,Artist from CDs ORDER by Artist" Set DataConn = Server.CreateObject("ADODB.Connection") DataConn.Open "records" Set RSlist = Server.CreateObject("ADODB.recordset") RSlist.Open Query,DataConn,3 %> ASP with Access
เมื่อเราแทรกส่วนของโปรแกรมต่อไปนี้ลงไป <HTML> <BODY> <% Do While Not RSlist.EOF %> <%=RSlist("Title")%>, <%=RSlist("Artist")% ><BR> RSlist.Movenext Loop </BODY> </HTML> จะแสดงผลลัพธ์ในฐานข้อมูล ASP with Access
แสดงข้อมูลเป็นตาราง <HTML> <BODY> <TABLE BORDER=1 CELLPADDING=0> <TR><TD><B>Title</B></TD><TD><B>Artist</B></TD></TR> <% Do While Not RSlist.EOF %> <TR> <TD><%=RSlist("Title")%></TD> <TD><%=RSlist("Artist")%></TD> </TR> RSlist.Movenext Loop </TABLE> </BODY> </HTML> ASP with Access
แสดงจำนวนระเบียน นอกจากนี้เรายังสามารถแสดงจำนวนระเบียนโดยแทรกคำสั่งต่อไปนี้ <BODY> Your search returned <B><%=RSlist.RecordCount%></B> records.<BR> <TABLE BORDER=1> ASP with Access
Querying Databases using HTML forms ในการเขียนโปรแกรม Active Server Page เพื่อติดต่อกับฐานข้อมูลนั้นจะสามารถทำได้ง่ายเมื่อใช้ HTML forms เข้ามาดำเนินการ ต่อไปนี้จะกล่าวถึงการเขียนโปรแกรมดำเนินการกับcomponentของ forms ASP with Access
Text box และ WHERE (artist.html) <FORM METHOD="GET" ACTION="artist.asp"> <H3>CD Search</H3> Enter an artist:<BR> <INPUT TYPE="TEXT" NAME="artist"> <P><INPUT TYPE="SUBMIT" VALUE="Search"> </HTML> ASP with Access
Query = "SELECT Title,Artist from CDs WHERE Artist LIKE '%" เราสามารถใช้ สตริง VBScript มาเชื่อมต่อกันและส่งไปให้ ODBC driveได้ ดังแฟ้ม artist.asp, ต่อไปนี้ <% Query = "SELECT Title,Artist from CDs WHERE Artist LIKE '%" Query = Query & Request("artist") & "%'" Query = Query & " ORDER BY Artist" Set DataConn = Server.CreateObject("ADODB.Connection") DataConn.Open "records" Set RSlist = Server.CreateObject("ADODB.recordset") RSlist.Open Query,DataConn,3 %> ASP with Access
<TABLE BORDER=1> <HTML> Your search returned <B><%=RSlist.RecordCount%></B> records.<BR> <TABLE BORDER=1> <TR><TD><B>Title</B></TD><TD><B>Artist</B></TD></TR> <% Do While Not RSlist.EOF %> <TR> <TD><%=RSlist("Title")%></TD> <TD><%=RSlist("Artist")%></TD> </TR> ASP with Access
<A HREF="artist.html">Return to form</A> RSlist.Movenext Loop %> </TABLE> <A HREF="artist.html">Return to form</A> <HR><SMALL><%=Query%></SMALL> </HTML> ASP with Access
Radio button และ WHERE (format.html) <FORM METHOD="GET" ACTION="format.asp"> <H3>CD Search</H3> Enter an artist:<BR> <INPUT TYPE="TEXT" NAME="artist"> <P>Select format<BR> Album <INPUT TYPE="RADIO" NAME="FORMAT" VALUE="Album"> Single <INPUT TYPE="RADIO" NAME="FORMAT" VALUE="Single"> Both <INPUT TYPE="RADIO" NAME="FORMAT" VALUE="Both" CHECKED> <P><INPUT TYPE="SUBMIT" VALUE="Search"> </HTML> ASP with Access
คำสั่ง If..Then… Elseif เพื่อจัดการกับอนุประโยค WHERE คำสั่งที่ใช้ SELECT Title,Artist,Format from CDs WHERE Artist LIKE '% artist%' AND format='CDA' ORDER BY Artist คำสั่ง If..Then… Elseif เพื่อจัดการกับอนุประโยค WHERE ASP with Access
แฟ้ม format.asp <% format=Request("format") Query="SELECT Title,Artist,Format from CDs WHERE Artist LIKE '%" Query=Query & Request("artist") & "%'" If format="Album" Then Query=Query & " AND format='CDA'" ElseIf format="Single" Then Query=Query & " AND format='CDS'" End If Query = Query & " ORDER BY Artist" ASP with Access
Drop down menu และ WHERE เราสามารถใช้ผลของคำสั่ง SQL เพื่อนำมาแสดงใน drop-down box ได้ ตัวอย่างต่อไปนี้จะใช้ฐานข้อมูล books โดยมี DSN คือ books และมี 2 ตาราง ASP with Access
แฟ้ม subject.asp <% Query = "SELECT subject,subject_ID from subjects ORDER BY subject" Set DataConn = Server.CreateObject("ADODB.Connection") DataConn.Open "books" Set RSlist = Server.CreateObject("ADODB.recordset") RSlist.Open Query,DataConn,3 %> <HTML> <FORM METHOD="GET" ACTION="list.asp"> <H3>Book Search</H3> ASP with Access
Select a subject area:<BR> <SELECT NAME="subject"> <% Do While Not RSlist.EOF %> <OPTION VALUE="<%=RSlist("subject_ID")%>"><%=RSlist("subject")%> RSlist.MoveNext Loop %> </SELECT> <P><INPUT TYPE="SUBMIT"> </FORM> </HTML> ASP with Access
แฟ้ม list.asp <% Query="SELECT * FROM books WHERE subject_ID=" & Request("subject") Query = Query & " ORDER BY title" Set DataConn = Server.CreateObject("ADODB.Connection") DataConn.Open "books" Set RSlist = Server.CreateObject("ADODB.recordset") RSlist.Open Query,DataConn,3 %> <HTML> <TABLE BORDER=1> <TR> <TD><B>Title</B></TD><TD><B>Surname</B></TD> </TR> ASP with Access
<TD><%=RSlist("Title")%></TD> Do While Not RSlist.EOF %> <TR> <TD><%=RSlist("Title")%></TD> <TD><%=RSlist("surname")%></TD> </TR> RSlist.Movenext Loop </TABLE> <A HREF="subject.asp">Return to form</A> <HR><SMALL><%=Query%></SMALL> </HTML> ASP with Access
Drill-Down จากตัวอย่างที่ผ่านมาผู้ใช้แสดงชื่อหนังสือและผู้แต่งแต่ละเล่มถ้าผู้ใช้ต้องการแสดงรายละเอียดของชื่อเรื่องทั้งหมดเราสามารถสร้างได้โดยใช้ drill-down. เราสามารถแก้ไขแฟ้ม subject.asp และ list.asp ดังนี้ Newsubject.aspเป็น HTML Form ที่เรียกใช้ newlist Newlist.asp แสดงรายชื่อหนังสือทีมี link เชื่อมโยง bookdetails,asp แสกงรายละเอียดของหนังสือ ASP with Access
เราเปลี่ยนชื่อและแก้ไขแฟ้มเป็น newsubject.asp เปลี่ยนแฟ้ม ASP เพื่อสร้างฟอร์ม subject.asp เพื่อเรียกใช้แฟ้ม ASP อื่นๆ ด้วยคำสั่ง<FORM METHOD="GET" ACTION="newlist.asp"> เราเปลี่ยนชื่อและแก้ไขแฟ้มเป็น newsubject.asp และเปลี่ยนคำสั่งใน list.asp จากตัวอย่างก่อนดังนี้ <TD><A HREF="bookdetails.asp?book_ID=<%=RSlist("ID")%>"> <%=RSlist("Title")%></A></TD> บรรทัดนี้จะแสดงชื่อหนังสือและเป็น link ที่เชื่อมโยงไปยังรายละเอียดของหนังสือเราทำได้โดยสร้างquery string ดังนี้ <A HREF="bookdetails.asp?book_ID=value_of_book_ID">link text</A> ASP with Access
แฟ้ม bookdetails.asp <% Query="SELECT * FROM books WHERE ID=" & Request("book_ID") Set DataConn = Server.CreateObject("ADODB.Connection") DataConn.Open "books" Set RSlist = Server.CreateObject("ADODB.recordset") RSlist.Open Query,DataConn,3 %> <HTML> <H3><%=RSlist("title")%></H3><P> Author surname: <B><%=RSlist("surname")%></B><BR> Year: <B><%=RSlist("Year")%></B><BR> Size: <B><%=RSlist("Size")%></B><BR> Price: <B><%=RSlist("Price")%></B> ASP with Access
Modifying Database Records เราสามารถแก้ไขฐานข้อมูลโดยใช้โปรแกรม ASP การเพิ่ม การลบ การแก้ไขระเบียน ASP with Access
Adding Records to a Database: addcds.html <FORM METHOD="GET" ACTION="addcds.asp"> <H3>Add CD to Database</H3> <B>Artist</B><BR> <INPUT TYPE="TEXT" NAME="artist" MAXLENGTH="50"><P> <B>Title</B><BR> <INPUT TYPE="TEXT" NAME="title" MAXLENGTH="50"><P> <B>Format</B><BR> <INPUT TYPE="RADIO" NAME="format" VALUE="CDA" CHECKED> Album<BR> ASP with Access
<INPUT TYPE="RADIO" NAME="format" VALUE="CDS"> Single<P> <INPUT TYPE="SUBMIT" VALUE="Add to database"><P> <INPUT TYPE="RESET" VALUE="Clear"> </FORM> </BODY> </HMTL> ASP with Access
แฟ้ม addcds.asp <% artist=Request("artist") title=Request("title") format=Request("format") Query = "INSERT INTO CDs (artist,title,format) VALUES (" Query = Query & "'" & artist & "','" & title & "','" & format & "')" Set DataConn = Server.CreateObject("ADODB.Connection") DataConn.Open "records" Set RSlist = Server.CreateObject("ADODB.recordset") RSlist.Open Query,DataConn,3 %> ASP with Access
<H3>CD Added To Collection Database</H3> <HR> <HTML> <BODY> <H3>CD Added To Collection Database</H3> <HR> <SMALL><%=Query%></SMALL> </BODY> </HTML> เราใช้คำสั่ง INSERT ที่มีรูปแบบดังนี้ INSERT INTO records (artist,title,format) VALUES ('value_of_artist','Value_of_title','Value_of_format') ASP with Access
Handling Errors เราสามารถตรวจสอบข้อผิดพลาดโดยการเปลี่ยนแปลงคำสั่งในแฟ้ม erroradd.asp <% On Error Resume Next this_page="erroradd.asp" artist=Request("artist") title=Request("title") format=Request("format") Query = "INSERT INTO CDs (artist,title,format) VALUES (" Query = Query & "'" & artist & "','" & title & "','" & format & "')" ASP with Access
Set DataConn = Server.CreateObject("ADODB.Connection") DataConn.Open "records" Set RSlist = Server.CreateObject("ADODB.recordset") RSlist.Open Query,DataConn,3 If Err <> 0 Then %> <HTML> <BODY> <H3>An Error Occured</H3> Make a note of the following information and report it to Dave Smith x3343<P>SQL query:<BR> ASP with Access
<B><%=Query%></B><P> Occured on page:<BR> <B><%=this_page%></B><P> Error Message:<BR> <B><%=Err.Description%></B> </BODY> </HTML> <% Else %> <HTML> <BODY> <H3>CD Added To Collection Database</H3> <%End If%> ASP with Access
Validating Data checkadd.asp แก้ไขจาก addcds.asp <% artist=Request("artist") title=Request("title") format=Request("format") If artist="" or title="" Then %> <HTML> <BODY> <H3>Error - You must complete all the boxes</H3> </BODY> </HTML> <%Else Execute update query and display message <%End If%> ASP with Access
Using Client side scripting ASP สามารถส่ง client-side scripting เช่นเดียวกับ JavaScript ซึ่งจะมีประโยชน์เมื่อใช้สำหรับตรวจสอบ Text box ที่ใช้กรอกข้อความว่ามีการป้อนข้อความหรือไม่ เนื่องจากมันสามารถทำงานบน client ได้ทำให้ประหยัดเวลาในการทำงาน ASP with Access
Checking the Query String for Single Quotes จากแฟ้ม erroradd.html ถ้าเราป้อนข้อมูลฟิลด์ artist เป็น O'Conner,Sinead จะเกิดข้อผิดพลาดดังนี้ [Microsoft][ODBC Microsoft Access 97 Driver] Syntax error (missing operator) in query expression ''o'conner'. ข้อผิดพลาดเกิดมาจากคำสั่ง SQL มีแบบดังนี้ INSERT INTO CDs (artist,title,format) VALUES ( 'o'conner,sinead','Greatest Hits','CDA') ASP with Access
quote.asp <% FUNCTION CheckString (s) pos = InStr(s, "'") Do While pos > 0 s = Mid(s, 1, pos) & "'" & Mid(s, pos + 1) pos = InStr(pos + 2, s, "'") Loop CheckString=s END FUNCTION artist=Request("artist") title=Request("title") format=Request("format") Query = "INSERT INTO CDs (artist,title,format) VALUES (" Query = Query & "'" & CheckString(artist) & "','" & CheckString(title) & "','" & format & "')" … Execute Query ASP with Access
Deleting Records <% Query="SELECT ID,Title,Artist from CDs ORDER BY Artist" Set DataConn = Server.CreateObject("ADODB.Connection") DataConn.Open "records" Set RSlist = Server.CreateObject("ADODB.recordset") RSlist.Open Query,DataConn,3 %> <HTML> <BODY> <FORM ACTION="deleteme.asp" METHOD="GET"> <INPUT TYPE="SUBMIT" VALUE="Delete Selected CD"><P> <TABLE BORDER=1> <TR><TD><B>Title</B></TD><TD><B>Artist</B></TD><TD>Delete</TD></TR> ASP with Access
<TD><%=RSlist("Title")%></TD> Do While Not RSlist.EOF %> <TR> <TD><%=RSlist("Title")%></TD> <TD><%=RSlist("Artist")%></TD> <TD> <INPUT TYPE=RADIO NAME="record_ID" VALUE="<%=RSlist("ID")%>"> </TD> </TR> RSlist.Movenext Loop </TABLE> </FORM> </BODY> </HTML> ASP with Access
โปรแกรม deleteme.asp <% Query="DELETE from CDs WHERE ID=" & Request("record_ID") Set DataConn = Server.CreateObject("ADODB.Connection") DataConn.Open "records" Set RSlist = Server.CreateObject("ADODB.recordset") RSlist.Open Query,DataConn,3 %> <HTML> <BODY> <H3>CD Deleted from Database</H3> <A HREF="deletecd.asp">Return to list</A> </BODY> </HTML> ASP with Access
Modifying Records - UPDATE :listmod.asp <% Query="SELECT * from CDs ORDER BY Artist" Set DataConn = Server.CreateObject("ADODB.Connection") DataConn.Open "records" Set RSlist = Server.CreateObject("ADODB.recordset") RSlist.Open Query,DataConn,3 %> <HTML> <BODY> Click on the CD you wish to modify <TABLE BORDER=1> <TR><TD><B>Title</B></TD><TD><B>Artist</B></TD></TR> Do While Not RSlist.EOF <TR> <TD> <A HREF="changeme.asp?ID=<%=RSlist("ID")%>"><%=RSlist("Title")%></A> </TD> <TD><%=RSlist("Artist")%></TD> </TR> RSlist.Movenext Loop </TABLE> </BODY> </HTML> โปร ASP with Access
<TD><%=RSlist("Artist")%></TD> </TR> Do While Not RSlist.EOF %> <TR> <TD> <A HREF="changeme.asp?ID=<%=RSlist("ID")%>"><%=RSlist("Title")%></A> </TD> <TD><%=RSlist("Artist")%></TD> </TR> RSlist.Movenext Loop </TABLE> </BODY> </HTML> ASP with Access
changeme.asp <% ID=Request("ID") Query="SELECT * from CDs WHERE ID=" & ID Set DataConn = Server.CreateObject("ADODB.Connection") DataConn.Open "records" Set RSlist = Server.CreateObject("ADODB.recordset") RSlist.Open Query,DataConn,3 artist=RSlist("artist") title=RSlist("title") %> ASP with Access
<FORM METHOD="GET" ACTION="update.asp"> <HTML> <BODY> <FORM METHOD="GET" ACTION="update.asp"> <INPUT TYPE="TEXT" NAME="title" VALUE="<%=title%>"><P> <INPUT TYPE="TEXT" NAME="artist" VALUE="<%=artist%>"><P> <INPUT TYPE="SUBMIT" VALUE="Update Database"><P> <INPUT TYPE="HIDDEN"NAME="ID" VALUE="<%=ID%>"> <A HREF="listmod.asp">Return to list</A> </FORM> </BODY> </HTML> ASP with Access
โปรแกรม update.asp <% title=Request("title") artist=Request("artist") ID=Request("ID") Query="UPDATE CDs SET title='" & title & "',artist='" & artist & "'" Query=Query & " WHERE ID=" & ID Set DataConn = Server.CreateObject("ADODB.Connection") DataConn.Open "records" Set RSlist = Server.CreateObject("ADODB.recordset") RSlist.Open Query,DataConn,3 %> ASP with Access
<H3>Record changed</H3> <HTML> <BODY> <H3>Record changed</H3> <P><A HREF="changeme.asp?ID=<%=ID%>">Check changes</A> <HR> <SMALL><%=Query%></SMALL> </BODY> </HTML> ASP with Access