سؤال

الآن لقد رأيت هذا السؤال في منتدى آخر ولكن ذلك لم يكن جوابا مقبولا.

لنفترض أن لدي اثنين من الجداول جدول مجموعات وعناصر الجدول.الجداول لا يعرف العلاقات.عناصر الجدول يحتوي على IdGroup الحقل الذي يشير إلى IdGroup (PK) مجال مجموعات الجدول.

أنا استخدم الاستعلام التالي من خلال مجموعة سجلات ADO إلى تعبئة الجداول القيم datagrid:

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

من أن الشبكة أريد أن اضغط Delete من أجل حذف عنصر.هنا هو بلدي المشكلة.عندما تستخدم DAO, DAO حذف() وظيفة حذف فقط سجل في عناصر الفريق.هذا هو السلوك المتوقع.

عندما تغير إلى اللغط ، حذف() وظيفة حذف السجلات في كلا الجدولين عنصر سجل الفريق وهو عنصر ينتمي!

هل هناك أي طريقة لإعادة إنتاج داو السلوك في اللغط دون الحاجة إلى تحديد العلاقات في الجداول ؟

ملاحظة:أعرف أن هناك بدائل (تنفيذ حذف querys يمكن القيام بهذه المهمة).فقط تظهر لي طريقة للقيام بذلك في اللغط ، أو يقولون أنه لا يمكن القيام به.

هل كانت مفيدة؟

المحلول

إعادة كتابة الاستعلام إلى:

  • محل INNER JOIN مع جملة WHERE تتكون من موجود ؛
  • استخدام استعلام فرعي في تحديد شرط إرجاع قيمة من المجموعات.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 من OLEDB Microsoft التحكم Datagrid (MSDATGRD.OCX) ثم حذف الصف عبر تقلد (أفترض كنت تفعل شيئا من هذا القبيل) و الصف هو في الواقع حذفها من عناصر الجدول فقط (أيالصف في مجموعات لا يزال اعيد).

ملاحظة المنقحة الاستعلام قد يكون لها تأثير سلبي على الأداء عند جلب الصفوف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top