ลบข้อมูลในตาราง Subform
กระทู้เก่าบอร์ด อ.Yeadram

 6,056   11
URL.หัวข้อ / URL
ลบข้อมูลในตาราง Subform

ถามเรื่องการเขียนCode vb ปุ่มคำสั่ง Delete เพื่อลบข้อมูลในฟอร์มที่ link กับ Subform อยากให้ลบในตารางของ Subform ด้วยต้องทำอย่างไรครับ

11 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R03163
currentproject.connection.execute "Delete From table2 where ........."
me.child1.form.requery
2 @R03232
ลองเขียนแล้วไม่ได้ครับ งง
3 @R03251
subform ของคุณ มีแหล่งข้อมูลมาจากไหน
ถ้าเป็นตาราง ชื่อตารางอะไร และ subform นี้ใช้ฟิลด์ไหนผูกกับฟอร์มหลัก

ถ้าเป็นคิวรี่ sql มันเป็นอย่างไร ขอดูหน่อยครับ แล้วใช้ฟิลด์ไหนผูกกับตารางหลัก

เราจะสั่งให้มันเขียน statement เพื่อรัน ให้มันลบข้อมูลที่เกี่ยวข้องกับฟอร์มย่อยก่อน
แล้วค่อยสั่งลบข้อมูลเรคคอร์ดนี้ ของฟอร์มหลัก

ปัญหาคือ ในฟอร์มย่อยของคุณมีโครงสร้าง มีแหล่งข้อมูลเป็นอย่างไร ถ้าไม่รู้สิ่งเหล่านั้น เราก็เขียน statement ได้ไม่ถูกต้อง

ผมตอบไปครั้งแรก นึกว่าคุณจะสามารถเอาไปดัดแปลงต่อได้ แต่ถ้าบอกว่า งง ก็คงต้องเริ่มกันใหม่ ช้าๆ ครับ

เวลาถามปัญหาไม่ต้องถามสั้นขนาดนั้นครับ เพราะคนตอบไม่รู้ว่า จะบอกคุณละเอียดมากน้อยแค่ไหนคุณถึงจะเข้าใจ เพราะเราเดาไม่ได้ว่าคุณรู้อะไรแล้วบ้าง จากคำถามของคุณ ใครล่ะจะแน่ใจว่า ไม่ได้เอามะพร้าวห้าวไปขายสวน
4 @R03327
เรียน คุณมือใหม่ VB
ผมขอตอบคำถามของคุณดังนี้ครับ

ปกติเวลาเราสร้างฟอร์ม โดยมีลักษณะฟอร์มหลัก กับ ฟอร์มย่อย หรือที่เรียกว่า Subform นั้น ปกติถ้าเราดูที่โครงสร้างของแหล่งข้อมูล จะเกิดจากตารางที่มีความสัมพันธ์ซึ่งกันและกันเสมอ

กรณีที่เราลบรายการข้อมูลใน ฟอร์มหลัก โดยทั่วไป ข้อมูลในฟอร์มย่อย ก็จะถูกลบตามไปด้วย โดยอาศัยการตรวจสอบความสอดคล้องกันของข้อมูลระหว่าง 2 ตารางที่มีความสัมพันธ์ซึ่งกันและกัน (Referential Integrity) เราสามารถอาศัยคุณสมบัตินี้ โดยการเลือก Cascade Delete Relate Record ในความสัมพันธ์ระหว่าง 2 ตาราง เวลาคุณลบข้อมูลของฟอร์มหลัก ข้อมูลของฟอร์มย่อยก็จะถูกลบตามไปด้วยครับ
5 @R03330
ผมมีข้อมูลจาก 2 ตารางดังนี้ครับ
ตารางที่ 1
1.1CodeID**
1.2Product
1.3UnitCount
1.4Weight

ตารางที่ 2
2.1CodeID**
2.2Cust
2.3Price
2.4Total
**ใช้CodeID เป็น Relationship ครับ

ผมใช้ตารางที่ 2 เป็น Subform ครับถ้าผมลบข้อมูลในตาราง 1 แล้วอยากให้ข้อมูลในตารางที่ 2 ลบไปด้วยต้องทำเยี่ยงไรครับอาจารย์และท่านผู้รู้ขอCodeคำสั่งด้วยครับ
6 @R03332


-ตั้งค่าความสัมพันธ์ให้ได้ดังรูป (สังเกตบริเวณ วงสีแดง)
-เมื่อมีการลบเรคคอร์ดในฟอร์มหลัก ข้อมูลในฟอร์มย่อยจะถูกลบให้โดยอัตโนมัติครับ ไม่ต้องเขียนโค้ดเพิ่มเติมใดๆ ครับ
7 @R03408
ทำแล้วมันมีข้อความขึ้นว่า"No unique index found for the referenced field of the primary table.!"หมายถึงอะไรครับ
8 @R03409
1 ตารางฝั่ง one (ฝั่งซ้ายมือตามรูป) จำเป็นต้องมี Primary key
2 ตารางฝั่ง many (ฝั่งขวามือดังรูป) จะมีหรือไม่มี primary ก็ได้ (แต่ก็ควรจะมี)
3 ฟิลด์ที่จะใช้เป็น relation กันในลักษณะ one-to-many ต้อง
    - ฝั่ง one ต้องเป็น primary
    - ฝั่ง many ห้ามเป็น primary

พอผมเขียนโพสต์นี้ ผมได้ย้อนไปดู ข้อความของคุณก่อนหน้านี้ R03330 เท่าที่เดาๆ โครงสร้าง ผมว่าคุณน่าจะออกแบบไม่เหมาะสม
ตารางสองตารางนี้ ทำหน้าที่อะไรกันบ้าง ทำหน้าที่ซ้ำซ้อนกันหรือเปล่า
ตามหลักการของ "การจัดการ" ไม่ว่าจะเป็นการจัดการฐานข้อมูล หรือจะจัดการอะไรก็ตาม) เรากำลังพยามลดความซ้ำซ้อน เพื่ออำนวยความสะดวกให้ความซับซ้อน กล่าวคือ แม้งานจะซับซ้อน แต่เราจะลำดับมัน, แยกกลุ่มมัน, หาความสัมพันธ์มัน เพื่อให้ความซับซ้อนได้ดำเนินไปอย่างเป็นระบบ
    ระบบงานมันต้องมีความซับซ้อนแน่นอนครับ ถ้าไม่ซับซ้อนแนะนำให้ไปใช้ word หรือ excel จะคล่องกว่า เราออกแบบฐานข้อมูล ไม่ได้หมายถึงขจัดความซับซ้อน แต่หมายถึง การจัดการ สิ่งต่างๆ ที่ซับซ้อนเหล่านั้นให้เป็นระบบ ซึ่งการจัดการที่ดี คือ ลดความซ้ำซ้อน ออกไปเป็นอันดับแรกครับ
    ไม่งง นะครับ
     เท่าที่ดู ชื่อฟิลด์ของคุณ เหมือนๆ กับว่า สองตารางนี้ มันทำหน้าที่ซ้ำซ้อนกันหรือเปล่าครับ

- ลองยกตัวอย่าง ข้อมูลดิบ ที่คุณมีในตารางที่ 1 มาสัก 5 รายการ (ทุกฟิลด์)
- ลองยกตัวอย่าง ข้อมูลดับ ในตาราง ที่ 2 มาสัก 5 รายการ (ทุกฟิลด์) ให้ดูได้ไหมครับ
- ลองจับภาพ ความสัมพันธ์ ระหว่างสองตารางนี้ ที่คุณทำไว้ (ภาพเหมือนกับที่ผมทำ) ให้ดูได้ไหมครับ อาจจะบอกได้ว่า ปัญหาของคุณอยู่ที่อะไร
9 @R03424
ผมทำได้แล้วครับ เหมือนที่อาจารย์ yeadram บอกพอดีผมทำ primary key ซ้ำกันตอนออกแบบ relation ตอนนี้สามารถลบได้แล้วครับ ขอบพระคุณทุกท่านที่ช่วยเหลือมือใหม่ครับ
10 @R12482
เรียน อาจารย์ yeadram

        ขอรบกวนด้วยค่ะ Delete Record ใน Subform แล้วมันไม่ตรงตามที่เราเลือก มันกลับไป delete record แรกสุดเสมอ

        ดิฉันมี 2 ตาราง ชื่อว่า KPI Question และ KPI Answer ให้ field Item เป็น text ค่ะ ซึ่งทั้ง 2 ตารางนี้ มี field เดียวกันคือ Item
        - KPI Question.Item --> Primary Key
        - KPI Answer.Item --> Index เป็น Yes (No Duplicates)
        ปัญหามีอยู่ว่า ดิฉันสร้าง form ขึ้นมา 1 form ชื่อว่า Main และภายในฟอร์ม Main จะมี Subform ด้วย ในฟอร์ม Main จะมี Item ที่สร้างเป็น Combo Box ให้ drop down list ค่ะ เวลาที่ drop down แล้วจะแสดงข้อมูลใน Subform ทั้งหมด ซึ่งทำได้แล้ว แต่เวลา delete มันกลับ delete record แรกสุดค่ะ ไม่ delete record ที่เรา drop down
        ตัวอย่างเช่น ใน Combo ของ Item ดิฉัน click เลือก 005 มันก็จะดึงข้อมูลของ Subform ออกมาถูกต้อง แล้วดิฉันก็สร้างปุ่ม Delete ตามวิธีการ one-to-many มันก็ delete record ทั้ง KPI Question และ KPI Answer ค่ะ (เกือบถูก) แต่ผิดเนื่องจากว่า มันไปลบ record แรกสุดคือ Item ที่ 001 ค่ะ ไม่ว่าจะเลือก delete record ใดก็ตาม มันก็ไป delete record แรกสุดอีก จนปัญญาค่ะ ขอรบกวนด้วยเถอะค่ะ ขอบคุณอาจารย์มาก ๆ ค่ะ
11 @R12486
ในปุ่มคำสั่ง delete record
ต้องใส่เงื่อนไขในการลบด้วยครับ
เขียนคำสั่งเองหรือว่าใช้ วิซาร์ดช่วยสร้างปุ่มครับ

ถ้าเขียนคำสั่งเอง ขอดูคำสั่งหน่อยครับ

ถ้าใช้วิซาร์ดช่วยสร้าง ถามเพิ่มครับ
- ฟอร์มหลักดึงข้อมูลจากตารางชื่ออะไร
- คอมโบที่เลื่อก item ในฟอร์มหลักชื่ออะไร
- คอมโบดังกล่าวใช้ control source คืออะไร ชื่ออะไร (ไม่ใช่ row source นะ คนละอันกัน)
- เมื่อมีการเลือกคอมโบ แล้วฟอร์มย่อยเปลี่ยนแปลงตาม อันนี้ใช้วิซาร์ดช่วยสร้างหรือเขียนคำสั่งเอง
- ฟอร์มหลักกับฟอร์มย่อย มีการใช้ link child field หรือเปล่า ใช้ฟิลด์อะไรเป็นตัวลิงค์
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3129s