หัวข้อนี้จะอธิบายกระบวนงานสําหรับการเรียงลําดับที่อยู่อินเทอร์เน็ตโพรโทคอล (IP) ที่เก็บอยู่ในฐานข้อมูล Access
บทนำ
ถ้าคุณทํางานกับที่อยู่ IP คุณอาจทราบอยู่แล้วว่ามันไม่ตรงไปตรงมาเหมือนกับการทํางานกับข้อความหรือตัวเลข เนื่องจากที่อยู่ IP คือคอลเลกชันของค่าตัวเลขสี่ค่าที่คั่นด้วยจุด (.) โดยที่แต่ละค่าเป็นตัวเลขระหว่าง 0 และ 255 ตารางต่อไปนี้แสดงข้อมูลก่อนที่จะนําลําดับการจัดเรียงใดๆ ไปใช้
หมายเลขเครื่อง |
ลูกจ้าง |
ตำแหน่งที่ตั้ง |
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
หมายเลขเครื่อง |
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 และอื่นๆ ตารางต่อไปนี้แสดงที่อยู่ในลําดับจากน้อยไปหามากที่ถูกต้อง
หมายเลขเครื่อง |
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 ออกเป็นส่วนตัวเลขสี่ส่วน ที่อยู่ต้องเรียงลําดับตามส่วนแรก จากนั้นสําหรับแต่ละค่าในส่วนแรก จากนั้นตามด้วยส่วนที่สอง และอื่นๆ ตารางจะแสดงแต่ละส่วนในคอลัมน์ที่ต่างกัน และเนื่องจากคอลัมน์เก็บค่าตัวเลขอย่างง่าย จึงเป็นไปได้ที่จะเรียงลําดับคอลัมน์จากซ้ายไปขวาจากน้อยไปหามาก ดังที่แสดงในตารางต่อไปนี้
PartI |
PartII |
PartIII |
PartIV |
---|---|---|---|
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 คิวรีจะเรียงลําดับระเบียนตามคอลัมน์จากการคํานวณทั้งสี่คอลัมน์
สร้างคิวรี
คุณจะสร้างคิวรีแบบใช้เลือกข้อมูลที่ชื่อว่า Sorted 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 เป็นตัวเลข ขั้นตอนสุดท้ายนี้จําเป็นเนื่องจากชนิดข้อมูลต้นแบบคือ ข้อความ
-
เพิ่มคอลัมน์สําหรับส่วนที่อยู่ที่สาม ในคอลัมน์ทางด้านขวาของ PartII ให้พิมพ์ PartIII: 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 เป็นตัวเลข ขั้นตอนสุดท้ายนี้จําเป็นเนื่องจากชนิดข้อมูลต้นแบบคือ ข้อความ
-
เพิ่มคอลัมน์สําหรับส่วนที่อยู่ที่สี่และสุดท้าย ในคอลัมน์ทางด้านขวาของ PartIII ให้พิมพ์ PartIV: Val(Right([IPAddress],Len([IPAddress])-InStr(InStr(1,[IPAddress],".") +1,[IPAddress],".") +1,[IPAddress],"."))) ในแถว เขตข้อมูล นิพจน์จะส่งกลับอักขระที่อยู่หลังจุดสุดท้าย
ตรวจสอบนิพจน์อีกครั้ง กุญแจสําคัญคือการหาตําแหน่งของช่วงเวลาที่สามแล้วแยกอักขระทั้งหมดที่ตามมา เนื่องจากคุณไม่ทราบตําแหน่งของช่วงเวลาที่สาม คุณจึงเรียกฟังก์ชัน InStr สามครั้งเพื่อค้นหาตําแหน่งของช่วงเวลาที่สาม จากนั้นคุณสามารถใช้ฟังก์ชัน Len เพื่อคํานวณจํานวนหลักตัวเลขในส่วนที่สี่ จํานวนหลักที่ส่งกลับจะถูกใช้กับฟังก์ชัน Right เพื่อแยกอักขระจํานวนมากจากส่วนขวาของเขตข้อมูล IPAddress สุดท้าย คุณเรียกใช้ฟังก์ชัน Val เพื่อแปลงอักขระที่ส่งกลับโดยฟังก์ชัน Mid เป็นตัวเลข ขั้นตอนสุดท้ายนี้จําเป็นเนื่องจากชนิดข้อมูลต้นแบบคือ ข้อความ
-
ตั้งค่าแถว เรียงลําดับ ของทั้งสี่คอลัมน์จากการคํานวณเป็น จากน้อยไปหามาก
สำคัญ แถว เรียงลําดับ ของคอลัมน์ IPAddress ต้องเว้นว่างไว้
ถ้าคุณต้องการเรียงลําดับตามค่าเขตข้อมูลอื่นๆ นอกเหนือจากที่อยู่ ให้วางเขตข้อมูลทางด้านซ้ายหรือขวาของคอลัมน์จากการคํานวณทั้งสี่คอลัมน์ อย่าวางเขตข้อมูลที่เรียงลําดับอื่นระหว่างคอลัมน์จากการคํานวณ
-
ขั้นตอนถัดไปคือการซ่อนคอลัมน์จากการคํานวณสี่คอลัมน์จากแผ่นข้อมูล แต่ก่อนที่คุณจะทําเช่นนั้น ให้สลับไปยังมุมมองแผ่นข้อมูลเพื่อดูผลลัพธ์ของนิพจน์ในคอลัมน์จากการคํานวณ ตารางต่อไปนี้แสดงคอลัมน์ที่คุณจะเห็นในมุมมองแผ่นข้อมูล
หมายเลขเครื่อง
IPAddress
PartI
PartII
PartIII
PartIV
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 ระหว่างการป้อนข้อมูล
ถ้าคุณต้องการตรวจสอบความถูกต้องของที่อยู่ที่ไม่มีการเขียนโค้ด คุณสามารถทําได้อย่างจํากัดโดยการตั้งค่าคุณสมบัติ รูปแบบการป้อนข้อมูล ของเขตข้อมูลเป็น ###.##.#.##; 0;" " และคุณสมบัติ รูปแบบ ของเขตข้อมูลที่อยู่ IP ไปยัง &&&&&&&&&&&&
รูปแบบการป้อนข้อมูลทําหน้าที่อะไร เมื่อคุณเริ่มพิมพ์ในเขตข้อมูลที่อยู่ รูปแบบการป้อนข้อมูลจะป้องกันไม่ให้คุณใส่อักขระอื่นที่ไม่ใช่ตัวเลขและช่องว่างระหว่างจุดสามจุด ถ้าส่วนตัวเลขเป็นตัวเลขสองหลัก ให้ปล่อยตัวเลขที่สามว่างไว้หรือพิมพ์ช่องว่างแทน โปรดทราบว่ารูปแบบการป้อนข้อมูลนี้จะไม่เตือนผู้ใช้ถ้าเขาข้ามการพิมพ์ส่วนของที่อยู่อย่างน้อยหนึ่งส่วน หรือพิมพ์เฉพาะช่องว่างแทนที่จะเป็นค่าตัวเลข ตัวอย่างเช่น "345 .3. " จะได้รับการยอมรับว่าเป็นที่อยู่ที่ถูกต้อง
รูปแบบการแสดงผลทําอะไรได้บ้าง เมื่อคุณพิมพ์เสร็จแล้วและออกจากเขตข้อมูล รูปแบบการแสดงจะเอาช่องว่างในที่อยู่ออก และแสดงเฉพาะตัวเลขและจุด ดังนั้น ถ้าคุณพิมพ์ "354.35 .2 .12 " ที่อยู่จะแสดงเป็น "354.35.2.12" โปรดทราบว่าถ้าคุณคลิกภายในที่อยู่ หรือกด F2 (เพื่อเข้าสู่โหมดแก้ไข) เมื่อเลือกที่อยู่ ช่องว่างจะปรากฏขึ้นอีกครั้ง
เคล็ดลับ: ถ้าคุณต้องการคัดลอกที่อยู่ ให้ย้ายไปยังคอลัมน์หรือตัวควบคุมก่อนหน้า กด TAB เพื่อเลือกที่อยู่ที่จัดรูปแบบ แล้วคลิก คัดลอก ด้วยการทําเช่นนี้ คุณจะไม่คัดลอกสตริงที่อยู่ที่มีช่องว่าง
การเรียงลําดับระเบียนในฟอร์มหรือรายงานตามที่อยู่ IP
ถ้าคุณต้องการสร้างฟอร์มหรือรายงานที่เรียงลําดับระเบียนตามที่อยู่ IP ให้ยึดวัตถุใหม่ที่เรียงลําดับที่อยู่ตามที่อธิบายไว้ก่อนหน้านี้ แทนที่จะเป็นตารางที่จัดเก็บที่อยู่