สร้าง DMS ด้วย Access โดยมีจุดประสงค์เพื่อใช้ค้นหาและเลือกเอกสารขึ้นมาดู แบบง่าย ๆ โดยจะใช้ Form Query มาช่วยในการจัดทำฐานข้อมูล
DMS ก็คือ Document Management System หรือระบบจัดการเอกสาร นั่นเอง เรา ๆ ท่าน ๆ ที่ทำงานกับเอกสารอยู่ทุกวัน บางทีจะค้นหาเอกสารก็รู้สึกว่ายากเย็น ไม่รู้จะไปตามเอกสารที่ไหน แต่ถ้าเราสามารถทำฐานข้อมูลของเอกสารเก็บไว้ แล้วเรียกขึ้นมาดูได้ง่าย ๆ ก็คงจะดีไม่น้อย
ในตัวอย่างนี้ ได้จัดการสแกนเอกสารเก็บไว้ในรูปแบบ PDF เพื่อจะได้เรียกดูได้ง่ายขึ้น ไม่ต้องเปิดแฟ้มกระดาษหาเอกสาร โดยจะมีข้อมูลที่สแกนเก็บเป็นไฟล์ pdf จำนวน 15,xxx ไฟล์ ซึ่งเก็บไว้โดยแยก Folder ตาม อำเภอ จังหวัด ในขั้นต้นได้จัดรูปแบบชื่อไฟล์ ด้วยการตั้งชื่อไฟล์ต่อด้วยปีพ.ศ.ของเอกสาร
สิ่งที่ต้องการ คือ เราอยากได้ฐานข้อมูลเพื่อเก็บไว้ว่ามีไฟล์อะไรบ้าง เป็นของจังหวัด อำเภอ และเป็นเอกสารปี พ.ศ. อะไร และเมื่อคลิกก็จะเรียกไฟล์นั้นขึ้นมาดู นั่นคือเราจะ สร้าง DMS ด้วย Access
เนื้อหาโดยรวม :)
เตรียมข้อมูล สร้าง DMS ด้วย Access
ก่อนอื่นต้องมาทำความเข้าใจกันก่อนว่า มีการจัดการเรื่องพื้นฐานกันตามสมควร เช่น การตั้งชื่อไฟล์ จะตั้งแต่ไม่เว้นวรรคใดใดทั้งสิ้น อันนี้ใครเคยทำงานเรื่องเกี่ยวกับการค้นหาคงเข้าใจว่าบางทีแค่วรรคไม่เหมือนกัน จะมองว่าเป็นคนละชื่อทันที อย่างเช่น “The Best” กับ “TheBest” หรือ “The Best” ในสายตาเรามองออกว่าเป็นชื่อเดียวกัน แต่เมื่อได้เข้าสู่การระบบของคอมพิวเตอร์มันจะมองว่าเป็นคนละชื่อ
Table
เดิมที ทำฐานข้อมูลนี้ใน Excel แต่พบว่า เมื่อเพิ่มข้อมูลในปริมาณมากทำให้เกิดความหน่วง ยิ่งเมื่อนำไปใช้เชื่อมโยงกันระหว่าง sheet จะรู้สึกถึงความหน่วงได้ทันที ก็เลยย้ายมาเก็บใน Access แทน เพราะระบบการเชื่อมโยงระหว่างตาราง กรณีมีข้อมูลมีจำนวนมากทำได้เร็วและสะดวกกว่า
เริ่มต้นด้วยการสร้าง table หรือ ตาราง ขึ้นมา 1 ตาราง ตั้งชื่อว่า “Data” ซึ่งจะเป็นตารางเก็บข้อมูลทุกอย่าง คือ ตำแหน่งที่ตั้งไฟล์ ตั้ง type เป็น Text ไม่ต้องเป็น hyperlink เพราะเดี๋ยวจะคลิกจากการค้นหาใน Form ที่สามารถคลิกได้ จังหวัด อำเภอ ชื่อเอกสาร และ ปีพ.ศ. และในที่นี้ได้สร้างฟิลด์ ID เพื่อใช้เป็นคีย์หลักของแต่ละระเบียนด้วย
Tip: แนะนำให้อ่านเรื่อง Database Design Basic เพิ่มเติม
TIP: สำหรับการนำเข้าข้อมูลที่มีโครงสร้างเดิมซ้ำ ๆ แนะนำให้อ่านเรื่อง การใช้ macro เพื่อ import ข้อมูลเข้า Access
TIP อีกแล้ว: ควรตรวจสอบเรื่องชื่อไฟล์ซ้ำกันก่อนนะจ๊ะ
Form
แนวคิดในการสร้างฐานชุดนี้คือ สร้าง Form เพื่อค้นหาเอกสารที่ต้องการ โดย Form นี้จะรับข้อมูลที่ใส่ เพื่อส่งไปเป็น Criteria ใน Query เพื่อส่งข้อมูล มาแสดงผลใน Form อีกที ตั้งชื่อ form นี้ว่า “Search” โดยมีการสร้าง box ขึ้นมาดังนี้
- สร้าง Text Box สำหรับรับข้อมูลที่จะพิมพ์เข้าไป เวลาลากเข้ามาจะเป็นมี label ติดมาด้วย ตรง label จะใส่หรือไม่ใส่ก็ได้ แต่ในที่นี้จะเขียนกำกับไว้ยาวเหยียดว่า “ค้นหาชื่อเอกสาร ไม่ต้องเว้นวรรค ใส่เพียงแค่บางคำก็ได้ พิมพ์เสร็จแล้วกด Enter” อันนี้เป็นคำแนะนำ เผื่อให้คนอื่นใช้งานด้วยจะได้รู้ว่าต้องทำอย่างไร จะตั้งชื่อ Text Box นี้เพื่ออ้างอิงภายหลังว่า SData (จะตั้งชื่ออะไรก็ได้ แต่ควรสั้น ๆ จำง่าย)
- สร้าง List Box อีกช่อง สำหรับแสดงผลลัพธ์ที่ได้ จะตั้งชื่อ List Box นี้เพื่ออ้างอิงภายหลังว่า QList ตรงนี้อาจจะมี wizard ขึ้นมา ให้กด cancel ไปก่อน อย่าเพิ่งไปทำอะไรกับมัน เดี๋ยวจะมาปรับแต่งกัน
Query
สร้าง Query จาก Table Data เพื่อใช้รับข้อมูลคำค้นหา (Criteria) จาก Form และแสดงผลลัพธ์กลับไปที่ From โดยสร้าง ตั้งชื่อ Query นี้ว่า DataQuery
โดย criteria ที่เราจะใช้ใน Query นี้ จะมาจาก Text Box “SData”ใน form ที่ชื่อ “Search” ว่า จะค้นหาจากชื่ออะไร ดังนั้น ใน Query ก็ต้องสร้าง criteria ไว้ในช่อง Name (หรือชื่อเอกสารที่ต้องการหา) ตามปกติ ถ้าเราใช้การค้นหาจาก Text Box ใน Form จะใช้เพียงแค่ [Forms]![Search]![SData]
แต่ครั้งนี้เราต้องการให้ค้นหาจากคำใดคำหนึ่งก็ได้ ไม่จำเป็นต้องให้ชื่อเป๊ะ อย่างเช่น ศุภาลัยลอฟต์ อาจจะใช้ค้นหา ศุภา ขึ้นมาเฉย ๆ โดยที่เมื่อเลือกแล้ว ตัวอื่นที่มีตัวอักษรแบบเดียวกันจะโดนยกขึ้นมาทั้งชุด เช่น คอนโดศุภาลัย ศุภาสิริ ฯลฯ ออกมาทั้งหมด สาเหตุที่เลือกแบบนี้เป็นการยืดหยุ่นในกรณีจำชื่อเอกสารทั้งหมดไม่ได้ ใช้คำใดคำหนึ่งมาช่วยค้นหา จึงได้เป็นสูตรดังนี้
Like "*" & [Forms]![Search]![SData] & "*"
คือเราใช้ Like เพื่อให้แสดงความ “คล้าย” กับคำที่เราค้นหา โดยใช้ตัว wildcard ก็คือ * เราใส่ทั้งหน้าและหลังเพื่อให้แสดงผลคำที่ใช้ค้นหาจากตำแหน่งไหนก็ได้
แสดงค่าที่ได้จาก DataQuery ใน Form
สำหรับการแสดงผล เราจะแสดงผลใน List Box ที่เราสร้างเตรียมไว้แล้ว คือ QList ให้ดับเบิลคลิกเรียก property sheet ขึ้นมา ใน Tab Data ตรงหัวข้อ Row Source ซึ่งมีแนวทางสองทาง ทางแรก ถ้าคุ้นเคยกับคำสั่ง SQL ก็เขียนเลย ดังนี้
SSELECT DataQuery.Province, DataQuery.Dist, DataQuery.Name, DataQuery.Year, DataQuery.FullPath FROM DataQuery ORDER BY DataQuery.Name, DataQuery.Year;
แต่ถ้าไม่คุ้ยเคยกับการใช้ SQL ก็มีตัวช่วย ให้คลิกที่จุดสามจุดในช่องด้านหลังของหัวข้อนี้ จะเข้าไปสู่หน้า ออกแบบ ซึ่งวิธีใช้งานไม่ต่างจากการใช้ Query ทั่วไป ในที่นี้จะเลือก Province (จังหวัด) Dist (อำเภอ) Name (ชื่อเอกสาร) Year (ปีที่ออกเอกสาร) และ FullPath (ตำแหน่งที่เก็บเอกสาร) โดยจะให้เรียงลำดับที่ Name กับ Year
อีกข้อที่ต้องดูก็คือ Bound Column ให้สัมพันธ์กับคอลัมน์ที่เราเลือกมาแสดง อย่างเช่น เราเลือกให้แสดงผล 5 คอลัมน์ ตรงข้อนี้ก็ต้องเป็น 5 ด้วยเช่นกัน
จากนั้นให้กลับมาที่ Tab format ตรง Column Count ต้องเป็น 5 (ตามคอลัมน์ที่เราเลือกให้แสดง)
Column Width ให้ใส่ความกว้างตามที่ต้องการ โดยใช้ semi colon (;) เป็นตัวคั่น เช่น
2.5 cm; 5cm; 11 cm; 2cm; 10cm
และถ้าอยากให้แสดงหัวคอลัมน์ ก็ให้เปลี่ยนตรงช่อง Column Heads จาก No เป็น Yes
ปิดท้ายด้วยการให้มันอัปเดตเมื่อเรากรอกข้อมูลค้นหาใหม่หลัง enter ข้อมูลที่ Text Box Sdata ด้วย ไม่เช่นนั้นจะรับเฉพาะค่าแรก แก้ไขใหม่ ข้อมูลไม่เปลี่ยน คลิกที่ Sdata แล้ว ไปที่ tab event ใน property sheet เลือก After Update คลิก 3 จุดเพื่อเข้าหน้า VBA ใส่คำสั่ง QList.Requery เข้าไป หน้าตาจะออกมาแบบนี้
Private Sub Sdata_AfterUpdate()
QList.Requery
End Sub
คำสั่งนี้คือให้ Query (ที่ QList) ใหม่อีกรอบ เมื่อรับข้อมูลจากช่อง SData เข้าไปใหม่ เพียงเท่านี้เราก็สร้าง List สำหรับเรียกดูข้อมูลต่าง ๆ ได้แล้ว
ถ้าไม่คิดอะไรมาก การสร้าง DMS ด้วย Access ก็เป็นรูปร่างขึ้นมาพร้อมเอาไปใช้งานได้
สร้าง Combo Box เป็นตัวเลือก
หลังจากลองใช้งานระยะหนึ่ง พบว่า ควรจำกัดการค้นหาตามจังหวัด เพราะบางครั้งข้อมูลขึ้นมามากเกินไป จะเพิ่มการค้นหาด้วยจังหวัด (สร้าง Combo box เพิ่มเพื่อใช้ใน Query อีก 1 ชั้น)
เนื่องจาก “จังหวัด” เป็นตัวเลือกที่มีจำกัด (ถึงมันจะเยอะซักหน่อยก็เถอะ) เลยจะทำเป็น Combo box ตัวเลือก ซึ่งสามารถพิมพ์แล้วมันจะมีตัวเลือกขึ้นมา หรือกดเลือกชื่อจังหวัดจาก list ก็ได้
ขั้นแรก เราสร้างตาราง Province ซึ่งจะมีรายชื่อจังหวัดขึ้นมาก่อน (ใช้การ Query ช่วย – อันนี้ไม่ลงรายละเอียดละกันนะ) และนำไปสร้างเป็น table ตั้งชื่อว่า Province
จากนั้นใน หน้า design ของ Form เลือก insert Combo Box ซึ่งพอนำมันมาวางจะปรากฏหน้าต่าง wizard ขึ้นมาอัตโนมัติ ถ้าหน้าต่าง wizard ไม่ขึ้น ให้ลองดูที่ตัวเลือกว่าได้เลือกใช้ wizard อยู่หรือเปล่า แต่ปรกติค่านี้จะเลือกใช้ wizard เป็นค่าตั้งต้นอยู่แล้ว
เลือก I want the list box to get a values from another table or query หรือถ้าเราไม่สร้างตารางไว้ก่อน และมีข้อมูลตัวเลือกไม่มาก จะเลือก I will type the values that I want ก็ได้ แต่เนื่องจากกรณีนี้ เห็นว่ารายชื่อจังหวัดมันหลายสิบจังหวัด เลยจัดเตรียมไว้ก่อนในรูปตารางเพื่อความสะดวก
เสร็จขบวนการแล้ว ตั้งชื่อว่า PList เพื่อใช้อ้างอิงต่อไป ซึ่งก็คือ การนำค่าที่เลือก (หรือใส่) ในนี้ไปใช้กับ Query ตัวเดิม นั่นคือ DataQuery โดยใส่ Criteria ใน Province ว่า [Forms]![Search]![PList] แบบเดี่ยวกับตอนทำ List Box เลย แต่ครั้งนี้ไม่ใส่ like เพราะชื่อจังหวัดต้องใส่เป๊ะ ๆ และเราก็สร้าง table ชื่อจังหวัดไว้แล้ว ดังนั้นตรงนี้ให้เหมือนเป๊ะไปเลย
และก็เหมือนคราวที่แล้วอีกครั้ง ใน Property Sheet เราต้องกำหนด Event ว่า After Update ให้มัน Query ใหม่ด้วย ไม่เช่นนั้นมันจะไม่อัปเดต list ให้เราเมื่อเปลี่ยนจังหวัด หน้าตาก็จะออกมาประมาณนี้
Private Sub PList_AfterUpdate()
QList.Requery
End Sub
เพียงเท่านี้ก็ได้แล้ว
แต่พอมาลองทำ อ้าว ไม่ได้! มีอะไรผิดพลาด???
ตอนที่เราทำ List Box ครั้งแรก เราเลือกให้แสดง Province ด้วย ซึ่งกลายเป็นการขัดกัน กับการ Query เลือกจังหวัด ดังนั้นเราจะต้องย้อนไปแก้ QList ให้เอา การแสดงผลตรง Province ออก
เพียงเท่านี้ก็ได้แล้ว
ขั้นตอนสุดท้าย นั่นคือ เราอยากให้คลิกเลือกแล้วเปิดเอกสารขึ้นมาดูเลย ซึ่งเราได้ทำตำแหน่งที่เก็บไฟล์ไว้ที่ filed FullPath ใน Data ตั้งแต่แรกแล้ว
เราจะทำปุ่มให้คลิก ไปที่หน้า design แล้วแทรก button เข้าไป มันขึ้น button wizard มาก็ไม่ต้องสนใจ ให้ปิดไปก่อน แล้วไปคลิกที่ Property Sheet เพื่อตั้งชื่อ ในที่นี้จะตั้งชื่อว่า Sesame
แล้วไปที่แท็บ event ตรง on Click ให้คลิกตรงสามจุดด้านหลัง แล้วเลือก Code builder เพื่อใส่ FollowHyperlink QList.Column(4) หน้าตาเต็ม ๆ จะออกมาแบบนี้
Private Sub Sesame_Click()
FollowHyperlink QList.Column(3)
End Sub
อันนี้คือการบอกว่า พอคลิกปุ่มแล้วให้ไปตามลิงก์ใน QList คอลัมน์ที่ 3 (เปลี่ยนคอลัมน์ตามที่ปรากฎว่า fullpath มันอยู่คอลัมน์ใด อย่าลืมว่า ต้องนับคอลัมน์แรกเป็น คอลัมน์ 0 ไม่ใช่ คอลัมน์ 1 ดังนั้น ใน QList นี้ fullpath อยู่คอลัมน์ที่ 4 แต่ถ้านับจาก 0 จะเป็น 3 เข้าใจตรงกันเน้อ
เสร็จเรียบร้อยอย่างที่ตั้งใจ สร้าง DMS ด้วย Access