หัวข้อนี้จะอธิบายกระบวนงานสําหรับการเรียงลําดับที่อยู่อินเทอร์เน็ตโพรโทคอล (IP) ที่เก็บไว้ในฐานข้อมูล Access
บทนำ
ถ้าคุณทํางานกับที่อยู่ IP คุณอาจทราบอยู่แล้วว่าการทํางานนี้ไม่ง่ายเหมือนการทํางานกับข้อความหรือตัวเลข เนื่องจากที่อยู่ IP คือคอลเลกชันของค่าตัวเลขสี่ค่าที่คั่นด้วยเครื่องหมายจุด (.) โดยที่แต่ละค่าเป็นตัวเลขระหว่าง 0 ถึง 255 ตารางต่อไปนี้แสดงข้อมูลก่อนที่จะนําลําดับการจัดเรียงใดๆ ไปใช้
| MachineID | พนักงาน | ตำแหน่งที่ตั้ง | IPAddress |
|---|---|---|---|
| 1 | ... | ... | 123.4.245.23 |
| 2 | ... | ... | 104.244.253.29 |
| 3 | ... | ... | 1.198.3.93 |
| 4 | ... | ... | 32.183.93.40 |
| 5 | ... | ... | 104.30.244.2 |
| 6 | ... | ... | 104.244.4.1 |
การเรียงลําดับที่อยู่ IP ใน Access เป็นปัญหายาก เนื่องจาก Access ไม่มีชนิดข้อมูลพิเศษสําหรับการจัดเก็บที่อยู่ IP แม้ว่าที่อยู่ IP จะเป็นเพียงคอลเลกชันของตัวเลข แต่คุณไม่สามารถจัดเก็บที่อยู่ IP ในเขตข้อมูลตัวเลขได้ ทั้งนี้เนื่องจากเขตข้อมูลตัวเลขรองรับจุดทศนิยม (.) จุดเดียวเท่านั้น (.) ในขณะที่ที่อยู่ IP มีจุดสามจุด (.) ซึ่งหมายความว่าคุณต้องจัดเก็บที่อยู่ในเขตข้อมูลข้อความ
เนื่องจากคุณจัดเก็บที่อยู่ IP ในเขตข้อมูลข้อความ คุณไม่สามารถใช้ปุ่มเรียงลําดับที่มีอยู่แล้วภายใน Access เพื่อเรียงลําดับที่อยู่อย่างมีความหมายได้ ปุ่มเรียงลําดับจะเรียงลําดับค่าในเขตข้อมูลข้อความตามลําดับตัวอักษรเสมอ แม้ว่าอักขระจะเป็นตัวเลขก็ตาม กล่าวคือ ที่อยู่จะถูกเรียงลําดับตามหลักแรก แล้วเรียงลําดับตามหลักที่สอง และอื่นๆ แทนที่จะเรียงลําดับตามค่าตัวเลขที่ประกอบขึ้นเป็นที่อยู่ ตารางต่อไปนี้แสดงที่อยู่จากตารางก่อนหน้าที่เรียงลําดับตามตัวอักษรในเขตข้อมูล IPAddress
| MachineID | IPAddress |
|---|---|
| 3 | 1.198.3.93 |
| 2 | 104.244.253.29 |
| 6 | 104.244.4.1 |
| 5 | 104.30.244.2 |
| 1 | 123.4.245.23 |
| 4 | 32.183.93.40 |
ที่อยู่ที่เริ่มต้นด้วย 1 จะแสดงก่อนอยู่ที่เริ่มต้นด้วย 2 และอื่นๆ ตารางต่อไปนี้แสดงที่อยู่ในลําดับจากน้อยไปหามากที่ถูกต้อง
| MachineID | IPAddress |
|---|---|
| 3 | 1.198.3.93 |
| 4 | 32.183.93.40 |
| 5 | 104.30.244.2 |
| 6 | 104.244.4.1 |
| 2 | 104.244.253.29 |
| 1 | 123.4.245.23 |
เพื่อให้ง่ายต่อการทําความเข้าใจขั้นตอนที่เกี่ยวข้องกับการเรียงลําดับที่อยู่เหล่านี้ คุณสามารถแบ่งที่อยู่ IP ออกเป็นตัวเลขสี่ส่วน ต้องเรียงที่อยู่ตามส่วนแรก จากนั้นสําหรับแต่ละค่าในส่วนแรก แล้วตามด้วยส่วนที่สอง และอื่นๆ ตารางจะแสดงแต่ละส่วนในคอลัมน์ที่ต่างกัน และเนื่องจากคอลัมน์มีค่าตัวเลขอย่างง่าย จึงจะสามารถเรียงลําดับคอลัมน์จากซ้ายไปขวาจากน้อยไปหามากได้ ดังที่แสดงในตารางต่อไปนี้
| ส่วนที่ 1 | ส่วนที่ 2 | ตอนที่สาม | ส่วนที่ 4 |
|---|---|---|---|
| 1 | 198 | 3 | 93 |
| 32 | 183 | 93 | 40 |
| 104 | 30 | 244 | 2 |
| 104 | 244 | 4 | 1 |
| 104 | 244 | 253 | 29 |
| 123 | 4 | 245 | 23 |
การเรียงลําดับทั้งสี่ส่วนแยกกันเป็นเคล็ดลับที่อยู่เบื้องหลังการเรียงลําดับที่อยู่ IP ในกระบวนการต่อไปนี้ คุณสร้างคิวรีที่นอกเหนือจากเขตข้อมูลที่อยู่ IP แล้ว ยังมีคอลัมน์จากการคํานวณสี่คอลัมน์โดยที่แต่ละคอลัมน์จัดเก็บส่วนของค่าที่อยู่ คอลัมน์จากการคํานวณแรกจะมีตัวเลขส่วนแรกของที่อยู่ คอลัมน์จากการคํานวณที่สองจะเก็บตัวเลขส่วนที่สองของที่อยู่ และอื่นๆ แทนที่จะเรียงลําดับระเบียนตามเขตข้อมูล IPAddress คิวรีจะเรียงลําดับระเบียนตามคอลัมน์จากการคํานวณทั้งสี่คอลัมน์
สร้างคิวรี
คุณจะสร้างคิวรีแบบใช้เลือกข้อมูลที่ชื่อว่า IPAddresses ที่เรียงลําดับแล้ว ซึ่งจะแสดงระเบียนของที่อยู่ IP จากน้อยไปหามาก สมมติว่าฐานข้อมูลปัจจุบันมีตารางชื่อ MachineDetails ที่มีเขตข้อมูลข้อความชื่อ IPAddress
คลิก สร้าง>การออกแบบคิวรี
เลือก เพิ่มตาราง (แสดงตาราง ใน Access) แล้วลาก รายละเอียดเครื่องไปยัง ส่วนบนของมุมมองออกแบบ
ลากเขตข้อมูล MachineID และ IPAddress ไปยังตารางออกแบบคิวรี
ในตอนนี้ คุณก็พร้อมที่จะเพิ่มคอลัมน์จากการคํานวณแล้ว ในคอลัมน์เปล่าคอลัมน์แรกทางด้านขวา ให้พิมพ์นิพจน์ PartI: Val(Left([IPAddress],(InStr(1,[IPAddress],".")-1))) ในแถวเขตข้อมูล นิพจน์จะส่งกลับอักขระก่อนจุดแรก (.) ในเขตข้อมูล IPAddress
ตอนนี้ ให้ตรวจทานนิพจน์ เนื่องจากคุณไม่ทราบจํานวนหลักที่ประกอบขึ้นเป็นส่วนแรกของที่อยู่ คุณจึงใช้ฟังก์ชัน InStr เพื่อค้นหาตําแหน่งของคาบเวลาแรก การลบไป 1 (เพื่อไม่รวมจุด) จะส่งกลับจํานวนหลักในส่วนแรก จากนั้นให้ใช้ตัวเลขนี้กับฟังก์ชัน Left เพื่อแยกอักขระจํานวนมากนั้น โดยเริ่มต้นจากอักขระด้านซ้ายสุดจากเขตข้อมูล IPAddress สุดท้าย ให้คุณเรียกใช้ฟังก์ชัน Val เพื่อแปลงอักขระที่ส่งกลับโดยฟังก์ชัน Left ให้เป็นตัวเลข ขั้นตอนสุดท้ายนี้จําเป็น เนื่องจากชนิดข้อมูลต้นแบบเป็นข้อความบันทึกคิวรีโดยคลิก บันทึก บนแถบเครื่องมือด่วน เป็นความคิดที่ดีที่จะทําเช่นนี้หลังจากแต่ละขั้นตอนระดับกลาง
เพิ่มคอลัมน์สําหรับส่วนที่อยู่ที่สอง ในคอลัมน์ด้านขวาของ PartI ให้พิมพ์ PartII: Val(Mid([IPAddress],InStr(1,[IPAddress],".")+1,InStr(InStr(1,[IPAddress],".")+1,[IPAddress],".")-InStr(1,[IPAddress],".")-1)) ในแถวเขตข้อมูล นิพจน์จะส่งกลับอักขระที่อยู่ระหว่างคาบแรกและคาบที่สองในเขตข้อมูล IPAddress
รีวิวนิพจน์อีกครั้ง เนื่องจากคุณไม่ทราบจํานวนหลักที่ประกอบขึ้นเป็นส่วนที่สองของที่อยู่ หรือส่วนที่สองเริ่มต้นที่ใด (เนื่องจากคุณไม่ทราบความยาวของส่วนแรก) คุณจึงใช้ฟังก์ชัน InStr เพื่อค้นหาตําแหน่งของคาบเวลา จากนั้นคุณใช้ฟังก์ชัน Mid เพื่อแยกอักขระที่อยู่หลังจากจุดแรกแต่นําหน้าจุดที่สอง สุดท้าย ให้คุณเรียกใช้ฟังก์ชัน Val เพื่อแปลงอักขระที่ส่งกลับโดยฟังก์ชัน Mid ให้เป็นตัวเลข ขั้นตอนสุดท้ายนี้จําเป็น เนื่องจากชนิดข้อมูลต้นแบบเป็นข้อความเพิ่มคอลัมน์สําหรับส่วนที่อยู่ที่สาม ในคอลัมน์ทางด้านขวาของส่วนที่ II ให้พิมพ์ส่วนที่ III: Val(Mid([IPAddress],InStr(InStr(1,[IPAddress],".")+1,[IPAddress],".")+1,InStr(InStr(InStr(1,[IPAddress],".")+1,[IPAddress],".")+1,[IPAddress],".")-InStr(InStr(1,[IPAddress],".")+1,[IPAddress],".")-1)) ในแถวเขตข้อมูล นิพจน์จะส่งกลับอักขระที่อยู่ระหว่างคาบที่สองและสามในเขตข้อมูล IPAddress
รีวิวนิพจน์อีกครั้ง เนื่องจากคุณไม่ทราบจํานวนหลักที่ประกอบเป็นส่วนที่สามของที่อยู่ หรือส่วนที่สามเริ่มต้นที่ใด (เนื่องจากคุณไม่ทราบความยาวของส่วนแรกและส่วนที่สอง) คุณจึงใช้ฟังก์ชัน InStr เพื่อหาตําแหน่งของคาบเวลา จากนั้นคุณใช้ฟังก์ชัน Mid เพื่อแยกอักขระที่อยู่หลังจากจุดที่สองแต่ก่อนหน้าจุดที่สาม สุดท้าย ให้คุณเรียกใช้ฟังก์ชัน Val เพื่อแปลงอักขระที่ส่งกลับโดยฟังก์ชัน Mid ให้เป็นตัวเลข ขั้นตอนสุดท้ายนี้จําเป็น เนื่องจากชนิดข้อมูลต้นแบบเป็นข้อความเพิ่มคอลัมน์สําหรับส่วนที่อยู่ที่สี่และส่วนสุดท้าย ในคอลัมน์ทางด้านขวาของส่วนที่ III ให้พิมพ์ PartIV: Val(Right([IPAddress],Len([IPAddress])-InStr(InStr(1,[IPAddress],".")+1,[IPAddress],".")+1,[IPAddress],"."))) ในแถว เขตข้อมูล นิพจน์จะส่งกลับอักขระที่อยู่หลังจากจุดสุดท้าย
รีวิวนิพจน์อีกครั้ง สิ่งสําคัญคือการค้นหาตําแหน่งของช่วงเวลาที่สามแล้วแยกอักขระทั้งหมดที่ตามมา เนื่องจากคุณไม่ทราบแน่นอนว่าช่วงที่สามตั้งอยู่ที่ใด คุณจึงเรียกใช้ฟังก์ชัน InStr สามครั้งเพื่อค้นหาตําแหน่งของคาบเวลาที่สาม จากนั้นคุณใช้ฟังก์ชัน Len เพื่อคํานวณจํานวนหลักในส่วนที่สี่ จํานวนหลักที่ถูกส่งกลับจะใช้กับฟังก์ชัน Right เพื่อแยกอักขระจํานวนมากนั้นออกจากส่วนขวาของเขตข้อมูล IPAddress สุดท้าย ให้คุณเรียกใช้ฟังก์ชัน Val เพื่อแปลงอักขระที่ส่งกลับโดยฟังก์ชัน Mid ให้เป็นตัวเลข ขั้นตอนสุดท้ายนี้จําเป็น เนื่องจากชนิดข้อมูลต้นแบบเป็นข้อความตั้งค่าแถว เรียงลําดับ ของคอลัมน์จากการคํานวณทั้งสี่คอลัมน์เป็น จากน้อยไปหามาก
ข้อสําคัญ แถว เรียงลําดับ ของคอลัมน์ IPAddress ต้องเว้นว่างไว้
ถ้าคุณต้องการเรียงลําดับตามค่าเขตข้อมูลอื่นๆ นอกเหนือจากที่อยู่ ให้วางเขตข้อมูลไว้ทางด้านซ้ายหรือขวาของคอลัมน์จากการคํานวณทั้งสี่คอลัมน์ อย่าวางเขตข้อมูลการเรียงลําดับอื่นๆ ระหว่างคอลัมน์จากการคํานวณขั้นตอนถัดไปคือการซ่อนคอลัมน์จากการคํานวณทั้งสี่คอลัมน์จากแผ่นข้อมูล แต่ก่อนที่คุณจะทําเช่นนั้น ให้สลับไปยังมุมมองแผ่นข้อมูลเพื่อดูผลลัพธ์ของนิพจน์ในคอลัมน์จากการคํานวณ ตารางต่อไปนี้แสดงคอลัมน์ที่คุณจะเห็นในมุมมองแผ่นข้อมูล
MachineID IPAddress ส่วนที่ 1 ส่วนที่ 2 ตอนที่สาม ส่วนที่ 4 3 1.198.3.93 1 198 3 93 4 32.183.93.40 32 183 93 40 5 104.30.244.2 104 30 244 2 6 104.244.4.1 104 244 4 1 2 104.244.253.29 104 244 253 29 1 123.4.245.23 123 4 245 23 สลับกลับไปยังมุมมองออกแบบ แล้วล้างกล่องกาเครื่องหมายในแถว แสดง ของคอลัมน์จากการคํานวณทั้งสี่คอลัมน์ ซึ่งจะป้องกันไม่ให้คอลัมน์จากการคํานวณแสดงในมุมมองแผ่นข้อมูล
อีกทางหนึ่งคือ ระบุเกณฑ์สําหรับการแยกระเบียนจากคิวรี
สลับไปยังมุมมองแผ่นข้อมูลเพื่อดูระเบียนที่เรียงลําดับ คุณจะเห็นระเบียนที่เรียงลําดับอย่างถูกต้องตามลําดับที่อยู่ IP จากน้อยไปหามาก
การใช้ที่อยู่ IP ที่เรียงลําดับได้มากขึ้น
ตรวจสอบที่อยู่ IP ระหว่างการป้อนข้อมูล
ถ้าคุณต้องการตรวจสอบความถูกต้องของที่อยู่โดยไม่ต้องเขียนโค้ด คุณสามารถทําในขอบเขตที่จํากัดได้โดยการตั้งค่าคุณสมบัติ InputMask ของเขตข้อมูลเป็น ###.###.#; 0;" " และคุณสมบัติรูปแบบของเขตข้อมูลที่อยู่ IP ให้เป็น &&&&&&&&&&&&
รูปแบบการป้อนข้อมูลทําหน้าที่อะไร เมื่อคุณเริ่มพิมพ์ในเขตข้อมูลที่อยู่ รูปแบบการป้อนข้อมูลจะป้องกันไม่ให้คุณใส่อักขระอื่นนอกเหนือจากตัวเลขและช่องว่างระหว่างจุดสามจุด ถ้าส่วนที่เป็นตัวเลขสองหลัก ให้ปล่อยตัวเลขที่สามให้ว่างไว้หรือพิมพ์ช่องว่างแทน โปรดทราบว่ารูปแบบการป้อนข้อมูลนี้จะไม่แจ้งเตือนผู้ใช้ถ้าเขาข้ามการพิมพ์ที่อยู่อย่างน้อยหนึ่งส่วน หรือพิมพ์เพียงช่องว่างแทนที่จะเป็นค่าตัวเลข ตัวอย่างเช่น "345. .3. " จะได้รับการยอมรับเป็นที่อยู่ที่ถูกต้อง
รูปแบบการแสดงผลทําหน้าที่อะไร เมื่อคุณพิมพ์เสร็จและออกจากเขตข้อมูล รูปแบบการแสดงผลจะเอาช่องว่างในที่อยู่ออก และแสดงเฉพาะตัวเลขและจุด ดังนั้น ถ้าคุณพิมพ์ "354.35 .2 .12" ที่อยู่จะแสดงเป็น "354.35.2.12" โปรดทราบว่าถ้าคุณคลิกภายในที่อยู่ หรือกด F2 (เพื่อเข้าสู่โหมดแก้ไข) เมื่อเลือกที่อยู่ ช่องว่างจะปรากฏขึ้นอีกครั้ง
เคล็ดลับ
ถ้าคุณต้องการคัดลอกที่อยู่ ให้ย้ายไปยังคอลัมน์หรือตัวควบคุมก่อนหน้า กด TAB เพื่อเลือกที่อยู่ที่จัดรูปแบบ แล้วคลิกคัดลอก การทําเช่นนี้จะทําให้คุณไม่คัดลอกสตริงที่อยู่ที่มีช่องว่าง
การเรียงลําดับระเบียนในฟอร์มหรือรายงานตามที่อยู่ IP
ถ้าคุณต้องการสร้างฟอร์มหรือรายงานที่ระเบียนถูกเรียงลําดับตามที่อยู่ IP ให้ยึดวัตถุใหม่บนคิวรีที่เรียงลําดับที่อยู่ตามที่อธิบายไว้ก่อนหน้านี้ แทนที่จะยึดอยู่บนตารางที่เก็บที่อยู่