مجموعة السجلات إضافة و تحديث و حذف السجلات (ODBC)

هذا الموضوع يُطبق على فئات MFC ODBC.

ملاحظة

يمكنك الآن إضافة سجلات فى تجمع بشكل أكثر كفاءة. للحصول على مزيد من المعلومات، راجع مجموعة السجلات. إضافة سجلات في تجمع (MFC) (ODBC)

ملاحظة

يطبق هذا الموضوع على الكائنات المشتقة من CRecordset حيث لم يتم تنفيذ "إحضار صفوف كبيرة الحجم". إذا كنت تستخدم إحضار صفوف كبيرة الحجم ، راجع Recordset: ‎جلب سجلات في تجمع (ODBC)

اللقطات القابلة للتحديث و المجموعات الحيوية تسمح لك يإضافة ، تحرير (تحديث) و حذف السجلات. هذا الموضوع يوضح :

  • كيفية تحديد ما إذا كانت مجموعة السجلات لديك قابلة للتحديث.

  • كيفية إضافة سجل جديد .

  • كيفية تحرير سجل موجود.

  • كيفية حذف سجل

للحصول على مزيد من المعلومات حول كيفية تنفيذ تحديثات و كيفية ظهور التحديثات للمستخدمين الآخرين ، راجع Recordset: كيف تقوم مجموعات السجلات بتحديث سجلات (ODBC) عادةً, عندما تقوم بإضافة أو تحرير أو حذف سجل ، تغير مجموعة السجلات مصدر البيانات مباشرة. يمكنك بدلاً من ذلك دفع مجموعات من التحديثات ذات الصلة إلى المعاملات. إذا كانت المعاملة قيد التقدم ، التحديث لن يصبح نهائياً حتى تنفيذ المعاملة. يسمح لك هذا باسترجاع التغييرات أو إعادتها للحالة السابقة. للحصول على المزيد من المعلومات حول المعامَلات ، راجع المعامَلات (ODBC).

يلخص الجدول التالي الخيارات المتاحة لمجموعات السجلات بصفات تحديث مختلفة.

خيارات قراءة/كتابة لمجموعة سجلات

Type

قراءة

تحرير سجل

حذف سجل

إضافة جديد (append)

للقراءة فقط

نعم

لا

لا

لا

إلحاق فقط

نعم

لا

لا

نعم

قابل للتحديث بشكل كامل

نعم

نعم

نعم

نعم

تحديد ما إذا كانت مجموعة السجلات الخاصة بك قابلة للتحديث

كائن مجموعة السجلات قابل للتحديث إذا كان مصدر البيانات قابل للتحديث و قمت بفتح مجموعة السجلات كقابلة للتحديث. وتعتمد أيضاً قابليته للتحديث على عبارة SQL التي تستخدمها ، قدرات برنامج تشغيل ODBC ، و ما إذا كان مكتبة رأس مؤشر ODBC في الذاكرة. لا يمكن تحديث مجموعة سجلات أو مصدر بيانات للقراءة فقط .

لتحديد ما إذا كان لديك مجموعة سجلات قابلة للتحديث.

  • قم باستدعاء دالة العضو CanUpdate لكائن مجموعة السجلات.

    تقوم CanUpdate بإرجاع قيمة غير صفرية إذا كانت مجموعة السجلات قابلة للتحديث.

افتراضياً، تكون مجموعات السجلات قابلة للتحديث بشكل كامل (يمكنك تنفيذ عمليات AddNew ، Editو ‎Delete ). ولكن يمكنك أيضاً استخدام الخيار appendOnly لفتح مجموعات السجلات القابلة للتحديث. مجموعة السجلات المفتوحة بهذه الطريقة تسمح فقط بإضافة سجلات جديدة مع AddNew. لا يمكنك تحرير سجلات موجودة أو حذفها. يمكنك اختبار ما إذا كانت مجموعة السجلات هو مفتوحة لإلحاق بواسطة استدعاء دالة العضو CanAppend فقط. CanAppendبإرجاع القيمة غير صفرية في حالة مجموعة السجلات هو كامل قابل للتحديث أو مفتوحة لإلحاق فقط.

تظهر التعليمات البرمجية التالية كيف يمكنك استخدام CanUpdate لكائن مجموعة سجلات يدعى rsStudentSet:

if( !rsStudentSet.Open( ) )
    return FALSE;
if( !rsStudentSet.CanUpdate( ) )
{
    AfxMessageBox( "Unable to update the Student recordset." );
    return;
}
ملاحظة تنبيهتنبيه

عند التحضير لتحديث مجموعة سجلات عن طريق استدعاء ‎Update ، انتبه أن مجموعة السجلات الخاصة بك تتضمن كافة الأعمدة التي تكوّن المفتاح الأساسي من الجدول (أو كافة الأعمدة ذات الفهرس الفريد في الجدول). في بعض الحالات، يمكن أن ستخدم إطار العمل الأعمدة المحددة في مجموعة السجلات الخاصة بك لتحديد أي سجل في الجدول الخاص بك سيتم تحديثه. بدون كافة الأعمدة الضرورية , يكمن أن يتم تحديث سجلات متعددة في الجدول ، مما قد يتلف التكامل المرجعي للجدول. في هذه الحالة، يطرح إطار العمل استثناءات عند استدعاء ‎Update .

إضافة سجلات إلي مجموعة سجلات

يمكنك إضافة سجلات جديدة إلى مجموعة سجلات إذا كانت دالة العضو CanAppend الخاصة بها تقوم بإرجاع قيمة غير صفرية.

لإضافة سجلات جديدة الى مجموعة سجلات.

  1. تأكد من أن مجموعة السجلات قابلة للإلحاق.

  2. قم بإستدعاء دالة العضو AddNew لكائن مجموعة السجلات .

    تقوم AddNew بتحضير مجموعة السجلات لتقوم بدور مخزن التحرير المؤقت. كافة إعضاء بيانات الحقل يتم تعيينها للقيمة الخاصة Null ويتم وضع علامة عليه أن لم يتغير بحيث يتم كتابة القيم التي تم تغييرها (السيئة) إلى مصدر البيانات عند استدعاء ‎Update.

  3. قم بتعيين القيم لإعضاء بيانات حقل السجل الجديد .

    عين قيماً إلى أعضاء بيانات الحقل . لا يتم كتابة تلك التي لم تعين لها قيمة إلى مصدر البيانات.

  4. قم باستدعاء دالة العضو Update لكائن مجموعة السجلات.

    تكمل Update الإضافة عن طريق كتابة سجل جديد إلى مصدر البيانات. للحصول على معلومات حول ما يحدث إذا فشلت في استدعاء Update, راجع Recordset: كيف تقوم مجموعات السجلات بتحديث سجلات (ODBC)

للحصول على معلومات حول كيفية عمل إضافة السجلات و حول الوقت الذى تكون فيه السجلات المضافة مرئية في مجموعة السجلات الخاصة بك، راجع : كيفية عمل AddNew (اضافة جديد) و Edit (تحرير) و Delete (مسح) (ODBC)

المثال التالي يوضح كيفية إضافة سجل جديد:

if( !rsStudent.Open( ) )
    return FALSE;
if( !rsStudent.CanAppend( ) )
    return FALSE;                      // no field values were set
rsStudent.AddNew( );
rsStudent.m_strName = strName;
rsStudent.m_strCity = strCity;
rsStudent.m_strStreet = strStreet;
if( !rsStudent.Update( ) )
{
    AfxMessageBox( "Record not added; no field values were set." );
    return FALSE;
}
تلميحتلميح

لإلغاء إستدعاء AddNew أو Edit ، ببساطة قم بإستدعاء آخر لـ AddNew أو Edit أو إستدع Move‎ مع المعلمة AFX_MOVE_REFRESH. يتم إعادة تعيين أعضاء البيانات إلى القيم السابقة الخاصة بهم وانت لازلت في وضع Add أو Edit .

تحرير سجل في مجموعة سجلات

يمكنك تحرير سجلات موجودة إذا كانت دالة العضو CanUpdate لمجموعة السجلات الخاصة بك تقوم بإرجاع قيمة غير صفرية.

لتحرير سجل موجود في مجموعة سجلات

  1. تأكد من أن مجموعة السجلات قابلة للتحديث.

  2. مرر إلى السجل الذي تريد تحديثه.

  3. قم باستدعاء دالة العضو Edit لكائن مجموعة السجلات.

    تقوم Edit‎ بتحضير مجموعة السجلات لتقوم بدور مخزن التحرير المؤقت. كافة أعضاء بيانات الحقل يتم تمييزها بحيث يمكن لمجموعة السجلات أن تخبر لاحقاً ما إذا كان تم تغييرها. القيم الجديدة لأعضاء بيانات الحقل التي تم تغييرها يتم كتابتها إلى مصدر البيانات عند استدعاء ال‎Update.

  4. قم بتعيين القيم لإعضاء بيانات حقل السجل الجديد .

    عين قيماً إلى أعضاء بيانات الحقل . تلك القيم التي لم تعينها تبقى بدون تغيير.

  5. قم باستدعاء دالة العضو Update لكائن مجموعة السجلات.

    تكمل Update التحرير عن طريق كتابة السجل الذي تم تغييره إلى مصدر البيانات. للحصول على معلومات حول ما يحدث إذا فشلت في استدعاء Update, راجع Recordset: كيف تقوم مجموعات السجلات بتحديث سجلات (ODBC)

بعد تحرير سجل ، يبقى السجل المحرر هو السجل الحالي.

يظهر المثال التالي عملية Edit . يفترض أن المستخدم قام بالإنتقال إلي سجل يريد تحريره.

rsStudent.Edit( );
rsStudent.m_strStreet = strNewStreet;
rsStudent.m_strCity = strNewCity;
rsStudent.m_strState = strNewState;
rsStudent.m_strPostalCode = strNewPostalCode;
if( !rsStudent.Update( ) )
{
    AfxMessageBox( "Record not updated; no field values were set." );
    return FALSE;
}
تلميحتلميح

لإلغاء إستدعاء AddNew أو Edit ، ببساطة قم بإستدعاء آخر لـ AddNew أو Edit أو إستدع Move‎ مع المعلمة AFX_MOVE_REFRESH. يتم إعادة تعيين أعضاء البيانات إلى القيم السابقة الخاصة بهم وانت لازلت في وضع Add أو Edit .

حذف سجل من مجموعة سجلات

يمكنك حذف سجلات إذا كانت دالة العضو CanUpdate لمجموعة السجلات الخاصة بك تقوم بإرجاع قيمة غير صفرية.

لحذف سجل

  1. تأكد من أن مجموعة السجلات قابلة للتحديث.

  2. مرر إلى السجل الذي تريد تحديثه.

  3. قم باستدعاء دالة العضو Delete لكائن مجموعة السجلات.

    تقوم ‎Delete فوراً بوضع علامات علي السجل كمحذوف، في كل من مجموعة السجلات و مصدر البيانات.

    بعكس AddNew و Edit، Deleteا ليس لها إستدعاء ‎Update مطابق.

  4. قم بالتمرير إلي سجل آخر.

    ملاحظة

    عند التنقل عبر مجموعة السجلات ، الصفوف المحذوفة قد لا يتم تخطيها. لمزيد من المعلومات، راجع دالة العضو IsDeleted.

يعرض المثال التالي عملية حذف. يفترض أن المستخدم قد قام بالإنتقال إلي السجل الذي يريد حذفه. بعد إستدعاء ‎Delete ، من المهم الإنتقال إلي سجل جديد.

rsStudent.Delete( );
rsStudent.MoveNext( );

للحصول على مزيد من المعلومات حول التأثيرات الخاصة لدالات الإعضاء AddNew ، Edit و ‎Delete ، راجع Recordset: كيف تقوم مجموعات السجلات بتحديث سجلات (ODBC)

راجع أيضًا:

المبادئ

مجموعة السجلات (ODBC)

مجموعة السجلات تأمين السجلات (ODBC)