บทที่5
มาโครมาโคร ใน Access เป็นชุดคำสั่งสำเร็จรูป สำหรับการบริหาร และควบคุมการทำงานของโปรแกรมและ ระบบฐานข้อมูล เช่น การเปิดฟอร์ม การสั่งพิมพ์รายงาน การเปิดคิวรี่ การแปลงข้อมูลจาก Access ไปเป็นไฟล์ ประเภทอื่น เป็นต้น มาโครจะนำคำสั่งจากแต่ละการปฏิบัติการ มาทำงานตามลำดับ เช่น มาโคร Suppliers จะเริ่มจากแถวแรก คือ ใช้คำสั่ง Echo ปิดฟอร์มชื่อ Product List และเปิดฟอร์มชื่อ Products
[Image]
การสร้างมาโครที่ Database Windows คลิกมาโครภายใต้อ๊อบเจค เลือกปุ่ม New [Image] ที่ Database Windows หรือเลือก Macro ที่เมนู Insert (เลือกคำสั่ง Insert + macro) เมื่อ Access สร้าง Macro Windows เปล่าขึ้นมาแล้ว จึงกำหนดคำสั่ง (Action) ใน Macro Windows ซึ่งประกอบด้วย Windows ส่วนบน และ Windows ส่วนล่าง โดย Windows ส่วนบนประกอบด้วย คอลัมน์ Action และ Comment เพื่อใช้คำสั่งในคอลัมน์ Action และคำอธิบายที่คอลัมน์ Comment ส่วน Windows ส่วนล่าง จะเป็นอากิวเมนต์ของคำสั่งในคอลัมน์ Action
Action เป็นคำสั่งในการทำงาน อากิวเมนต์ เป็นเงื่อนไขในการกำหนดขอบเขตการทำงานของ Action กลุ่มมาโคร (Macro Group)กลุ่มมาโคร เป็นการสร้าง Action ที่เป็นอิสระต่อกัน และมีสถานะเป็นมาโคร แต่อยู่ในมาโครเดียวกัน เมื่อนำมาใช้จัดการโปรแกรม เช่น การสร้าง Action สำหรับเปิดฟอร์ม 6 ชุด โดยเพิ่มคอลัมน์ Macro Name และกำหนดชื่อในคอลัมน์นี้ให้กับแต่ละ Action ในกลุ่มมาโคร
เมื่อมีการสร้างปุ่มคำสั่ง (Command button) แล้วเลือก Event จะเห็นชื่อมาโครเหล่านี้ในรูปแบบ
[ชื่อกลุ่มมาโคร].[ชื่อในคอลัมน์ Macro Name]
Suppliers.Add Products[Image]
เงื่อนไข (Condition) ในมาโครการกำหนดเงื่อนไขการทำงานของ Action ให้ทำงานเมื่อเงื่อนไขที่กำหนดเป็นจริง เช่น กำหนดให้มาโครทำงาน เฉพาะกรณีที่มีข้อมูลอยู่ในฟอร์ม ถ้าไม่อยู่ใน เงื่อนไข ให้แสดงข้อความ เพื่อบอกความแตกต่างไปจากข้อมูลที่มีอยู่จริง
การเพิ่มคอลัมน์เงื่อนไขให้ไปที่ Macro Windows เลือก Condition จากเมนู View (เลือกคำสั่ง View + Condition) หรือคลิกปุ่ม [Image]
[Image]
การใช้สัญลักษณ์ Ellipse(...) เพื่อระบุ action ในแถวต่อมาอยู่ภายในเงื่อนไขเดียวกัน ตามตัวอย่างเมื่อพบว่า IsNull([SupplierID]) เป็นจริง จะทำตามคำสั่ง MsgBox, GoToControl และ StopMacro ถ้าเป็นเท็จ จะข้ามไปที่ OpenForm เนื่องจากพบ Ellipse หน้าคำสั่งชุดดังกล่าว
การอ้างอิงชื่อตัว Control หรือฟิลด์ในนิพจน์ในการอ้างอิงของฟิลด์หรือตัว Control ในมาโครต้องใช้ไวยากรณ์ในนิพจน์ ตามรูปแบบนี้
Forms![Form Name]![Control Name]
Reports![Report Name]![Control Name]
เช่น
Forms![Employees]![EmployeeID]
Reports![Employees]![EmployeeID]การประยุกต์มาโครกับ Eventมาโครสามารถนำไปประยุกต์ Event ได้เพื่อนำมาใช้ในการควบคุมการ เช่น การคลิกในฟอร์ม การเปลี่ยนเลขหน้ากระดาษใหม่ในรายงาน
การสร้างมาโครและกำหนดในคุณสมบัติของฟอร์ม หรือตัว Control ด้วย Macro Builderที่ Design View ของฟอร์ม เปิดตารางคุณสมบัติ โดยเลือก Properties ที่เมนู View หรือคลิกปุ่ม [Image] เลือกฟอร์ม ส่วนของฟอร์ม หรือตัว Control จากนั้น Access จะแสดงตารางคุณสมบัติของฟอร์มหรือตัว Control ที่เลือก ที่ตารางคุณสมบัติคลิก Event ที่จะนำมาใช้งานแล้วเลือกปุ่ม Builder [Image]ที่ด้านขวาของช่องคุณสมบัติ Access จะเปิด dialog box ของ Builder ให้เลือก Macro Builder แล้วสร้างมาโครใหม่ขึ้นมา
[Image]
[Image]
การกำหนด Event ด้วยมาโครที่มีอยู่แล้วที่ตารางคุณสมบัติของฟอร์มหรือตัว Control เลือก Event ที่ต้องการ แล้วคลิกลูกศรเพื่อเลือกมาโครจากรายการมาโคร ถ้าเป็นมาโครแบบกลุ่ม จะสังเกตลักษณะของชื่อได้ คือ [ชื่อกลุ่มมาโคร].[ชื่อมาโคร]
[Image]
การประยุกต์ SetWarning Action กับ Action Queryตามปกติเมื่อเรียกใช้ action query ในการเพิ่ม(append), ลบ, ปรับปรุง หรือสร้าง table ใหม่จะมีไดอะล๊อกบ๊อกซ์สำหรับการยืนยันทุกขั้นตอน ถ้าต้องใช้หลาย action query ติดต่อกัน ซึ่งมีโอกาสเป็นไปได้ เช่น การเพิ่มต้นทางไปยัง 2 table ที่เกี่ยวข้องกัน อาจจะทำให้เกิดความสับสนกับผู้ใช้ได้ วิธีการในการแก้ไขสามารถใช้ การตั้งค่า SetWarning ไม่ให้แสดงข้อความจากระบบ
ตามตัวอย่างเป็นการใช้ delete query ลบข้อมูลใน table "NewData" แล้วเพิ่มข้อมูลด้วย append query จาก table "MacroData" ไปยัง table "NewData" ชุดมาโครที่ไม่ให้แสดงข้อความ (mrcSetWarning) ใช้ SetWarning action ที่ตั้งค่าอากิวเมนต์ Warning On เป็น No ตามด้วย action query และ MsgBox action แสดงข่าวสารว่า การทำงานเสร็จสิ้นแล้ว
การประยุกต์ Condition Macro กับ Option Buttonในการประมวลผลคำสั่ง อาจจะต้องมีการพิจารณาเงื่อนไขด้วย expression เพื่อเลือกชุดคำสั่งที่เหมาะสม เช่น การเลือกว่าจะเปิดฟอร์มต่อไป หรือ ข้อมูลที่ต้องการเลือกพิมพ์ในรายงาน คอลัมน์ Condition สามารถใช้สร้าง expression เพื่อตรวจสอบเงื่อนไขและส่งไปยังชุด action ที่สอดคล้องกับเงื่อนไขที่พบ
ตัวอย่างนี้ เป็นการนำตัวอย่าง SetWarning มาเพิ่มคอลัมน์ Condition และใช้การเลือกใน Option button เมื่อเลือกการทำงานใน Option button แล้วคลิกคำสั่ง มาโครจะพิจารณาค่าของ Option button ([SelectOption]) แล้วส่งค่าให้ action ประมวลผล การเลือกให้ action query ทำงานปกติ ([SelectOption] = 1) จะทำคำสั่งแถวที่ 1-3 ถ้าเลือกการตั้งค่าด้วย SetWarning action ([SelectOption] = 2) จะทำคำสั่งแถวที่ 4-5 ข้อให้สังเกตว่า มีการ Ellipse เพื่อแจ้งมาโครทราบถึงความสัมพันธ์ของคำสั่ง
การประยุกต์ Condition Macro ตรวจสอบค่านำเข้าในการป้อนข้อมูลบางประเภท เช่น ตัวเลข primary key มักจะต้องมีการตรวจสอบค่านำเข้าก่อน เนื่องจากการนำเข้าค่าผิดประเภท หรือไม่ถูกต้อง อาจจะทำให้โปรแกรมเกิดความผิดพลาด และไม่สามารถทำงานต่อไปได้ ดังนั้นจึงต้องมีการตรวจสอบค่านำเข้า ก่อนส่งเข้าสู่ฐานข้อมูล
ตามตัวอย่างเป็นการตรวจสอบค่า primary ใน Condition macro ด้วยฟังก์ชัน DLookup โดยฟังก์ชัน DLookup จะมองหาค่าที่ระบุแล้วผลลัพธ์ตามที่กำหนดในอากิวเมนต์ expression (ค่าแรกของฟังก์ชัน กรณีนี้ คือ ชื่อฟิลด์ RecordID ) ในอากิวเมนต์ domain (ค่าที่สองของฟังก์ชัน กรณีนี้ คือ ชื่อ table "MacroData") ตามเงื่อนไขของอากิวเมนต์ criteria (ค่าที่สามของฟังก์ชัน) โดยกำหนดว่า ถ้าค่าไม่เป็นค่าว่าง (Not IsNull) แสดงว่าเกิดค่าซ้ำให้แสดงข้อความแจ้งผู้ใช้ ทราบว่ามีค่า primary key นี้อยู่แล้ว และยกเลิก event การป้อนข้อมูล เพื่อให้ป้อนค่าใหม่ ซึ่งมาโครนี้กำหนดให้กับ BeforeUpdate ของ RecordID และการเพิ่มเรคคอร์ดใหม่ใช้ RunCommand action ที่กำหนดอากิวเมนต์ Command เป็น RecordsGoToNew
[Image]
การสร้างมาโครที่ Database Windows คลิกมาโครภายใต้อ๊อบเจค เลือกปุ่ม New [Image] ที่ Database Windows หรือเลือก Macro ที่เมนู Insert (เลือกคำสั่ง Insert + macro) เมื่อ Access สร้าง Macro Windows เปล่าขึ้นมาแล้ว จึงกำหนดคำสั่ง (Action) ใน Macro Windows ซึ่งประกอบด้วย Windows ส่วนบน และ Windows ส่วนล่าง โดย Windows ส่วนบนประกอบด้วย คอลัมน์ Action และ Comment เพื่อใช้คำสั่งในคอลัมน์ Action และคำอธิบายที่คอลัมน์ Comment ส่วน Windows ส่วนล่าง จะเป็นอากิวเมนต์ของคำสั่งในคอลัมน์ Action
Action เป็นคำสั่งในการทำงาน อากิวเมนต์ เป็นเงื่อนไขในการกำหนดขอบเขตการทำงานของ Action กลุ่มมาโคร (Macro Group)กลุ่มมาโคร เป็นการสร้าง Action ที่เป็นอิสระต่อกัน และมีสถานะเป็นมาโคร แต่อยู่ในมาโครเดียวกัน เมื่อนำมาใช้จัดการโปรแกรม เช่น การสร้าง Action สำหรับเปิดฟอร์ม 6 ชุด โดยเพิ่มคอลัมน์ Macro Name และกำหนดชื่อในคอลัมน์นี้ให้กับแต่ละ Action ในกลุ่มมาโคร
เมื่อมีการสร้างปุ่มคำสั่ง (Command button) แล้วเลือก Event จะเห็นชื่อมาโครเหล่านี้ในรูปแบบ
[ชื่อกลุ่มมาโคร].[ชื่อในคอลัมน์ Macro Name]
Suppliers.Add Products[Image]
เงื่อนไข (Condition) ในมาโครการกำหนดเงื่อนไขการทำงานของ Action ให้ทำงานเมื่อเงื่อนไขที่กำหนดเป็นจริง เช่น กำหนดให้มาโครทำงาน เฉพาะกรณีที่มีข้อมูลอยู่ในฟอร์ม ถ้าไม่อยู่ใน เงื่อนไข ให้แสดงข้อความ เพื่อบอกความแตกต่างไปจากข้อมูลที่มีอยู่จริง
การเพิ่มคอลัมน์เงื่อนไขให้ไปที่ Macro Windows เลือก Condition จากเมนู View (เลือกคำสั่ง View + Condition) หรือคลิกปุ่ม [Image]
[Image]
การใช้สัญลักษณ์ Ellipse(...) เพื่อระบุ action ในแถวต่อมาอยู่ภายในเงื่อนไขเดียวกัน ตามตัวอย่างเมื่อพบว่า IsNull([SupplierID]) เป็นจริง จะทำตามคำสั่ง MsgBox, GoToControl และ StopMacro ถ้าเป็นเท็จ จะข้ามไปที่ OpenForm เนื่องจากพบ Ellipse หน้าคำสั่งชุดดังกล่าว
การอ้างอิงชื่อตัว Control หรือฟิลด์ในนิพจน์ในการอ้างอิงของฟิลด์หรือตัว Control ในมาโครต้องใช้ไวยากรณ์ในนิพจน์ ตามรูปแบบนี้
Forms![Form Name]![Control Name]
Reports![Report Name]![Control Name]
เช่น
Forms![Employees]![EmployeeID]
Reports![Employees]![EmployeeID]การประยุกต์มาโครกับ Eventมาโครสามารถนำไปประยุกต์ Event ได้เพื่อนำมาใช้ในการควบคุมการ เช่น การคลิกในฟอร์ม การเปลี่ยนเลขหน้ากระดาษใหม่ในรายงาน
การสร้างมาโครและกำหนดในคุณสมบัติของฟอร์ม หรือตัว Control ด้วย Macro Builderที่ Design View ของฟอร์ม เปิดตารางคุณสมบัติ โดยเลือก Properties ที่เมนู View หรือคลิกปุ่ม [Image] เลือกฟอร์ม ส่วนของฟอร์ม หรือตัว Control จากนั้น Access จะแสดงตารางคุณสมบัติของฟอร์มหรือตัว Control ที่เลือก ที่ตารางคุณสมบัติคลิก Event ที่จะนำมาใช้งานแล้วเลือกปุ่ม Builder [Image]ที่ด้านขวาของช่องคุณสมบัติ Access จะเปิด dialog box ของ Builder ให้เลือก Macro Builder แล้วสร้างมาโครใหม่ขึ้นมา
[Image]
[Image]
การกำหนด Event ด้วยมาโครที่มีอยู่แล้วที่ตารางคุณสมบัติของฟอร์มหรือตัว Control เลือก Event ที่ต้องการ แล้วคลิกลูกศรเพื่อเลือกมาโครจากรายการมาโคร ถ้าเป็นมาโครแบบกลุ่ม จะสังเกตลักษณะของชื่อได้ คือ [ชื่อกลุ่มมาโคร].[ชื่อมาโคร]
[Image]
การประยุกต์ SetWarning Action กับ Action Queryตามปกติเมื่อเรียกใช้ action query ในการเพิ่ม(append), ลบ, ปรับปรุง หรือสร้าง table ใหม่จะมีไดอะล๊อกบ๊อกซ์สำหรับการยืนยันทุกขั้นตอน ถ้าต้องใช้หลาย action query ติดต่อกัน ซึ่งมีโอกาสเป็นไปได้ เช่น การเพิ่มต้นทางไปยัง 2 table ที่เกี่ยวข้องกัน อาจจะทำให้เกิดความสับสนกับผู้ใช้ได้ วิธีการในการแก้ไขสามารถใช้ การตั้งค่า SetWarning ไม่ให้แสดงข้อความจากระบบ
ตามตัวอย่างเป็นการใช้ delete query ลบข้อมูลใน table "NewData" แล้วเพิ่มข้อมูลด้วย append query จาก table "MacroData" ไปยัง table "NewData" ชุดมาโครที่ไม่ให้แสดงข้อความ (mrcSetWarning) ใช้ SetWarning action ที่ตั้งค่าอากิวเมนต์ Warning On เป็น No ตามด้วย action query และ MsgBox action แสดงข่าวสารว่า การทำงานเสร็จสิ้นแล้ว
การประยุกต์ Condition Macro กับ Option Buttonในการประมวลผลคำสั่ง อาจจะต้องมีการพิจารณาเงื่อนไขด้วย expression เพื่อเลือกชุดคำสั่งที่เหมาะสม เช่น การเลือกว่าจะเปิดฟอร์มต่อไป หรือ ข้อมูลที่ต้องการเลือกพิมพ์ในรายงาน คอลัมน์ Condition สามารถใช้สร้าง expression เพื่อตรวจสอบเงื่อนไขและส่งไปยังชุด action ที่สอดคล้องกับเงื่อนไขที่พบ
ตัวอย่างนี้ เป็นการนำตัวอย่าง SetWarning มาเพิ่มคอลัมน์ Condition และใช้การเลือกใน Option button เมื่อเลือกการทำงานใน Option button แล้วคลิกคำสั่ง มาโครจะพิจารณาค่าของ Option button ([SelectOption]) แล้วส่งค่าให้ action ประมวลผล การเลือกให้ action query ทำงานปกติ ([SelectOption] = 1) จะทำคำสั่งแถวที่ 1-3 ถ้าเลือกการตั้งค่าด้วย SetWarning action ([SelectOption] = 2) จะทำคำสั่งแถวที่ 4-5 ข้อให้สังเกตว่า มีการ Ellipse เพื่อแจ้งมาโครทราบถึงความสัมพันธ์ของคำสั่ง
การประยุกต์ Condition Macro ตรวจสอบค่านำเข้าในการป้อนข้อมูลบางประเภท เช่น ตัวเลข primary key มักจะต้องมีการตรวจสอบค่านำเข้าก่อน เนื่องจากการนำเข้าค่าผิดประเภท หรือไม่ถูกต้อง อาจจะทำให้โปรแกรมเกิดความผิดพลาด และไม่สามารถทำงานต่อไปได้ ดังนั้นจึงต้องมีการตรวจสอบค่านำเข้า ก่อนส่งเข้าสู่ฐานข้อมูล
ตามตัวอย่างเป็นการตรวจสอบค่า primary ใน Condition macro ด้วยฟังก์ชัน DLookup โดยฟังก์ชัน DLookup จะมองหาค่าที่ระบุแล้วผลลัพธ์ตามที่กำหนดในอากิวเมนต์ expression (ค่าแรกของฟังก์ชัน กรณีนี้ คือ ชื่อฟิลด์ RecordID ) ในอากิวเมนต์ domain (ค่าที่สองของฟังก์ชัน กรณีนี้ คือ ชื่อ table "MacroData") ตามเงื่อนไขของอากิวเมนต์ criteria (ค่าที่สามของฟังก์ชัน) โดยกำหนดว่า ถ้าค่าไม่เป็นค่าว่าง (Not IsNull) แสดงว่าเกิดค่าซ้ำให้แสดงข้อความแจ้งผู้ใช้ ทราบว่ามีค่า primary key นี้อยู่แล้ว และยกเลิก event การป้อนข้อมูล เพื่อให้ป้อนค่าใหม่ ซึ่งมาโครนี้กำหนดให้กับ BeforeUpdate ของ RecordID และการเพิ่มเรคคอร์ดใหม่ใช้ RunCommand action ที่กำหนดอากิวเมนต์ Command เป็น RecordsGoToNew