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

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

هذا الموضوع يوضح :

  • كيفية تؤثر عمليات أخرى مثل المعاملات على تحديثات.

  • التحديثات الخاصة بك و تلك الخاصة بالمستخدمين.

  • المزيد حول دالات الأعضاء Update (تحديث) و Delete (حذف).

ملاحظة

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

كيف تؤثر العمليات الأخرى على التحديثات

التحديثات الخاصة بك تتأثر فى الحقيقة بالمعاملات في وقت التحديث، بإغلاق مجموعة السجلات قبل إكمال معاملة و بالتمرير قبل إكمال معاملة.

كيف تؤثر العمليات على التحديثات (ODBC)

بعد التعرف على كيفية عمل AddNew و Edit‎ و Delete، من المهم فهم طريقة عمل دالات العضو BeginTrans و CommitTrans و Rollback و CDatabase مع دالات التحديث الخاصة بـ CRecordset.

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

لمزيد من المعلومات حول هذه الماملات, انظرعملية (ODBC).

كيف يؤثر إغلاق مجموعة السجلات على التحديثات

إذا قمت بإغلاق مجموعة سجلات أو الكائن CDatabase المقترن به، أثناء معاملة دائرة (لم تقم باستدعاء CDatabase::CommitTrans أو CDatabase:: أعضاء البيانات) ، يتم إرجاع المعاملة إلى الحالة السابقة تلقائياً (ما لم تكن خلفية قاعدة البيانات الخاصة بك هى مشغل قاعدة بيانات Microsoft Jet).

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

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

كيفية تأثير التمرير على التحديثات

عندما تقوم بـ مجموعة السجلات التمرير (ODBC) فى مجموعة سجلات، يتم تعبئة المخزن المؤقت للتحرير بكل سجل حالى جديد (السجل السابق غير مخزن أولاً). التمرير يتخطى السجلات التي تم حذفها مسبقاً. إذا قمت بالتمرير بعد استدعاء AddNew أو Edit‎ بدون استدعاء Update أو CommitTrans أو Rollback‎ أولاً, يتم فقدان أية تغييرات (بدون تحذير لك) بإحضار سجل جديد إلى المخزن المؤقت للتحرير. يتم تعبئة المخزن المؤقت للتحرير بالسجل الممرر إليه و يتم إطلاق السجل المخزن، و لا تغييرات تحدث على مصدر البيانات. تنطبق هذه المعلومات على كلٍ من AddNew و Edit‎ .

التحديثات الخاصة بك والتحديثات الخاصة بالمستخدمين الآخرين

عند استخدام مجموعة سجلات لتحديث البيانات، تؤثر التحديثات على المستخدمين الآخرين. وبالمثل، تحديثات المستخدمين الآخرين أثناء مدة حياة مجموعة السجلات الخاصة بك تؤثر علىك.

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

السجلات التي تمت إضافتها من قبل مستخدمين آخرين بعد فتح مجموعة السجلات لا تظهر في مجموعة السجلات الخاصة بك إلا إذا قمت بالاستعلام. إذا كانت مجموعة السجلات الخاصة بك مجموعة حيوية، التحريرات للسجلات الموجودة من قبل مستخدمين آخرين ستظهر في المجموعة الحيوية الخاصة بك عند التمرير إلى السجل المتأثر. إذا كانت مجموعة السجلات الخاصة بك هى لقطة، عمليات التحرير لا تظهر حتى إعادة الاستعلام عن اللقطة. إذا كنت تريد رؤية السجلات المضافة أو المحذوفة من قبل مستخدمين آخرين في اللقطة أو السجلات الخاصة بك التي تمت إضافتها من قبل مستخدمين آخرين في المجموعة الحيوية الخاصة بك، قم باستدعاء CRecordset::Requery لإعادة بناء مجموعة السجلات. (لاحظ أن العناصر المحذوفة من قبل المستخدمين الآخرين تظهر في المجموعة الحيوية الخاصة بك.) يمكنك أيضاً استدعاء Requery لرؤية السجلات التى تضيفها، ولكن ليس لرؤية ما حذفته.

تلميحتلميح

لفرض التخزين المؤقت للقطة كاملة فى الحال، استدع MoveLast فوراً بعد فتح اللقطة. Then يتصل MoveFirst إلى begin working مع the records. MoveLast هو equivalent إلى scrolling over الجميع the records, but it retrieves them الجميع at once. ومع ذلك، لاحظ أن هذا يمكن أن يخفض الأداء و قد لا يكون مطلوباً لبعض برامج التشغيل.

تشبه تأثيرات تحديثاتك على المستخدمين الآخرين تأثيراتهم عليك.

المزيد حول التحديث والحذف

يوفر هذا المقطع معلومات إضافية لمساعدتك في العمل مع Update و Delete .

نجاح و فشل التحديث

في حال نجاح Update‎، الوضع AddNew أو Edit‎ ينتهي. لبدء وضع ‎AddNew أو Edit مرة أخرى, استدع AddNew أو Edit‎.

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

  • عدّل عضو بيانات حقل و جرب Update مرة أخرى.

  • استدع AddNew لإعادة تعيين أعضاء بيانات الحقل إلى Null ، عيّن قيم أعضاء بيانات الحقل، ثم استدع Update مرة أخرى.

  • استدع Edit‎ لإعادة تحميل القيم التي كانت موجودة في مجموعة السجلات قبل الاستدعاء الأول لـ AddNew أو Edit‎، عيّن قيم أعضاء بيانات الحقل، ثم قم باستدعاء Update مرة أخرى. بعد استدعاء Update ناجح (باستثناء إذا كان بعد استدعاء AddNew) ، أعضاء بيانات الحقل تحتفظ بقيمهم الجديدة.

  • استدع Move‎ (بما في ذلك Move‎ بمعلمة AFX_MOVE_REFRESH أو 0), التي تمسح (flush) أي تغيير و تنهي أي وضع ‎AddNew أو Edit حالى.

التحديث و الحذف

ينطبق هذا المقطع على كل من Update و Delete .

في عملية Update أو Delete ، يجب تحديث سجل واحد فقط. هذا السجل هو السجل الحالي، الذي يتوافق مع قيم البيانات في حقول مجموعة السجلات. إذا حث لبعض الأسباب أن لم تتأثر السجلات أو تأثر أكثر من سجل، يتم طرح استثناء يحتوي على أحد القيم RETCODE التالية:

  • afx_sql_error_no_rows_affected

  • afx_sql_error_multiple_rows_affected

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

  • AFX_SQL_ERROR_NO_ROWS_AFFECTED عند استخدام وضع التأمين المتفائل بينما قام مستخدم آخر بتعديل السجل بطريقة تمنع إطار العمل من التعِّرف على السجل الصحيح لتحديثه أو حذفه.

  • AFX_SQL_ERROR_MULTIPLE_ROWS_AFFECTED عندما يكون الجدول الذى تحدثه بلا مفتاح أساسي أو فهرس فريد ليس لديك أعمدة كافية في مجموعة السجلات لتعريف صف جدول بشكل فريد.

راجع أيضًا:

المبادئ

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

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

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

SQL

استثناءات: استثناءات أعضاء البيانات