การลบแถวในตารางที่รวมโดยใช้ ADO

ตอนนี้ฉันได้เห็นคำถามนี้ใน ฟอรัมอื่น แต่ มันไม่มีคำตอบที่ยอมรับได้

สมมติว่าฉันมีสองตาราง ตารางกลุ่มและตารางองค์ประกอบ ตารางไม่มีความสัมพันธ์ที่กำหนดไว้ ตารางองค์ประกอบมีฟิลด์ IdGroup ที่อ้างอิงถึงฟิลด์ IdGroup (PK) ของตาราง Groups

ฉันใช้แบบสอบถามต่อไปนี้ผ่านชุดระเบียน ADO เพื่อเติมค่าตารางลงใน DataGrid:

SELECT Elements.*, Groups.GroupName
FROM Elements
INNER JOIN Groups ON Elements.IdGroup = Groups.IdGroup

จากตารางนั้น ฉันต้องการกด Delete เพื่อลบองค์ประกอบ นี่คือปัญหาของฉัน เมื่อฉันใช้ DAO ฟังก์ชัน DAO Delete() จะลบเฉพาะบันทึกในกลุ่มองค์ประกอบ นี่คือลักษณะการทำงานที่คาดหวัง

เมื่อฉันเปลี่ยนเป็น ADO ฟังก์ชัน Delete() จะลบบันทึกในทั้งสองตาราง บันทึกองค์ประกอบ และกลุ่มที่มีองค์ประกอบนั้นอยู่!

มีวิธีใดในการสร้างพฤติกรรม DAO ใน ADO โดยไม่ต้องกำหนดความสัมพันธ์ลงในตารางหรือไม่

หมายเหตุ: ฉันรู้ว่ามีทางเลือกอื่น (การดำเนินการค้นหา DELETE สามารถทำงานได้) เพียงแสดงวิธีการทำเช่นนี้ใน ADO หรือบอกว่าไม่สามารถทำได้


person djeidot    schedule 18.09.2008    source แหล่งที่มา


คำตอบ (1)


เขียนคำค้นหาของคุณใหม่เป็น:

  • แทนที่ INNER JOIN ด้วยส่วนคำสั่ง WHERE ที่ประกอบด้วย EXISTS
  • ใช้แบบสอบถามย่อยในส่วนคำสั่ง SELECT เพื่อส่งคืนค่าของ Groups.GroupName

ตัวอย่าง:

SELECT Elements.*, 
       (
        SELECT Groups.GroupName
          FROM Groups 
         WHERE Elements.IdGroup = Groups.IdGroup
       )
  FROM Elements
 WHERE EXISTS (
               SELECT * 
                 FROM Groups 
                WHERE Elements.IdGroup = Groups.IdGroup
              );

ฉันได้ทดสอบสิ่งนี้โดยใช้ SQL Server 2008 ด้วยชุดระเบียน ADO ที่ตั้งค่าเป็นคุณสมบัติ DataSource ของ Microsoft OLEDB Datagrid Control (MSDATGRD.OCX) จากนั้นลบแถวผ่าน gird (ฉันถือว่าคุณกำลังทำสิ่งที่คล้ายกัน) และแถวนั้นแน่นอน ลบออกจากองค์ประกอบตารางเท่านั้น (เช่น แถวในกลุ่มยังคงไม่ถูกลบ)

โปรดทราบว่าแบบสอบถามที่แก้ไขอาจส่งผลเสียต่อประสิทธิภาพการทำงานเมื่อดึงข้อมูลแถว

person onedaywhen    schedule 08.01.2009