การเพิ่มข้อมูล access แบบ ADO + SQL
เว็บเพจสำรอง (Backup Webpages) : http://www.thaiall.com/asp/aspmem.htm | http://www.thaiabc.com/asp/aspmem.htm
ปรับปรุง : 2548-02-08 ()
[ การเพิ่มข้อมูล access แบบ ADO + SQL ]

  1. ข้อควรทราบ
  2. การเพิ่มข้อมูล เข้า Ms access 97 ด้วยวิธี ADO
  3. การเพิ่มข้อมูล เข้า Ms access 97 ด้วยวิธี SQL
  4. การอ่านข้อมูลจากแฟ้ม /cgi-bin/member01.mdb มาแสดง
  5. ทดลองลบระเบียนในแฟ้ม (แต่ไม่ได้ลบแฟ้มนะครับ)
  6. แบบฝึกหัด
ข้อควรทราบ
  1. บทเรียนนี้ผมใช้เวลามาก ประมาณ 12 ชั่วโมงทีเดียว เพราะไม่รู้ว่า www.webhostme.com ที่ผมใช้บริการอยู่ ต้องใช้ directory /cgi-bin สำหรับเก็บ mdb ให้อ่าน และปรับปรุงแก้ไขได้ ถ้าจะเก็บใน directory อื่นก็ได้ จะไม่สามารถปรับปรุงได้ อ่านได้อย่างเดียว อีกปัญหาที่ผมเจอคือ การใช้ sql เพื่อเพิ่มระเบียน จะใช้คำสงวนไม่ได้ ผมพลาดจุดนี้ ประมาณ 2 ชั่วโมง โดยใช้คำว่า desc เป็นชื่อเขตข้อมูล แต่ sql มองว่า desc คือคำสงวน สำหรับกำหนดการจัดเรียงแบบมากไปน้อย แต่ถ้าใช้ชื่อเขตข้อมูลเป็น desc จะงานได้ในการปรับปรุงแบบ ADO
  2. ในบทเรียนนี้จะเน้นการเขียน asp เพื่อเพิ่มข้อมูล ซึ่งผมหา source การเพิ่มข้อมูลมาได้ 2 วิธี คือ การใช้หลักการของ ADO และ หลักการของ SQL ใครชอบหรือถนัดแบบใด หรือคิดว่า เหมาะกับงานแบบใดก็เลือกใช้ดูนะครับ
  3. บทเรียนนี้ จะแสดงการเพิ่มข้อมูลเข้าทีละระเบียน 2 แบบ การอ่านข้อมูลมาแสดงด้วย [aspmeml.asp] เพื่อตรวจสอบว่า ผลการปรับปรุงข้อมูลใช้ได้ไหม การลบข้อมูลทั้งแฟ้ม แต่ไม่ลบแฟ้ม สรุปได้ว่ามี 3 หลักการ คือ เพิ่มทีละระเบียน แสดงทุกระเบียน และลบทุกระเบียน แต่ไม่ลบแฟ้ม
  4. ADO เป็นวิธีการเอื้ออำนวย การปรับปรุงข้อมูลที่ง่าย และยอมให้ควบคุมการทำซ้ำ อย่างมีประสิทธิภาพ แต่ SQL จะเป็นการสั่งปรับปรุงข้อมูลได้ในขั้นตอนเดียว แบบบรรทัดเดียวสิ้นเรื่องสิ้นราว ไปเลย
  5. บทเรียนนี้ใช้แฟ้มชื่อ member01.mdb ซึ่งจัดเก็บใน /cgi-bin และในแฟ้ม member01.mdb มี table ชื่อ member และตารางนี้มีเขตข้อมูล ชื่อ id name email webname address describ ทั้งหมด 6 เขตข้อมูล แต่จะสังเกตุได้ว่า ผมไม่ได้กล่าวถึง id เพราะยังไม่ได้ใช้ แต่ข้อมูลในเขตข้อมูลนี้เป็นแบบ auto number ซึ่งเพิ่มให้อัตโนมัติ เมื่อเพิ่มระเบียนใหม่
  6. ท่านสามารถทดสอบ การเพิ่มข้อมูลได้ เมื่อสั่งลบ ก็จะลบข้อมูลทุกระเบียนให้อัตโนมัติ เวลาทดลองเพิ่มข้อมูลแล้ว ช่วยทดลองลบให้ผมด้วย โดยโปรแกรมสั่งลบเก็บในชื่อ aspmemd.asp หรือสั่ง run จากฟอร์ม aspmemd.htm ข้อมูลจะได้ไม่ค้างในแฟ้ม
  7. ในบทต่อไป เขียนถึงการใช้ประโยชน์จาก id ซึ่งจะนำไปใช้งานได้จริง แต่บทนี้เรียนรู้ เป็นความรู้พื้นฐานไปก่อนนะครับ หรือท่านใดใจร้อน ก็ศึกษาไปก่อนผมเลยก็ได้ครับ เพราะ ไม่มีอะไรยาก ทุกอย่างอยู่ที่เวลา และความตั้งใจ
  8. สารภาพว่าถึงตอนนี้ ผมยังไม่ทะลุปุโปร่ง เรื่อง ADO กับ SQL ที่พยายามใช้งานให้ได้ถึงตรงนี้ก็เหนื่อยแล้ว บทเรียนต่อไปคงมีคำอธิบายเกี่ยวกับ ADO และ SQL ได้เพิ่มมากขึ้น
  9. บทเรียนนี้ แนะนำการเขียนเว็บที่ใช้ asp ควบคุม และใช้งานได้แน่นอนที่ www.webhostme.com ใครทำไม่ได้ mail มาถามได้นะครับ แต่อย่าถามอะไรที่ลึก เพราะผมเป็นมือสมัครเล่น แต่ถ้าตอบได้ก็จะตอบไปครับ (ปกติผมตอบ mail ทุกฉบับ ถ้า mail server ผมไม่ล้มอีกตามเคย)

สรุปแฟ้มที่ใช้ในบทเรียนนี้ ในกรณีที่ท่านงง และไม่แน่ใจ กับหน้าที่ของแต่ละแฟ้ม
  1. /cgi-bin/member01.mdb (แฟ้มข้อมูลหลัก ซึ่งเป็นแฟ้มเดียวที่เก็บข้อมูลในบทนี้) แฟ้มนี้เมื่อท่านส่งเข้าไปใน เว็บท่าน.webhostme.com แล้วก็เป็นอันเรียบร้อย แต่ก่อนส่งเข้าไป ท่านต้องใช้ MS Access 97 สร้างแฟ้ม member01.mdb ขึ้นมา โดยสร้าง table พร้อมกำหนด เขตข้อมูลให้เรียบร้อยก่อน ต้องเข้าใจเรื่อง MS Access 97 พอสมควร จึงจะทำความเข้าใจบทเรียนนี้ได้ อย่างไม่ยากนัก และไม่ต้องตกใจที่ member01.mdb ที่สร้างขึ้นมา ยังไม่มีข้อมูลอะไร ก็มีขนาดแฟ้มตั้ง 70000 ขึ้นไปแล้ว เป็นเรื่องปกติของ Microsoft ที่ header ของแฟ้มจะต้องมีขนาดใหญ่อย่างนี้ หละครับ
  2. /aspmema1.htm (สั่งเพิ่มระเบียนแบบ ADO) เป็น หน้าเว็บที่ทำหน้าที่รับค่าจากแฟ้มพิมพ์ แล้วจึงส่งค่าไปให้ /aspmema1.asp เพื่อจัดเก็บเป็นระเบียนใหม่ในแฟ้ม /cgi-bin/member01.mdb
  3. /aspmema2.htm (สั่งเพิ่มระเบียนแบบ SQL) เป็น หน้าเว็บที่ทำหน้าที่รับค่าจากแฟ้มพิมพ์ แล้วจึงส่งค่าไปให้ /aspmema1.asp เพื่อจัดเก็บเป็นระเบียนใหม่ในแฟ้ม /cgi-bin/member01.mdb
  4. /aspmeml.htm (อ่านข้อมูลมาแสดง) เป็น หน้าเว็บที่ทำหน้าที่สั่งประมวลผลแฟ้ม aspmeml.asp ซึ่งจริง ๆ แล้วเรียกตรง ๆ ก็ได้ เพราะไม่ได้รับค่าอะไรมา เช่น Click here เพื่อสั่งแสดงข้อมูลจาก /cgi-bin/member01.mdb
  5. /aspmemd.htm (ลบข้อมูลทุกระเบียน) เป็น หน้าเว็บที่ทำหน้าที่สั่งประมวลผลแฟ้ม aspmemd.asp ซึ่งจริง ๆ แล้วเรียกตรง ๆ ก็ได้ เพราะไม่ได้รับค่าอะไรมา เช่น Click here เพื่อสั่งลบข้อมูลทุกระเบียนในแฟ้ม /cgi-bin/member01.mdb

การเขียนตาราง ASCII แบบที่ 1 ด้วยวิธี ADO
หัวข้อนี้จะใช้แฟ้มที่เกี่ยวข้อง 3 แฟ้มคือ
/cgi-bin/member01.mdb และ /aspmema1.htm และ /aspmema1.asp
1. /aspmema1.htm เป็นฟอร์มสำหรับรับค่า แล้วส่งค่าให้ /aspmema1.asp
2. /aspmema1.asp จะทำหน้าที่เพิ่มระเบียนใหม่เข้าแฟ้ม /cgi-bin/member01.mdb ครั้งละ 1 ระเบียน
3. หลักการที่ใช้เพิ่มระเบียนคือ ADO
และแฟ้มทั้งหมดที่ทดสอบ ผมเก็บที่ thaiall.webhostme.com แต่คำอธิบายบทเรียนเก็บที่ www.thaiall.com/asp/
ตัวอย่างฟอร์ม /aspmema1.htm ส่งค่า
Add new member 1(aspmema1.asp) ado
ชื่อสมาชิก :
E-Mail :
ชื่อเว็บ :
Webpage :
คำอธิบายเว็บ :


Click เรียกเฉพาะ form นี้ในหน้าต่างใหม่
Source code ของฟอร์ม /aspmema1.htm
<body><font face="microsoft sans serif">
Add new member 1(aspmema1.asp) ado<br>
<form action=http://thaiall.webhostme.com/aspmema1.asp method=post>
ชื่อสมาชิก : <input type="text" name=name size=40><br>
E-Mail : <input type="text" name=email size=40><br>
ชื่อเว็บ : <input type="text" name=webname size=40><br>
Webpage : <input type="text" name=address size=40 value="http://"><br>
คำอธิบายเว็บ : <br><textarea rows=3 cols=40 name=describ></textarea><br>
<input type=submit value="Add member"><input type=reset value=Reset>
</form>
</body>

Click เรียกเฉพาะ form นี้ในหน้าต่างใหม่
Source code ของโปรแกรมเพิ่มระเบียน /aspmema1.asp
<%
thaialldbaccess97="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("/cgi-bin/member01.mdb")
set conn=server.createobject("ADODB.Connection")
conn.open thaialldbaccess97
set rec = server.createobject("ADODB.Recordset")
sql = "select * from member"
rec.open sql, conn , 2, 2
rec.addnew
rec("name")=request.form("name")
rec("email")=request.form("email")
rec("webname")=request.form("webname")
rec("address")=request.form("address")
rec("describ")=request.form("describ")
rec.update
rec.close
conn.close
set conn = nothing
set rec = nothing
%>
<body>
Add ok
</body>

ดูเฉพาะ Source code เท่านั้น
สรุปแฟ้มที่ใช้ในบทเรียนนี้ ในกรณีที่ท่านงง และไม่แน่ใจ กับหน้าที่ของแต่ละแฟ้ม
การเขียนตาราง ASCII แบบที่ 2 ด้วยวิธี SQL
หัวข้อนี้จะใช้แฟ้มที่เกี่ยวข้อง 3 แฟ้มคือ
/cgi-bin/member01.mdb และ /aspmema2.htm และ /aspmema2.asp
1. /aspmema2.htm เป็นฟอร์มสำหรับรับค่า แล้วส่งค่าให้ /aspmema2.asp
2. /aspmema2.asp จะทำหน้าที่เพิ่มระเบียนใหม่เข้าแฟ้ม /cgi-bin/member02.mdb ครั้งละ 1 ระเบียน
3. หลักการที่ใช้เพิ่มระเบียนคือ SQL
และแฟ้มทั้งหมดที่ทดสอบ ผมเก็บที่ thaiall.webhostme.com แต่คำอธิบายบทเรียนเก็บที่ www.thaiall.com/asp/
ตัวอย่างฟอร์ม /aspmema2.htm ส่งค่า
Add new member 2 (aspmema2.asp) sql
ชื่อสมาชิก :
E-Mail :
ชื่อเว็บ :
Webpage :
คำอธิบายเว็บ :


Click เรียกเฉพาะ form นี้ในหน้าต่างใหม่
Source code ของฟอร์ม /aspmema2.htm
<body><font face="microsoft sans serif">
Add new member 2 (aspmema2.asp) sql<br>
<form action=http://thaiall.webhostme.com/aspmema2.asp method=post>
ชื่อสมาชิก : <input type="text" name=name size=40><br>
E-Mail : <input type="text" name=email size=40><br>
ชื่อเว็บ : <input type="text" name=webname size=40><br>
Webpage : <input type="text" name=address size=40 value="http://"><br>
คำอธิบายเว็บ : <br><textarea rows=3 cols=40 name=describ></textarea><br>
<input type=submit value="Add member"><input type=reset value=Reset>
</form>
</body>

Click เรียกเฉพาะ form นี้ในหน้าต่างใหม่
Source code ของโปรแกรมเพิ่มระเบียน /aspmema2.asp
<%
set connNews = server.createobject("ADODB.Connection")
connNews.open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("/cgi-bin/member01.mdb")
sql = "INSERT into member ( name, email, webname, address, describ ) SELECT "
sql = sql & " '" & request.form("name") & "' as name, " 
sql = sql & " '" & request.form("email") & "' as email, " 
sql = sql & " '" & request.form("webname") & "' as webname, " 
sql = sql & " '" & request.form("address") & "' as address, " 
sql = sql & " '" & request.form("describ") & "' as describ; "
set rsArticles = connNews.Execute(sql)
connNews.close
set connNews = nothing
%>
<body>
Add ok
</body>

ดูเฉพาะ Source code เท่านั้น
สรุปแฟ้มที่ใช้ในบทเรียนนี้ ในกรณีที่ท่านงง และไม่แน่ใจ กับหน้าที่ของแต่ละแฟ้ม
การอ่านข้อมูลจากแฟ้ม /cgi-bin/member01.mdb มาแสดง
โปรแกรมนี้มีส่วนของ form เพื่อสั่งประมวลผล asp และถ้าจะสั่งตรง ๆ จาก aspmeml.asp ก็ได้
เพราะโปรแกรมสั่งพิมพ์ ไม่จำเป็นต้องการรับค่าจาก ฟอร์มไปตรวจสอบ แต่อย่างใด
และการได้ข้อมูลมาใช้หลักการของ ADO เป็นหลัก ส่วน SQL เป็นส่วนที่เข้ามาเสริม
ตัวอย่างฟอร์ม /aspmeml.htm ส่งค่า
list all member

Source ของ ฟอร์มข้างบนนี้
<body>
list all member<br>
<form action=http://thaiall.webhostme.com/aspmeml.asp method=post>
<input type=submit value="list member"><input type=reset value=Reset>
</form>
</body>

Click เรียกเฉพาะ form นี้ในหน้าต่างใหม่
Source code ของโปรแกรมแสดงข้อมูล /aspmeml.asp
<%
thaialldbaccess97="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("/cgi-bin/member01.mdb")
Set rec = Server.CreateObject("ADODB.Recordset")
sql = "select * from member"
rec.Open sql, thaialldbaccess97
%>
<html><head><title>print all data</title></head>
<body bgcolor="#ffffff">
<%
if Not rec.eof then rec.MoveFirst
do while Not rec.eof
response.write( rec("name") &" - ")
response.write( rec("email") &"<br>")
response.write( rec("webname") &" - ")
response.write( rec("address") &"<br>")
response.write( rec("describ") &"<hr>")
rec.MoveNext
loop
%>
</body></html>

Click เรียกโปรแกรมพิมพ์ข้อมูลโดยไม่ผ่าน form (อ่านข้อมูลมาแสดง)
สรุปแฟ้มที่ใช้ในบทเรียนนี้ ในกรณีที่ท่านงง และไม่แน่ใจ กับหน้าที่ของแต่ละแฟ้ม
ทดลองลบระเบียนในแฟ้ม
โปรแกรมนี้มีส่วนของ form เพื่อสั่งประมวลผล asp และถ้าจะสั่งตรง ๆ จาก aspmemd.asp ก็ได้
เพราะโปรแกรมสั่งลบข้อมูล โดยไม่จำเป็นต้องการรับค่าจาก ฟอร์มไปตรวจสอบ แต่อย่างใด
และการลบข้อมูลใช้หลักการของ SQL เป็นหลัก ส่วน ADO เป็นส่วนที่เข้ามาเสริม
ตัวอย่างฟอร์ม /aspmemd.htm ส่งค่า
Delete all member

Source ของ ฟอร์มข้างบนนี้
<body>
Delete all member<br>
<form action=http://thaiall.webhostme.com/aspmemd.asp method=post>
<input type=submit value="Delete member"><input type=reset value=Reset>
</form>
</body>

Click เรียกเฉพาะ form นี้ในหน้าต่างใหม่
Source code ของโปรแกรมแสดงข้อมูล /aspmemd.asp
<%
thaialldbaccess97="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("/cgi-bin/member01.mdb")
set conn=server.createobject("ADODB.Connection")
conn.open thaialldbaccess97
strSQL = "delete from member"
conn.execute (strSQL)
conn.close
set conn = nothing
%>
<body>
delete ok
</body>

Click เรียกโปรแกรมพิมพ์ข้อมูลโดยไม่ผ่าน form (สั่งลบข้อมูล)
สรุปแฟ้มที่ใช้ในบทเรียนนี้ ในกรณีที่ท่านงง และไม่แน่ใจ กับหน้าที่ของแต่ละแฟ้ม
แบบฝึกหัด
    ให้ทำตามโจทย์ต่อไปนี้
  1. ทำแบบที่บทเรียนนี้ทำทุกอย่างเลยครับ
  2. เปลี่ยนชื่อตาราง และชื่อเขียนข้อมูล และทดลองใช้งาน
  3. ให้ท่านศึกษา SQL เพิ่ม และสั่งพิมพ์เฉพาะระเบียนที่ต้องการ
  4. ให้ท่านศึกษา SQL เพิ่ม และสั่งลบระเบียนที่ต้องการ

แนะนำเว็บใหม่ : ผลการจัดอันดับ
รักลำปาง : korattown.com : topsiam.com : มหาวิทยาลัยโยนก
ศูนย์สอบ : รวมบทความ : ไอทีในชีวิตประจำวัน : ดาวน์โหลด : yourname@thaiall.com
ติดต่อ ทีมงาน ชาวลำปาง มีฝันเพื่อการศึกษา Tel.08-1992-7223