สร้าง DMS ด้วย MS Access (ตัวอย่าง)

สร้าง DMS ด้วย MS Access แบบง่าย ๆ ไม่ต้องคิดอะไรมาก ขออธิบายก่อน DataRevol ทำงานเกี่ยวข้องกับเอกสารเป็นจำนวนมาก สมัยก่อนเก็บเอกสารกันเป็นกระดาษ กว่าจะหาเจอก็ต้องเปิดแฟ้มกันหาลำบาก ยิ่งถ้าไม่มีระบบจัดเก็บที่เป็นระเบียบกว่าจะหาเอกสารที่เกี่ยวข้องแต่ละเรื่องมันช่างเหนื่อยใจ

โจทย์

ขอยกตัวอย่างสักงานหนึ่งก็แล้วกัน 

เป็นเอกสารเกี่ยวกับคอนโดซึ่งเป็นเอกสารจำนวนประมาณ 15,xxx ชุด ใช้คำว่า “ชุด” คือ ในแต่ละชุดมีมากกว่า 1 หน้า หรือ 1 เรื่อง อย่างน้อย ก็ต้องมี 2 เรื่องต่อชุดเป็นอย่างน้อย อาจจะมีเรื่องอื่นแทรกเข้ามาอีกก็ได้ และเอกสารเดิมจะมีการปรับปรุงในช่วงระยะความเหมาะสม หมายความว่า เอกสารสำหรับคอนโด 1 อาคาร จะมีเอกสารเกี่ยวข้องหลายชุด

เมื่อเห็นแบบนี้ ก็เลยคิดว่า จะเอาเรื่องนี้มาเป็นโจทย์สำหรับการทำ DMS ขึ้นมา

DMS ก็คือ Document Management System หรือระบบจัดการเอกสาร นั่นเอง เรา ๆ ท่าน ๆ ที่ทำงานกับเอกสารอยู่ทุกวัน อาจจะเจอปัญหาว่าการค้นหาเอกสารแต่ละทีรู้สึกว่ายากเย็น ไม่รู้จะไปตามเอกสารที่ไหน แต่ถ้าเราสามารถทำฐานข้อมูลของเอกสารเก็บไว้แล้วเรียกขึ้นมาดูได้ง่าย ๆ ก็คงจะดีไม่น้อย

กำหนดเป้าหมาย

อย่างแรก ก็คือการกำหนดเป้าหมายว่า อยากได้อะไรจากสิ่งที่จะทำ

สิ่งที่คิดไว้ก็คือ ถ้าเราพิมพ์ชื่อคอนโด (เช่น พิมพ์ว่า ไอดีโอ) ให้ขึ้นข้อมูลของคอนโดนั้นมาให้ดู โดยจะเลือกได้ว่า จะเลือกชุดเอกสารรอบปีไหนขึ้นมาดู

สำรวจข้อมูลที่มีในมือ

สิ่งที่มีคือ กระดาษ! ซึ่งต้องสแกนเก็บไว้ในรูปแบบ PDF เพื่อจะได้เรียกดูได้ง่ายขึ้น ไม่ต้องเปิดแฟ้มกระดาษหาเอกสาร 

ก็เลยต้องสแกนให้เป็น pdf ก่อน แต่ก็มีสิ่งที่ต้องคิดก่อนที่จะดำเนินการ นั่นคือ เรามีเอกสารกี่ประเภท และจะสร้างรูปแบบการตั้งชื่อไฟล์อย่างไร ให้บ่งบอกสิ่งที่อยู่ภายในได้ชัดเจน

แบ่งประเภทของเอกสาร เป็นแบบนี้

  • ข้อมูลทั่วไป
  • ข้อมูลประกาศ / คำสั่งทางกฎหมาย
  • เอกสารที่เกี่ยวข้องคอนโด

สิ่งที่สำคัญสำหรับเอกสารเหล่านี้ ก็คือ วัน เดือน ปี ที่จัดทำ กับอีกปัญหาคือ การจัดหมวดหมู่ จะจัดเก็บอย่างไรดี สิ่งที่ต้องการ คือ เราอยากได้ฐานข้อมูลเพื่อเก็บไว้ว่ามีไฟล์อะไรบ้าง เป็นของจังหวัด อำเภอ และเป็นเอกสารปี พ.ศ. อะไร

เราจะเก็บเป็น ปีพ.ศ. > จังหวัด > อำเภอ

หรือว่าจะเก็บเป็น จังหวัด > อำเภอ > พ.ศ. 

โดยจะมีข้อมูลที่สแกนเก็บเป็นไฟล์ pdf จำนวน 15,xxx ไฟล์ ซึ่งเก็บไว้โดยแยกไดเร็กทอรีตาม อำเภอ จังหวัด ในขั้นต้นได้จัดรูปแบบชื่อไฟล์ ด้วยการตั้งชื่อไฟล์ต่อด้วยปีพ.ศ.ของเอกสาร

ก่อนอื่นต้องมาทำความเข้าใจกันก่อนว่า มีการจัดการเรื่องพื้นฐานกันตามสมควร เช่น การตั้งชื่อไฟล์ จะตั้งแต่ไม่เว้นวรรคใดใดทั้งสิ้น อันนี้ใครเคยทำงานเรื่องเกี่ยวกับการค้นหาคงเข้าใจว่าบางทีแค่วรรคไม่เหมือนกัน จะมองว่าเป็นคนละชื่อทันที อย่างเช่น “The Best” กับ “TheBest” หรือ “The  Best” ในสายตาเรามองออกว่าเป็นชื่อเดียวกัน แต่เมื่อได้เข้าสู่การระบบของคอมพิวเตอร์มันจะมองว่าเป็นคนละชื่อ

ทางแก้ > สร้าง ID ขึ้นมาแทน

Table

เดิมที ทำฐานข้อมูลนี้ใน Excel แต่พบว่า เมื่อเพิ่มข้อมูลในปริมาณมากทำให้เกิดความหน่วง ยิ่งเมื่อนำไปใช้เชื่อมโยงกันระหว่าง sheet จะรู้สึกถึงความหน่วงได้ทันที ก็เลยย้ายมาเก็บใน Access แทน เพราะระบบการเชื่อมโยงระหว่างตาราง กรณีมีข้อมูลมีจำนวนมากทำได้เร็วและสะดวกกว่า และเตรียมพร้อมเผื่อจะขยับขยายไปยัง database อื่น ๆ

สร้าง DMS ด้วย MS Access

(อันนี้คือการทำเพื่อทดสอบแนวคิดเฉย ๆ)

เริ่มต้นด้วยการสร้าง table หรือ ตาราง ขึ้นมา 1 ตาราง ตั้งชื่อว่า “Data” ซึ่งจะเป็นตารางเก็บข้อมูลทุกอย่าง คือ ตำแหน่งที่ตั้งไฟล์ ตั้ง type เป็น Text ไม่ต้องเป็น hyperlink เพราะเดี๋ยวจะคลิกจากการค้นหาใน Form ที่สามารถคลิกได้ จังหวัด อำเภอ ชื่อเอกสาร และ ปีพ.ศ. และในที่นี้ได้สร้างฟิลด์ ID เพื่อใช้เป็นคีย์หลักของแต่ละระเบียนด้วย

Form

แนวคิดในการสร้างฐานชุดนี้คือ สร้าง Form เพื่อค้นหาเอกสารที่ต้องการ โดย Form นี้จะรับข้อมูลที่ใส่ เพื่อส่งไปเป็น Criteria ใน Query เพื่อส่งข้อมูล มาแสดงผลใน Form อีกที ตั้งชื่อ form นี้ว่า “Search” โดยมีการสร้าง box ขึ้นมาดังนี้ 

1 สร้าง Text Box สำหรับรับข้อมูลที่จะพิมพ์เข้าไป เวลาลากเข้ามาจะเป็นมี label ติดมาด้วย ตรง label จะใส่หรือไม่ใส่ก็ได้ แต่ในที่นี้จะเขียนกำกับไว้ยาวเหยียดว่า “ค้นหาชื่อเอกสาร ไม่ต้องเว้นวรรค ใส่เพียงแค่บางคำก็ได้ พิมพ์เสร็จแล้วกด Enter” อันนี้เป็นคำแนะนำ เผื่อให้คนอื่นใช้งานด้วยจะได้รู้ว่าต้องทำอย่างไร จะตั้งชื่อ Text Box นี้เพื่ออ้างอิงภายหลังว่า SData (จะตั้งชื่ออะไรก็ได้ แต่ควรสั้น ๆ จำง่าย)

2 สร้าง 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 ก็คือ * เราใส่ทั้งหน้าและหลังเพื่อให้แสดงผลคำที่ใช้ค้นหาจากตำแหน่งไหนก็ได้

สร้าง DMS ด้วย MS Access

แสดงค่าที่ได้จาก DataQuery ใน List Box ที่ทำไว้ 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 PList_AfterUpdate()
        QList.Requery
End Sub

คำสั่งนี้คือให้ Query (ที่ QList) ใหม่อีกรอบ เมื่อรับข้อมูลจากช่อง SData เข้าไปใหม่ เพียงเท่านี้เราก็สร้าง List สำหรับเรียกดูข้อมูลต่าง ๆ ได้แล้ว

สร้าง 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 Sdata_AfterUpdate()
        QList.Requery
End Sub

เพียงเท่านี้ก็ได้แล้ว

แต่พอมาลองทำ อ้าว ไม่ได้! มีอะไรผิดพลาด???

ตอนที่เราทำ List Box ครั้งแรก เราเลือกให้แสดง Province ด้วย ซึ่งกลายเป็นการขัดกัน กับการ Query เลือกจังหวัด ดังนั้นเราจะต้องย้อนไปแก้ QList ให้เอา การแสดงผลตรง Province ออก 

เพียงเท่านี้ก็ได้แล้ว สร้าง DMS ด้วย MS Access

ขั้นตอนสุดท้าย นั่นคือ เราอยากให้คลิกเลือกแล้วเปิดเอกสารขึ้นมาดูเลย ซึ่งเราได้ทำตำแหน่งที่เก็บไฟล์ไว้ที่ 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 เข้าใจตรงกันเน้อ

เสร็จเรียบร้อยอย่างที่ตั้งใจ

Scroll to Top