مجموعة السجلات كيفية اضافة جديد و تحرير ومسح العمل (ODBC)

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

يشرح هذا المقال كيفية عمل دوال العضو AddNew ، Edit‎ و Delete الخاصة بالفئة CRecordset. تتضمن المواضيع المغطاة:

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

  • إمكانية رؤية السجلات المضافة

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

  • كيفية عمل حذف السجلات

ملاحظة

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

كإضافة ، قد تحتاج لقراءة تبادل حقل السجل: كيف تعمل RFX ، الذي يصف الدور المطابق لـ RFX في عمليات التحديث.

إضافة سجل

إضافة سجل جديد إلى مجموعة سجلات تتضمن استدعاء دالة العضو AddNew الخاصة بمجموعة السجلات لتعيين قيم أعضاء بيانات حقل السجل الجديد و استدعاء دالة العضو Update‎ لكتاب السجل إلى مصدر البيانات.

كشرط مسبق لاستدعاء AddNew ، مجموعة السجلات يجب ألا يكون قد تم فتحها كـ"للقراءة فقط". دالات العضو CanUpdate و CanAppend تتيح لك تحديد هذه الشروط.

عند استدعاء AddNew:

  • السجل الموجود فى مخزن التحرير المؤقت يتم تخزينه ، بحيث يمكن استعادة محتوياته إذا تم إلغاء العملية.

  • أعضاء بيانات الحقل يتم وضع علامة عليها بحيث يكون من الممكن الكشف عن التغييرات بها لاحقاً. أعضاء بيانات الحقل تم تعليمها أيضاً بانها نظيفة (بدون تغيير) وتعيينها إلى قيمة خالية Null.

بعد استدعاء AddNew ، يمثل مخزن التحرير المؤقت سجلا جديدا وفارغا, جاهزا لتعبئته بالقيم. للقيام بذلك قم بتعيين القيم يدوياً عن طريق التعيين إليها. بدلاً من تحديد قيمة البيانات الفعلية لحقل ، يمكنك استدعاء SetFieldNull لتحديدها إلى قيمة خالية.

لتنفيذ التغييرات الخاصة بك ، استدع Update‎. عند استدعاء Update‎ للسجل الجديد:

  • إذا كان برنامج تشغيل ODBC يعتمد دالة ODBC API؛:: SQLSetPos ، يستخدم MFC الدالة لإضافة السجل على مصدر البيانات. مع :: SQLSetPos، يمكن لـ MFC إضافة سجل بشكل أكثر كفاءة لأنه لا يلزمه بناء جملة SQL ومعالجتها.

  • إذا لم يمكن استخدام :: SQLSetPos، تقوم MFC بما يلي:

    1. إذا تم الكشف عن أية تغييرات , Update لا تقوم بأي شيء وتقوم بإرجاع 0.

    2. إذا كانت هناك تغييرات , تقومUpdate‎بإنشاء عبارة SQL INSERT. الأعمدة الممثلة بكافة بيانات الحقل الفاسدة يتم سردها في الجملةINSERT
. لفرض تضمين عمود، قم باستدعاء دالة العضو SetFieldDirty :

      SetFieldDirty( &m_dataMember, TRUE );
      
    3. Update‎ تُنفذ السجل الجديد —العبارة INSERT يتم تنفيذها و يلزم السجلُ الجدولَ على مصدر البيانات (و مجموعة السجلات إن لم تكن لقطة) إلا إذا كانت معاملةٌ قيد العمل.

    4. السجل المخزن يتم استعادته إلى مخزن التحرير المؤقت . السجل الذي كان هو الحالى قبل استدعاء AddNew يكون هو الحالي مرة أخرى بغض النظر عما إذا تم تنفيذ عبارة INSERT بنجاح.

    تلميحتلميح

    للحصول على التحكم الكامل فى السجل الجديد، اسلك الطرق التالية: تعيين قيم الحقول التي سوف تحتوي على قيم ثم قم بشكل صريح بتعيين أية حقول ستبقى Null عن طريق استدعاء SetFieldNull بواسطة مؤشر الحقل والمعلمة صحيح (True) (الافتراضي) . إذا كنت ترغب في التأكد من أن الحقل لم تتم كتابته إلى مصدر بيانات، استدع SetFieldDirtyبواسطة مؤشر إلى الحقل والمعلمةFALSE، و لا تقم بتعديل قيمة الحقل. لتحديد ما إذا كان الحقل مسموحاً له بان يكون Null ، استدع IsFieldNullable.

    تلميحتلميح

    عند اكتشاف متى قامت أعضاء بيانات مجموعة السجلات بتغيير القيمة، MFC يستخدم قيمة PSEUDO_NULL المناسبة لكل نوع من أنواع البيانات التي يمكن تخزينها في مجموعة سجلات. إذا كان يجب عليك بشكل صريح تعيين حقل لقيمة PSEUDO_NULL والحقل بالفعل قد تم وضع علامة Null عليه من قبل، يجب أيضاً استدعاء SetFieldNull ،و تمرير عنوان الحقل في المعلمة الأولى و FALSE في المعلمة الثانية.

إمكانية رؤية السجلات المضافة

متى يكون السجل المضاف مرئياً لمجموعة السجلات الخاصة بك ؟ تظهر أحياناً السجلات المضافة ثم أحياناً تكون غير مرئية, اعتماداً على شيئين:

  • ما يكون برنامج التشغيل الخاص بك قادراً عليه.

  • ماذا الذي يمكن لإطار العمل الاستفادة منه.

إذا كان برنامج تشغيل ODBC يدعم دالة ODBC API؛ :: SQLSetPos ، يستخدم MFC دالة لإضافة سجلات. بواسطة :: SQLSetPos , السجلات المضافة تكون مرئية لأي مجموعة سجلات MFC قابلة للتحديث. بدون دعم للدالات, السجلات المضافة تكون غير مرئية و يجب استدعاء Requery لمشاهدتها. استخدام :: SQLSetPos هو أيضاً أكثر فعالية.

تحرير سجل الموجود

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

كشرط مسبق لاستدعاء Edit ، يجب أن تكون مجموعة السجلات قابلة للتحديث وعلى سجل. دالات العضو CanUpdate و IsDeleted تتيح لك تحديد هذه الشروط. السجل الحالى أيضاً يجب ألا يكون تم حذفه مسبقاً و يجب أن يكون هناك سجلات في مجموعة السجلات (كلا من IsBOF و IsEOF تقوم بإرجاع 0).

عند استدعاء Edit‎ ، السجل الموجود في مخزن التحرير المؤقت ( السجل المؤقت) يتم تخزينه. يتم استخدام قيم السجل المخزنة لاحقاً للكشف عن ما إذا كان قد تم تغيير أية حقول.

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

تلميحتلميح

للانتقال من وضع AddNew أو Edit‎, استدع Edit‎ مع المعلمة AFX_MOVE_REFRESH .

كشرط مسبق لاستدعاء Update‎ ، يجب أن تكون مجموعة السجلات غير فارغة و السجل الحالي يجب ألا يكون تم حذفه. IsBOF ،IsEOF ، وIsDeleted يجب عليهم كافة إرجاع 0.

عند استدعاء Update‎ للسجل الذى تم تحريره:

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

    -أو-

  • إذا لم يمكن استخدام :: SQLSetPos، تقوم MFC بما يلي:

    1. إذا لم يكن هناك أية تغييرات, لا تقوم Update‎ بأي شيء وتقوم بإرجاع 0.

    2. إذا كانت هناك تغييرات, تقومUpdate‎بإنشاء عبارة SQL UPDATE‎
. الأعمدة المسرودة في العبارة UPDATE تستند إلى أعضاء بيانات الحقل التي تم تغييرها.

    3. تنفذ Update‎ التغييرات — تنفذ عبارة UPDATE — و يتم تغيير السجل على مصدر البيانات، ولكن لا ينفذ إذا كانت المعاملة قيد التنفيذ (راجع المعاملات: تنفيذ معاملة في مجموعة سجلات ـ(ODBC) لمعلومات حول كيفية تأثير المعاملة على التحديث). يحتفظ ODBC بنسخة من السجل الذي يتغير أيضاً.

    4. بعكس العملية AddNew ، عملية Edit لا تستعيد السجل المخزن . السجل المحرر يبقى في مكانه كالسجل الحالى.

    ملاحظة تنبيهتنبيه

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

    تلميحتلميح

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

حذف سجل

حذف سجل من مجموعة سجلات يتضمن التمرير إلى السجل و استدعاء دالة العضو Delete‎ الخاصة بمجموعة السجلات . بعكس AddNew و Edit‎، لا تتطلب Delete استدعاء مطابق لـ Update‎.

كشرط مسبق لاستدعاء Delete ، يجب أن تكون مجموعة السجلات للتحديث كما يجب أن تكون على سجل. دالات عضوCanUpdateIsBOFIsEOFوIsDeletedتتيح لك تحديد هذه الشروط..

عند استدعاء Delete :

  • إذا كان برنامج تشغيل ODBC يدعم دالة ODBC API :: SQLSetPos ، يستخدم MFC دالة لإضافة السجل إلى مصدر البيانات. استخدام :: SQLSetPos عادة ما يكون أكثر كفاءة من استخدام SQL.

    -أو-

  • إذا لم يمكن استخدام :: SQLSetPos، تقوم MFC بما يلي:

    1. السجل الحالى في مخزن التحرير المؤقت لا يتم نسخه احتياطياً كما في AddNew و Edit.

    2. تقوم Delete بإنشاء عبارة SQL DELETE التي تزيل السجل.

      السجل الحالى في مخزن التحرير المؤقت لا يتم تخزينه كما في AddNew و Edit.

    3. Delete تنفذ الحذف — تنفذ عبارة DELETE. يتم وضع علامة على السجل أنه حذف على مصدر البيانات، و على ODBC إذا كان السجل لقطة.

    4. قيم السجل المحذوف مازالت في أعضاء بيانات الحقل لمجموعة السجلات، و لكن يتم وضع علامة Null على أعضاء البيانات الحقل و دالة العضو IsDeleted الخاصة بمجموعة السجلات تقوم بإرجاع قيمة غير صفرية.

    ملاحظة

    بعد حذف سجل ، يجب التمرير إلى سجل آخر لإعادة ملء مخزن التحرير المؤقت ببيانات السجل الجديد. من الخطأ استدعاء Delete مرة أخرى أو استدعاء Edit.

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

راجع أيضًا:

المبادئ

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

مجموعة السجلات المزيد حول التحديثات (ODBC)

تبادل حقل السجل (RFX):