แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Ongart

หน้า: [1]
1
ผมคงเข้าใจอะไรผิดไป แต่โดยส่วนตัวผมยังไม่ค่อยไว้ใจมันเท่าไหร่
โพสต์นี้ได้รับคำขอบคุณจาก: Ongart

2
อ.สันติสุข ช่วยขยายความได้ไหมครับ ที่ว่า "เมื่อมีการ Compact ฐานข้อมูลแล้ว ค่าของฟิลด์ Autonumber จะถูกจัดเรียงใหม่ให้ต่อเนื่องกันไปโดยไม่สนใจค่าเดิม" มันจะเกิดขึ้นกรณีไหนบ้างครับ นี่คือความรู้ใหม่ของผมเลยอะครับ เพราะเท่าที่ทราบ การ Compact จะทำให้ฟิลด์ AutoNumber รันลำดับใหม่แค่เรคคอร์ดสุดท้าย ให้ต่อเนื่องกันเท่านั้นเอง ไม่ได้ไปเรียงเรคคอร์ดใหม่ที่มีค่าอยู่แล้วหนิครับ แล้วในฐานข้อมูล Northwind ของทางไมโครซอฟเองก็ใช้ฟิลด์ AutoNumber ในการเชื่อมความสัมพันธ์กันแทบทุกตารางเลยครับ เลยอยากขอความเห็นของอาจารย์หน่อยครับ ว่ากรณีไหนบ้าง?
ปล. ขออภัยหากอ่านความหมายของ อาจารย์ผิดไปครับ

ใช่ครับ หมายถึงถ้ามีการลบกี่เรคอร์ดก็ตามที่มีค่า autonumber เรียงต่อเนื่องกันไปจนถึงเรคอร์ดที่มีค่า autonumber มากสุด หลัง compact ฐานข้อมูลหลักแล้ว (ฐานข้อมูลที่มีเทเบิลนั้นอยู่จริง ไม่ใช่ฐานข้อมูลที่เราสร้าง linked table) มันจะรันค่าของ autonumber ต่อจากค่าที่มากที่สุดใหม่อีกครั้ง ไม่ได้หมายถึงค่าเดิมที่บันทึกอยู่แล้วจะถูกสร้างใหม่ ทีนี้เนื่องจากการที่มันเป็นค่าที่ระบบสร้างขึ้นมาเอง เรคอร์ดที่สัมพันธ์กันจะเชื่อมั่นได้อย่างไรว่าจะอ้างกลับมายังเรคอร์ดเก่า (ที่ถูกลบไปแล้ว) หรือเรคอร์ดใหม่ที่มีเลข autonumber เดียวกับเรคอร์ดเก่า แต่ถ้าเราสร้างเลขเอง อันนี้เราเชื่อได้แน่ว่าเลขใหม่จะไม่ซ้ำกับเลขที่มีอยู่เดิม แต่ปัญหานี้ก็อาจหมดไป ถ้าเราระบุ Cascade delete record ให้กับความสัมพันธ์นั้นด้วยครับ

แต่อาจารย์ครับ ขอความรู้อีกนิดนะครับ ถ้าหากเราสร้างความสัมพันธ์ของตารางไว้แล้ว เมื่อมีการลบเรคคอร์ดที่มีความสัมพันธ์ ถึงจะไม่ได้ระบุ Cascade delete record ไว้ ระบบฐานขัอมูล มันจะไม่ยอมให้ลบได้อยู่แล้วหนิครับ โดยระบบจะฟ้องว่า The record cannot be deleted or changed because table ... includes related records. ยังไงมันก็จะบังคับเราให้ไปลบเรคคอร์ดที่อ้างมายังเรคคอร์ดนี้ให้หมดก่อนถึงจะสามารถลบเรคคอร์ดหลักได้ อย่างที่อาจารย์บอก ผมอยากรู้ว่ามันมีกรณีไหนหรือเทคนิกอะไรครับ ที่เมื่อสร้างความสัมพันธ์แบบที่เจ้าของกระทู้บอกแล้ว แต่สามารถลบเรคคอร์ดหลักที่อ้างได้โดยไม่ต้องลบเรคคอร์ดย่อยก่อน เพราะอย่างในกรณีนี้ ผมคิดว่าทำยังไงก็ไม่สามารถลบเรคคอร์ด AutoNumber ได้ หากมีข้อมูลที่เชื่อมกันอยู่ นอกจากจะลบข้อมูลที่เชื่อมกันให้หมดเสียก่อน ระบบถึงจะยอมให้ลบ ซึ่งมันก็จะไม่มีปัญหาเรื่องเลขที่ไม่ตรงกันอยู่แล้วไม่ใข่หรือครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Ongart

3
ขอบคุณอ.สันติสุขนะครับ
แต่ดูเหมือนว่าผมใช้ฟิวอื่นสร้างความสัมพันธ์ไม่ได้ครับ มันจะไม่เป็นหนึ่ง-ต่อ-กลุ่ม ผมจะต้องยกเลิกCompact ฐานข้อมูลอัตโนมัติตอนปิดได้ไหมครับ แล้วใช้ฟิลด์ประเภท Autonumber เชื่อมความสัมพันธ์เหมือนเดิม (รู้แล้วว่าทำไมโปรแกรมขายสินค้าที่ผมเขียนก่อนหน้านี้และใช้อยู่ บิลแรกสุดตอนรับสินค้าข้อมูลหายหมดยกบิลเลย หายหลังจากที่ผมทำCompact ฐานข้อมูลด้วยครับ)

เราสร้างเลขบิลเองดีกว่าครับ ควบคุมเองอย่าให้ซ้ำกับเลขเดิม แม้เลขเดิมจะถูกลบไปแล้วก็ตาม ก็จะไม่สร้างซ้ำ ในความเห็นของผม autonumber ฟิลด์ เรามีไว้เพื่อให้ระบบของฐานข้อมูลเองสามารถอ้างเรคอร์ดได้ แต่ไม่กำหนดความหมายในแง่ของระบบที่เราพัฒนา (อย่างเช่น ให้ความหมายว่าเป็นเลขบิล) ดังนั้นระบบของเราจะได้ไม่ต้องไปขึ้นกับความไม่แน่นอนของเลขนี้ ซึ่งถ้าเราทำเองแล้ว เรื่องการ Compact ก็ไม่ต้องกังวล จะมีหรือไม่มีก็ไม่ใช่ปัญหาแล้ว
โพสต์นี้ได้รับคำขอบคุณจาก: Ongart

4
อ.สันติสุข ช่วยขยายความได้ไหมครับ ที่ว่า "เมื่อมีการ Compact ฐานข้อมูลแล้ว ค่าของฟิลด์ Autonumber จะถูกจัดเรียงใหม่ให้ต่อเนื่องกันไปโดยไม่สนใจค่าเดิม" มันจะเกิดขึ้นกรณีไหนบ้างครับ นี่คือความรู้ใหม่ของผมเลยอะครับ เพราะเท่าที่ทราบ การ Compact จะทำให้ฟิลด์ AutoNumber รันลำดับใหม่แค่เรคคอร์ดสุดท้าย ให้ต่อเนื่องกันเท่านั้นเอง ไม่ได้ไปเรียงเรคคอร์ดใหม่ที่มีค่าอยู่แล้วหนิครับ แล้วในฐานข้อมูล Northwind ของทางไมโครซอฟเองก็ใช้ฟิลด์ AutoNumber ในการเชื่อมความสัมพันธ์กันแทบทุกตารางเลยครับ เลยอยากขอความเห็นของอาจารย์หน่อยครับ ว่ากรณีไหนบ้าง?
ปล. ขออภัยหากอ่านความหมายของ อาจารย์ผิดไปครับ

ใช่ครับ หมายถึงถ้ามีการลบกี่เรคอร์ดก็ตามที่มีค่า autonumber เรียงต่อเนื่องกันไปจนถึงเรคอร์ดที่มีค่า autonumber มากสุด หลัง compact ฐานข้อมูลหลักแล้ว (ฐานข้อมูลที่มีเทเบิลนั้นอยู่จริง ไม่ใช่ฐานข้อมูลที่เราสร้าง linked table) มันจะรันค่าของ autonumber ต่อจากค่าที่มากที่สุดใหม่อีกครั้ง ไม่ได้หมายถึงค่าเดิมที่บันทึกอยู่แล้วจะถูกสร้างใหม่ ทีนี้เนื่องจากการที่มันเป็นค่าที่ระบบสร้างขึ้นมาเอง เรคอร์ดที่สัมพันธ์กันจะเชื่อมั่นได้อย่างไรว่าจะอ้างกลับมายังเรคอร์ดเก่า (ที่ถูกลบไปแล้ว) หรือเรคอร์ดใหม่ที่มีเลข autonumber เดียวกับเรคอร์ดเก่า แต่ถ้าเราสร้างเลขเอง อันนี้เราเชื่อได้แน่ว่าเลขใหม่จะไม่ซ้ำกับเลขที่มีอยู่เดิม แต่ปัญหานี้ก็อาจหมดไป ถ้าเราระบุ Cascade delete record ให้กับความสัมพันธ์นั้นด้วยครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Ongart

5
ขอบคุณ คุณ ekppom กับคลิปความรู้นะครับ ติดตามครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Ongart

6
อ.สันติสุข ช่วยขยายความได้ไหมครับ ที่ว่า "เมื่อมีการ Compact ฐานข้อมูลแล้ว ค่าของฟิลด์ Autonumber จะถูกจัดเรียงใหม่ให้ต่อเนื่องกันไปโดยไม่สนใจค่าเดิม" มันจะเกิดขึ้นกรณีไหนบ้างครับ นี่คือความรู้ใหม่ของผมเลยอะครับ เพราะเท่าที่ทราบ การ Compact จะทำให้ฟิลด์ AutoNumber รันลำดับใหม่แค่เรคคอร์ดสุดท้าย ให้ต่อเนื่องกันเท่านั้นเอง ไม่ได้ไปเรียงเรคคอร์ดใหม่ที่มีค่าอยู่แล้วหนิครับ แล้วในฐานข้อมูล Northwind ของทางไมโครซอฟเองก็ใช้ฟิลด์ AutoNumber ในการเชื่อมความสัมพันธ์กันแทบทุกตารางเลยครับ เลยอยากขอความเห็นของอาจารย์หน่อยครับ ว่ากรณีไหนบ้าง?
ปล. ขออภัยหากอ่านความหมายของ อาจารย์ผิดไปครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Ongart

7
ขอบคุณอ.สันติสุขนะครับ
แต่ดูเหมือนว่าผมใช้ฟิวอื่นสร้างความสัมพันธ์ไม่ได้ครับ มันจะไม่เป็นหนึ่ง-ต่อ-กลุ่ม ผมจะต้องยกเลิกCompact ฐานข้อมูลอัตโนมัติตอนปิดได้ไหมครับ แล้วใช้ฟิลด์ประเภท Autonumber เชื่อมความสัมพันธ์เหมือนเดิม (รู้แล้วว่าทำไมโปรแกรมขายสินค้าที่ผมเขียนก่อนหน้านี้และใช้อยู่ บิลแรกสุดตอนรับสินค้าข้อมูลหายหมดยกบิลเลย หายหลังจากที่ผมทำCompact ฐานข้อมูลด้วยครับ)
โพสต์นี้ได้รับคำขอบคุณจาก: Ongart

8
ห้ามใช้ฟิลด์ประเภท Autonumber เชื่อมความสัมพันธ์กับเทเบิลอื่น (Bill.BillNo เชื่อมกับ Order.BillNo) เพราะเมื่อมีการ Compact ฐานข้อมูลแล้ว ค่าของฟิลด์ Autonumber จะถูกจัดเรียงใหม่ให้ต่อเนื่องกันไปโดยไม่สนใจค่าเดิม ดังนั้นค่าเดิมของฟิลด์ Autonumber ที่อยู่ในเทเบิลอื่น (Order.BillNo) มีโอกาสอ้างกลับมายังเทเบิลหลัก (Bill) ผิดเรคอร์ดทันที
โพสต์นี้ได้รับคำขอบคุณจาก: Ongart

9
เผื่อใครต้องการเรียนรู้การตัดสต๊อคสินค้านะครับลองศึกษาดูได้ครับ เป็นAccessเวอร์ชั่น2003และ2016ครับ
-ระบบแยกฐานข้อมูลออกจากฟอร์มและรายงาน
-ตัดบานหน้าต่างนำทางและแถบเมนูออก
-ใช้ระบบส่งข้อมูลยอดขายแยกไว้ในตารางใหม่เพื่อไม่ให้ออกรายงานผิดหากมีการเปลี่ยนแปลงเรื่องราคา
-ระบบตัดสต๊อคทันทีที่ขายโดยไม่ต้องส่งข้อมูลก่อน
-รายงานสต๊อคคงเหลือทันที
-รายงานจุดสั่งซื้อสินค้า

ออกแบบและเขียนแบบง่ายๆเพื่อให้เกิดความเข้าใจสำหรับมือใหม่
หากเกิดข้อผิดพลาดหรือวิธีการไหนที่ดีกว่านี้และง่ายกว่านี้ผมต้องขออภัยด้วยนะครับ เพราะไม่ใช่มืออาชีพสักเท่าไหร่ครับ










โพสต์นี้ได้รับคำขอบคุณจาก: Ongart

หน้า: [1]