مجموعة السجلات ربط أعمدة البيانات بشكل حيوي (ODBC) .
هذا الموضوع يُطبق على فئات MFC ODBC.
تدير مجموعات السجلات ربط أعمدة الجدول الذي تحدده في وقت التصميم ولكن هناك حالات عندما تحتاج إلى ربط الأعمدة التي كانت غير معروفة لك في وقت التصميم. هذا الموضوع يوضح :
متى قد ترغب فى ربط الأعمدة بشكل حيوي إلى مجموعة سجلات.
كيفية ربط الأعمدة بشكل حيوي فى وقت التشغيل .
ملاحظة
يطبق هذا الموضوع على الكائنات المشتقة من CRecordset حيث لم يتم تنفيذ "إحضار صفوف كبيرة الحجم". لا ينصح بالتقنيات الموضحة بشكل عام إذا كنت تستخدم إحضار صفوف كبيرة الحجم. لمزيد من المعلومات حول إحضار صفوف كبيرة الحجم راجع مجموعة السجلات: جلب سجلات في تجمع (ODBC)
متى تستطيع ربط الأعمدة بشكل حيوي
فى وقت التصميم , معالج تطبيق MFC أو معالج مستهلك ODBC MFC(منأضف فئة) يقوم بإنشاء فئات مجموعة السجلات استناداً إلى الأعمدة و الجداول المعروفة في مصدر بياناتك . قواعد البيانات قد تتغير بين بعضها عندما تقوم بتصميمها و مُأخراً عندما يستخدم تطبيقك هذه الجداول والأعمدة في وقت التشغيل. قد تقوم أنت أو أي مستخدم آخر بإضافة أو إسقاط جدول أو إضافة أو إسقاط أعمدة من جدول تعتمد عليه مجموعة سجلات التطبيق الخاص بك . هذا فى الغالب لا يهم كل تطبيقات الوصول إلى البيانات، ولكن إذا كانت خاصة بك, كيف يمكنك التعامل مع التغييرات في مخطط قاعدة البيانات بدلا إعادة التصميم أو إعادة الترجمة ؟ الغرض من هذا الموضوع هو الإجابة على هذا السؤال.
يصف هذا الموضوع الحالة الأكثر شيوعاً التي قد تربط فيها الأعمدة بشكل حيوي — بدءًا بمجموعة سجلات مستندة إلى مخطط قاعدة بيانات معروفة، تريد معالجة أعمدة إضافية في وقت تشغيل. يفترض الموضوع تعيين الأعمدة الإضافية إلى أعضاء بيانات الحقل CString ، و هى الحالة الأكثر شيوعًا، و إن كان تم توفير اقتراحات للمساعدة في إدارة أنواع البيانات أخرى .
باستخدام مقدار صغير من التعليمات البرمجية الإضافية يمكنك:
تحديد الأعمدة المتوفرة فى وقت التشغيل .
ربط أعمدة إضافية إلى مجموعة السجلات الخاصة بك بشكل حيوي، في وقت التشغيل.
مجموعة السجلات الخاصة بك لا تزال تحتوي على أعضاء البيانات للأعمدة التي عندك علم بها فى وقت التصميم. و تحتوي أيضاً على مقدار صغير من التعليمات البرمجية الإضافية التى تحدد بشكل حيوي ما إذا كان قد تمت إضافة أي أعمدة جديدة إلى الجدول المستهدف، و إذا كان الأمر كذلك، تربط هذه الأعمدة الجديدة بأماكن التخزين المخصصة بشكل حيوي (بدلاً من أعضاء بيانات مجموعة السجلات ).
لا يغطي هذا الموضوع حالات الربط الحيوي الأخرى، مثل الجداول أو الأعمدة. الساقطة بالنسبة لتلك الحالات، تحتاج إلى استخدام استدعاءات ODBC API بشكل أكثر مباشرة. للحصول على معلومات, راجع مرجع مبرمجى SDK ODBC على قرص مكتبة MSDN المضغوط.
كيفية ربط الأعمدة بشكل حيوي
لربط الأعمدة بشكل حيوى ، يجب أن تعرف (أو تتمكن من تحديد) أسماء الأعمدة الإضافية. يجب أيضاً أن تخصص مكاناً لتخزين لبيانات الحقل الإضافية و تحديد الأسماء و الأنواع الخاصة بها و تحديد عدد الأعمدة الذي تضيفه.
المناقشة التالية تذكر مجموعتى سجلات مختلفتين. الأولى هي مجموعة السجلات الرئيسية التي تختار السجلات من الجدول المستهدف. الثانية هى مجموعة سجلات لعمود خاص تُستخدم للحصول على معلومات عن الأعمدة في الجدول المستهدف.
عملية عامة
فى المستوى الأكثر عمومية , تتبع هذه الخطوات:
قم بإنشاء كائن مجموعة السجلات الرئيسي الخاص بك.
بشكل اختياري،قم بتمرير مؤشر لكائن CDatabase مفتوح أو تمكن من توفير معلومات الاتصال لمجموعة سجلات العمود بطريقة أخرى.
اتخذ إجراءات لإضافة الأعمدة بشكل حيوي.
راجع العملية الموصوفة في إضافة الأعمدة أدناه.
افتح مجموعة السجلات الأساسية.
مجموعة السجلات تحدد السجلات و تستخدم تبادل حقل السجل (RFX) لربط كلاً من الأعمدة الثابتة (تلك المعينة إلى أعضاء بيانات حقل مجموعة سجلات) و الأعمدة الحيوية (المعينة إلى أماكن تخزين إضافية تخصصها).
إضافة الأعمدة
ربط الأعمدة المضافة بشكل حيوي في وقت التشغيل يتطلب الخطوات التالية:
حدد الأعمدة الموجودة في الجدول المستهدف في وقت التشغيل. استخرج من هذه المعلومات قائمة الأعمدة التي تمت إضافتها إلى الجدول منذ تم تصميم فئة مجموعة السجلات الخاصة بك.
من الطرق الجيدة استخدام فئة مجموعة سجلات عمود تم تصميمها للاستعلام عن مصدر المعلومات لمعلومات عمود الجدول المستهدف (مثل اسم العمود و نوع البيانات).
توفر مكان تخزين لأعضاء بيانات الحقل الجديد . لأن فئة مجموعة السجلات الرئيسية الخاصة بك ليس لها أعضاء بيانات حقل للأعمدة غير المعروفة, يجب عليك توفير مكان لتخزين الأسماء و قيم النتيجة و ربما معلومات نوع البيانات (إذا كانت الأعمدة من أنواع بيانات مختلفة).
أحد الطرق هى بناء واحد أو أكثر من القوائم الحيوية، الأول لأسماء الأعمدة الجديدة و الآخر لقيم النتيجة الخاصة بها و ثالثة لأنواع البيانات (إذا كان ذلك ضرورياً). هذه القوائم، و خاصة قائمة القيم، توفر المعلومات ومكان التخزين اللازم للربط. يوضح الرسم التالي بناء القوائم.
بناء قوائم الأعمدة للربط بشكل حيوي
قم بإضافة استدعاء دالة RFX لدالةDoFieldExchange الخاصة بمجموعة السجلات الرئيسية لكل عمود مضاف. تقوم استدعاءات RFX هذه بجلب سجل، بما في ذلك الأعمدة الإضافية و ربط الأعمدة لأعضاء بيانات مجموعة السجلات أو إلى جهاز التخزين الخاص بك الموفر بشكل حيوي لهم.
أحد الطرق هى إضافة حلقة إلى دالة DoFieldExchangeالخاصة بمجموعة السجلات الرئيسية، تتكرر عبر قائمة الأعمدة الجديدة و تستدعى دالة RFX المناسبة لكل عمود في القائمة. في كل استدعاء RFX، مرر اسم عمود من قائمة اسم العمود و موقع تخزين في العضو المطابق لقائمة قيمة النتيجة .
قوائم الأعمدة
القوائم الأربعة التى تحتاج إلى العمل معها مبينة في الجدول التالي.
أعمدة -الجدول-الحالية (قائمة 1 في الشكل التوضيحي)
قائمة الأعمدة الموجودة حالياً في الجدول على مصدر البيانات. قد تتطابق هذه القائمة مع قائمة الأعمدة المرتبطة حالياً في مجموعة السجلات الخاصة بك.أعمدة - مجموعة السجلات - المرتبطة ( قائمة 2 في الرسم التوضيحي)
قائمة أعمدة مرتبطة في مجموعة السجلات الخاصة بك. هذه الأعمدة بها عبارات RFX بالفعل في الدالة DoFieldExchange الخاصة بك.الأعمدة التى ستُربط بشكل حيوى (قائمة 3 في الشكل التوضيحي)
قائمة أعمدة في الجدول ولكن ليس في مجموعة السجلات الخاصة بك. هذه هي الأعمدة التي تريد ربطها بشكل حيوي.قيم - أعمدة - حيوية (قائمة 4 في الرسم التوضيحي)
قائمة تحتوي على تخزين القيم المسترجعة من الأعمدة التى قمت بربطها بشكل حيوي. عناصر هذه القائمة تتوافق مع مثيلتها في الأعمدة المربوطة بشكل حيوى، واحداً لواحد.
بناء القوائم الخاصة بك
مع وجود الاستراتيجية العامة في ذهنك، يمكنك الانتقال إلى التفاصيل. تظهر الإجراءات في بقية هذا الموضوع كيفية بناء القوائم المعروضة في قوائم الأعمدة . ترشدك الإجراءات خلال:
تحديد أسماء الأعمدة التى ليست في مجموعة السجلات الخاصة بك.
توفير مكان تخزين للأعمدة التي تم إضافتها حديثاً إلى الجدول.
إضافة استدعاءات RFX بشكل حيوي للأعمدة الجديدة .
تحديد أى أعمدة جدول ليست في مجموعة السجلات الخاصة بك
قم ببناء قائمة (أعمدة - مجموعة السجلات - المربوطة في قائمة 2 في الرسم التوضيحي ) تحتوي على قائمة أعمدة مربوطة بالفعل في مجموعة السجلات الأساسية الخاصة بك. ثم قم ببناء قائمة (أعمدة-مربوطة-بشكل حيوي، مشتقة من أعمدة-الجدول-الحالى و أعمدة -مجموعة السجلات-المربوطة ) تحتوي على أسماء الأعمدة الموجودة في الجدول في مصدر البيانات ولكن ليس في مجموعة السجلات الأساسية الخاصة بك.
لتحديد أسماء الأعمدة التى ليست في مجموعة السجلات (الأعمدة التى ستُربط بشكل حيوى)
قم بانشاء قائمة (أعمدة-مجموعة السجلات-المربوطة) من أعمدة مربوطة بالفعل في مجموعة السجلات الأساسية الخاصة بك.
أحد الطرق هى إنشاء أعمدة-مجموعة السجلات-المربوطة في وقت التصميم. يمكنك بشكل مرئي فحص استدعاء RFX في دالة DoFieldExchange الخاصة بمجموعة السجلات للحصول على هذه الأسماء. ثم قم بأعداد القائمة كصفيف مُهيأ بالأسماء.
على سبيل المثال، يعرض الرسم التوضيحي أعمدة-مجموعة السجلات-المربوطة (قائمة 2) مع عناصر ثلاثة. تفتقد أعمدة -مجموعة السجلات- المربوطة عمود "الهاتف (Phone)" الموضح في أعمدة - الجدول- الحالى (قائمة 1).
قارن أعمدة -الجدول - الحالية و أعمدة -مجموعة السجلات - المربوطة لبناء قائمة (أعمدة - مربوطة - بشكل حيوي) من أعمدة مربوطة بالفعل في مجموعة السجلات الأساسية.
احد الطرق هى تكرار حلقات عبر قائمة الأعمدة في الجدول في وقت التشغيل (أعمدة - الجدول - الحالية) و قائمة الأعمدة مربوطة بالفعل في مجموعة السجلات (أعمدة- مجموعة السجلات - الحالية ) الخاصة بك في نفس الوقت. فى الأعمدة - المربوطة - بشكل حيوى , ضع أية أسماء في أعمدة - الجدول - الحالية التى لا تظهر في أعمدة -مجموعة السجلات- المربوطة.
على سبيل المثال، يعرض الرسم التوضيحي الأعمدة - المربوطة- بشكل حيوي (قائمة 3) بعنصر واحد فيها: عمود الهاتف موجود في أعمدة - الجدول- الحالية (قائمة 1) ولكن ليس مربوطاً في أعمدة - مجمعة السجلات- المربوطة (قائمة 2).
قم ببناء قائمة قيم-العمود-الحيوية (كما في قائمة 4 في الرسم التوضيحي) لتخزين قيم البيانات المطابقة لكل اسم عمود مخزن في قائمة أعمدة الربط بشكل حيوي (أعمدة - مربوطة - حيوي).
تلعب عناصر هذه القائمة دور أعضاء بيانات حقل مجموعة السجلات الجديدة. هى مواقع التخزين التي يتم ربط الأعمدة الحيوية بها. للحصول على وصف قوائم راجع قوائم الأعمدة .
توفير التخزين للأعمدة الجديدة
بعد ذلك, قم بإعداد مواقع تخزين للأعمدة ليتم ربطها بشكل حيوي. الفكرة هى توفير عنصر قائمة حيث تريد تخزين كل قيمة عمود. مواقع التخزين هذه توازى متغيرات عضو مجموعة السجلات التى تخزن الأعمدة المربوطة بشكل طبيعى.
لتوفير تخزين حيوي للأعمدة الجديدة (قيم - العمود - الحيوية)
قم ببناء قيم - عمود - حيوية و موازية لـ"الأعمدة التى ستُربط بشكل حيوى"، لتحتوي على قيمة البيانات في كل عمود.
على سبيل المثال، يعرض الرسم التوضيحي قيم - العمود - الحيوية (قائمة 4) بعنصر واحد فيها: كائن CString الذي يحتوي على رقم الهاتف الفعلي للسجل الحالى: "555-1212".
في الحالة الأكثر شيوعاً قيم - العمود - الحيوية تحتوي على عناصر من نوع CString. إذا كنت تتعامل مع أعمدة فيها أنواع بيانات متباينة, فسوف تحتاج إلى قائمة يمكنها أن تحتوي على عناصر من مجموعة متنوعة من الأنواع.
نتيجة الإجراءات السابقة قائمتان رئيسيتان: الأعمدة التى ستُربط بشكل حيوى التي تحتوي على أسماء الأعمدة وقيم - العمود - الحيوية التي تحتوي على القيم في الأعمدة للسجل الحالي.
تلميح |
---|
إذا كانت الأعمدة الجديدة ليست من نفس نوع البيانات ، قد تحتاج لقائمة موازية إضافية تحتوي على عناصر تعرف نوع كل عنصر مناظر في قائمة الأعمدة. (يمكنك استخدام القيم AFX_RFX_BOOL و AFX_RFX_BYTE و وهكذا دواليك، لهذا إذا كنت تريد. هذه الثوابت معرّفة في AFXDB.H.) اختر نوع قائمة استناداً إلى كيفية تمثيل أنواع بيانات الأعمدة. |
إضافة استدعاء RFX لربط الأعمدة
وأخيراً، قم بالإعداد للربط الحيوي ليحدث عن طريق وضع استدعاءات RFX للأعمدة الجديدة في الدالةDoFieldExchangeالخاصة بك.
لإضافة استدعاءات RFX بشكل حيوي للأعمدة الجديدة .
- في دالة العضو DoFieldExchange الخاصة بمجموعة السجلات الرئيسية ، أضف التعليمة البرمجية التى تكرر حلقات عبر قائمة الأعمدة الجديدة (أعمدة - مربوطة - بشكل حيوي). في كل حلقة , قم بفك ضغط اسم عمود من الأعمدة - المربوطة- بشكل حيوي و قيمة نتيجة لعمود من قيم - عمود - حيوية . مرر هذه العناصر إلى استدعاء دالة RFX المناسبة لنوع بيانات العمود. للحصول على وصف قوائم راجع قوائم الأعمدة .
في الحالة الشائعة في استدعاءات دالة RFX_Text الخاصة بك، تقوم باستخراج كائناتCString من القوائم كما في سطور التعليمات البرمجية حيث يتم ربط الأعمدة بشكل حيوي تكون CStringList تسمى m_listName و قيم العمود الحيوية CStringList تسمى m_listValue:
RFX_Text( pFX,
m_listName.GetNext( posName ),
m_listValue.GetNext( posValue ));
لمزيد من المعلومات عن دالات RFX ,، راجع وحدات الماكرو و العمومي في مرجع مكتبة الفئة .
تلميح |
---|
إذا كانت الأعمدة الجديدة مختلفة فى أنواع البيانات , استخدم جملة تبديل (switch) في الحلقة الخاصة بك لاستدعاء دالة RFX المناسبة لكل نوع. |
عندما يستدعي إطار العمل DoFieldExchange أثناء عملية الفتح (Open) لربط الأعمدة إلى مجموعة السجلات ,استدعاءات RFX للأعمدة الثابتة تربط تلك الأعمدة. ثم تقوم الحلقة الخاصة بك باستدعاء دالات RFX للأعمدة الحيوية بشكل متكرر.