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

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

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

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

  • غرض مجموعة السجلات ذات المعلمات.

  • متى ولماذا قد تحتاج لجعل مجموعة السجلات ذات معلمات.

  • كيف تصرح بأعضاء بيانات المعلمات في فئة مجموعة السجلات.

  • كيفية تمرير معلومات المعلمات إلى كائن مجموعة سجلات في وقت التشغيل.

مجموعات السجلات ذات المعلمات

مجموعة السجلات ذات المعلمات تتيح لك تمرير معلومات المعلمات في وقت التشغيل. ويكون لهذا تأثارين هامان:

  • قد تؤدي إلى سرعة التنفيذ بشكل أفضل.

  • وتتيح لك إمكانية بناء استعلام في وقت التشغيل استناداً إلى المعلومات غير المتوفرة لك في وقت التصميم، مثل المعلومات التى تم الحصول عليها من المستخدم أو حسابها في وقت التشغيل.

عند استدعاء Open لتشغيل الاستعلام ، تستخدم مجموعة السجلات معلومات المعلمة لإكمال SQL SELECT الخاصة به. يمكنك جعل مجموعة سجلات ذات معلمات.

متى تستخدم المعلمات

الاستخدامات النموذجية للمعلمات تتضمن:

  • تمرير الوسائط وقت التشغيل لاستعلام معرف مسبقاً.

    لتمرير المعلمات إلى إجراء مخزن, يجب تحديد عبارة ODBC CALL مخصصة كاملة — مع العناصر النائبة للمعلمة — عند استدعاء Open ، تجاوز عبارة SQL الافتراضية لمجموعة السجلات. لمزيد من المعلومات، راجع CRecordset::Open في مرجع مكتبة الفئة و SQL: تخصيص عبارة SQL الخاصة بمجموعة السجلات (ODBC)و مجموعة السجلات: التصريح بفئة للحصول على استعلام معرّف مسبقاً (ODBC).

  • تنفيذ العديد من عمليات إعادة الطلب بمعلومات معلمات مختلفة.

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

    قد تبدو سلسلة عامل التصفية مجموعة السجلات الخاصة بك المخزنة في m_strFilter، كما يلي:

    "StudentID = ?"
    

    بفرض الحصول على معرف الطالب في المتغير strInputID. عند تعيين معلمة إلى strInputID (على سبيل المثال، معرف الطالب 100)، قيمة المتغير ترتبط بمعلمة العنصر النائب الممثلة بـ"؟" في سلسلة عامل التصفية.

    ثم بتعيين قيمة المعلمة كما يلي:

    strInputID = "100";
    ...
    m_strParam = strInputID;
    

    هل تريد إعداد سلسلة عامل التصفية بهذه الطريقة:

    m_strFilter = "StudentID = 100";   // 100 is incorrectly quoted
                                       // for some drivers
    

    للحصول على مناقشة كيفية استخدام علامات الاقتباس بشكل صحيح لتصفية سلاسل ، راجع مجموعة السجلات: تصفية السجلات (ODBC)

    قيمة المعلمة مختلفة في كل مرة يتم فيها إعادة الاستعلام عن مجموعة السجلات لمعرف طالب جديد.

    تلميحتلميح

    استخدام معلمة أكثر فعالية من عامل تصفية ببساطة. للحصول على مجموعة سجلات ذات معلمات يجب أن تعالج قاعدة البيانات عبارة SQLـ SELECT مرة واحدة فقط. لمجموعة سجلات مصفاة بدون معلمات, يجب أن تتم معالجة SELECT في كل مرة تقوم فيها بـ Requery مع قيمة عامل تصفية جديد.

لمزيد من المعلومات حول عوامل التصفية راجع مجموعة السجلات: تصفية السجلات (ODBC)

جعل فئة مجموعة السجلات لها معلمات

ملاحظة

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

قبل إنشاء فئة مجموعة السجلات، حدد ما هي المعلمات التي تحتاجها، ما هى أنواع البيانات الخاصة بهم و كيف تستخدمها مجموعة السجلات.

لجعل فئة مجموعة سجلات ذات معلمات

  1. قم بتشغيل معالج مستهلك ODBC MFC من إضافة فئة لإنشاء الفئة.

  2. حدد أعضاء بيانات الحقل لأعمدة مجموعة السجلات.

  3. بعد أن يكتب المعالج الفئة إلى ملف في المشروع, انتقل إلى الملف .h ثم أضف واحد أو أكثر يدوياً من أعضاء بيانات المعلمة إلى التصريح بالفئة. قد تبدو الإضافة شيئاً مثل المثال التالي، جزء من فئة اللقطة مصصم للإجابة على الاستعلام "أى الطلاب في فئة عليا ؟"

    class CStudentSet : public CRecordset
    {
    // Field/Param Data
        CString m_strFirstName;
        CString m_strLastName;
        CString m_strStudentID;
        CString m_strGradYear;
    
        CString m_strGradYrParam;
    };
    

    قم بإضافة أعضاء بيانات المعلمة بعد أعضاء البيانات الحقل التي تم إنشاؤها من قبل المعالج. الاصطلاح هو إلحاق الكلمة "Param" لكل اسم معلمة معرف من قبل المستخدم.

  4. قم بتعديل تعريف دالة العضو DoFieldExchange في الملف .cpp. قم بإضافة استدعاء دالة RFX لكل عضو بيانات المعلمة تضيفه إلى الفئة. للحصول على معلومات حول كتابة وظائف RFX راجع تبادل سجل حقل: كيف يعمل RFX قدّم استدعاءات RFX للمعلمات باستدعاء مفرد لـ:

    pFX->SetFieldType( CFieldExchange::param );
    // RFX calls for parameter data members
    
  5. في منشئ فئة مجموعة السجلات الخاصة بك، قم بزيادة عدد المعلمات m_nParams.

    للحصول على معلومات تبادل حقل السجل: العمل مع تعليمات المعالج البرمجية.

  6. عند كتابة التعليمات البرمجية التي تقوم بإنشاء كائن مجموعة السجلات لهذه الفئة، ضع "؟" رمز (علامة الاستفهام) في كل مكان فى سلاسل عبارة SQL حيث ينبغى أن تستبدله معلمة.

    في وقت التشغيل، يتم ملء العناصر النائبة "؟" بالترتيب، بقيم المعلمة التى تمررها. أول عضو بيانات معلمة تم تعيينه بعد استبدال استدعاء SetFieldType بأول "؟" في سلسلة SQL، ثاني عضو بيانات معلمة يحل محل "؟" الثانية وهكذا.

ملاحظة

ترتيب المعلمات هام: ترتيب استدعاءات RFX للمعلمات في دالة DoFieldExchange الخاصة بك يجب أن يتطابق مع ترتيب العناصر النائبة للمعلمة في سلسلة SQL الخاصة بك.

تلميحتلميح

السلسلة المحتمل أكثر أن تعمل معها هي السلسلة التي تحددها (إن وجدت) لعضو البيانات m_strFilter للفئة و لكن بعض برامج تشغيل ODBC قد تسمح للمعلمات في عبارات SQL الأخرى.

تمرير قيم المعلمة في وقت التشغيل

يجب تحديد قيم المعلمات قبل استدعاء Open (لكائن مجموعة سجلات جديد) أو Requery (لموجود).

لتمرير قيم المعلمات إلى كائن مجموعة سجلات في وقت التشغيل

  1. قم بإنشاء كائن مجموعة السجلات.

  2. قم بتحضير سلسلة أو سلاسل مثل سلسلة m_strFilter التي تحتوي على عبارة SQL, أو أجزاء منها. ضع العناصر النائبة "؟" حيث ينبغى أن تنتقل معلومات المعلمة.

  3. قم بتعيين قيمة معلمة وقت التشغيل لكل عضو بيانات معلمة للكائن.

  4. قم باستدعاء دالة العضو Open (أو Requery ، لمجموعة سجلات موجودة).

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

// Set up a filter string with 
// parameter placeholders
rsStudents.m_strFilter = "GradYear <= ?";

// Obtain or calculate parameter values 
// to pass--simply assigned here 
CString strGradYear = GetCurrentAcademicYear( );

// Assign the values to parameter data members
rsStudents.m_strGradYrParam = strGradYear;

// Run the query
if( !rsStudents.Requery( ) )
    return FALSE;

مجموعة السجلات تحتوي على سجلات للطلاب الذين تفي سجلاتهم بالشروط المحددة بواسطة عامل التصفية الذي تم إنشاؤه من معلمات وقت التشغيل. في هذه الحالة، مجموعة السجلات تحتوي على سجلات لطلاب العليا.

ملاحظة

إذا لزم الأمر، يمكنك تعيين قيمة عضو بيانات المعلمة إلى Null باستخدام SetParamNull. بالمثل يمكنك التحقق مما إذا كانت عضو بيانات المعلمة هو Null باستخدام IsFieldNull.

راجع أيضًا:

المبادئ

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

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

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