في نظام برمجة ASP الخاص بشركة Microsoft، يؤدي إنشاء كائنات ADO إلى تسهيل الوصول إلى قواعد البيانات من صفحات الويب، وعلى وجه الخصوص، يجعل كائن ADO Recordset التحكم في إخراج البيانات وعرضها أكثر ملاءمة وحرية. في Visual InterDev6.0 (المشار إليه فيما يلي باسم VI6.0)، وذلك بسبب إدخال نماذج الكائنات مثل نموذج كائن البرنامج النصي (المشار إليه فيما يلي باسم SOM)، والتحكم في وقت التصميم (المشار إليه فيما يلي باسم DTC) وكائن بيئة البيانات النموذج (المشار إليه فيما بعد باسم DEOM)، وهذا يجعل تصميم صفحة الويب للوصول إلى قاعدة البيانات أكثر ملاءمة.
نظرًا للموضوع، فيما يتعلق باتصال قاعدة البيانات، يتم توفير التعليمات البرمجية والتعليقات المختصرة فقط أدناه، ويكون التركيز على كيفية استخدام كائن Recordset (أو عنصر التحكم) لتحقيق عرض الترحيل لسجلات البيانات. وفقًا لفهمي، يكمن مفتاح عرض الترحيل في الكفاءة في خصائص وأساليب كائن Recordset الخاص بـ ADO أو عنصر تحكم مجموعة السجلات في DTC (التحكم في وقت التصميم).
يمكن تلخيص هذه الأنواع السبعة من الأسلحة المعروضة في الصفحات في أربع فئات:
أسمي الطريقتين الأولى والثانية مؤقتًا طريقة ASP النقية، وهي أيضًا الطريقة الأكثر استخدامًا على مواقع ASP المحلية، والفرق بينهما هو فقط في تقنيات التنفيذ. إن تنفيذ هاتين الطريقتين هو الأسهل في الفهم، ويستخدم أقل قدر من مفاهيم الكائنات، وله أقل المتطلبات لبيئة التطوير (فقط المفكرة ستفي بالغرض). ويمكن القول أن جوهر هاتين الطريقتين لا يزال فكرة برمجة CGI، ولكن يتم إدخال كائن ADO في البرنامج.
تتم تسمية أساليب DHTML الرابعة والخامسة مؤقتًا باسم SOM. تتطلب هاتان الطريقتان استخدام نموذج كائن البرنامج النصي الذي اقترحته Microsoft وميزات ربط قاعدة البيانات الجديدة لكائن الجدول في DHTML في بيئة VI6.0 (تقدم العديد من الكتب والمقالات فقط ميزات CSS لـ DHTML ويتم استخدامها في الأسلوب تصميم ويتجاهل إدخال ميزات ربط البيانات الخاصة به) للتحكم في تشغيل الصفحة من جانب العميل. ولكنه يتطلب أن يدعم متصفح المستخدم DHTML، مثل Microsoft Internet Explorer 4.0 وما فوق.
يتم تسمية الطريقة السادسة مؤقتًا بطريقة SOM من جانب الخادم. مطلوب تطويره في بيئة VI6.0 ويستخدم العديد من عناصر تحكم DTC في نموذج كائن البرنامج النصي الذي تقترحه Microsoft: Recordset وPageObject وGrid وما إلى ذلك لتنفيذ التحكم في تحويل الصفحة على جانب الخادم (العميل). هذه طريقة برمجة جديدة ومثيرة تتعامل مع صفحات الويب ككائنات (يختلف نموذج الكائن هذا عن نموذج كائن مستند DOM التقليدي: يمكن لـ DOM التحكم في العميل فقط، بينما يمكن لـ SOM التحكم في الخادم والعميل)، فهو يدرك حقًا الكائن- البرمجة الموجهة لصفحات الويب. لكن لسوء الحظ، ربما بسبب قدرتي الشخصية المحدودة، أعتقد شخصيًا أن هذه التكنولوجيا ليست ناضجة جدًا بعد، على سبيل المثال، التكامل مع المتصفح ليس جيدًا جدًا، وهو ما سيتم شرحه بالتفصيل لاحقًا.
الطريقة السابعة تسمى مؤقتًا طريقة DEOM. ويستخدم أيضًا نموذج كائن بيئة البيانات الذي تم إنشاؤه في VI6.0 لإنشاء كائنات مجموعة السجلات. وهذه أيضًا طريقة جديدة نسبيًا في برمجة الويب مقارنة بنموذج SOM، فهي تتمتع بمزاياها الخاصة، والتي سيتم تفصيلها لاحقًا.
يمكن نسخ جميع أمثلة أكواد المصدر المذكورة أدناه واستخدامها مباشرة، ولا تحتاج حتى إلى فهم المبادئ، ما عليك سوى استبدال الأجزاء الغامقة والمائلة بأسماء قاعدة البيانات أو أسماء الحقول المقابلة.
قبل البدء في تقديم أساليب الترحيل المختلفة بالتفصيل، دعونا أولاً نقوم بإنشاء قاعدة بيانات: استخدم الوصول في Office97 لإنشاء ملف Staff.mdb، وإنشاء جدول emp فيه، وتعيين ثلاثة حقول فقط: معرف emp، والاسم الأخير، والاسم الأول. سبب بساطة الأمر هو أننا نهتم بكيفية معالجة نتائج مجموعة السجلات.
الطريقة الأولى: طريقة استبدال المعلمة المباشرة
تتمثل هذه الطريقة في إنشاء كائن Recordset يدويًا واستخدام خصائص حجم الصفحات (العدد المحدد للسجلات المعروضة لكل صفحة)، وعدد الصفحات (رقم الصفحة الإجمالي)، والصفحة المطلقة (رقم الصفحة الحالية) للتحكم في إخراج الترحيل. يستخدم الترحيل <href> لاتخاذ معلمة رقم الصفحة مباشرة للتحكم في تقليب الصفحة. اسم صفحة الويب هو emp1.asp. كود المصدر هو كما يلي:
<%//إنشاء اتصال بقاعدة بيانات الموظف.mdb.
تعيين conn = Server.CreateObject(ADODB.Connection)
conn.Open driver={Microsoft Access Driver (*.mdb)};dbq=employee.mdb
// قم بإنشاء مثيل كائن Recordset rs للجدول emp.
تعيين rs = Server.CreateObject(ADODB.Recordset)
rs.Open emp، conn، 3
PageSize = 10 // تحدد سمة حجم الصفحات عدد السجلات التي سيتم عرضها في كل صفحة
Page = CLng(Request(Page)) 'تحويل نوع السلسلة إلى نوع طويل
إذا كانت الصفحة <1، فإن الصفحة = 1
إذا كانت الصفحة> rs.PageCount ثم الصفحة = rs.PageCount
إذا كانت الصفحة <> 1 ثم
الاستجابة.اكتب <A HREF=emp1.asp?Page=1>الصفحة الأولى</A>
الاستجابة.اكتب <A HREF=emp1.asp?Page= & (صفحة-1) & >الصفحة السابقة</A>
نهاية إذا
إذا كانت الصفحة <> rs.PageCount ثم
الاستجابة.اكتب <A HREF=emp1.asp?Page= & (صفحة+1) & >الصفحة التالية </A>
الاستجابة.اكتب <A HREF=emp1.asp?Page=&rs.PageCount & >الصفحة الأخيرة</A>
نهاية إذا
كتابة رقم الصفحة: & Page & / & rs.PageCount & </font>
// عرض كل صفحة
// عرض الرأس
الاستجابة.اكتب <CENTER><TABLE BORDER=1>
الاستجابة.اكتب <TR><TD> & rs.Fields(معرف emp).الاسم و</TD>
الاستجابة.اكتب <TD> & rs.Fields (الاسم الأخير).الاسم و</TD>
الاستجابة.اكتب <TD> & rs.Fields(الاسم الأول).الاسم & </TD></TR>
// حلقة لعرض كل سجل
rs.AbsolutePage = Page // قم بتعيين رقم الصفحة للسمة المطلقة لمعرفة رقم السجل الأول للصفحة الحالية
لـ iPage = 1 إلى rs.PageSize //
الاستجابة.اكتب <TR><TD> & rs.Fields(معرف emp).القيمة و</TD>
الاستجابة.اكتب <TD> & rs.Fields(الاسم الأول).القيمة & </TD>
الاستجابة.اكتب <TD> & rs.Fields(اسم العائلة).القيمة & </TD></TR>
rs.MoveNext
إذا rs.EOF ثم قم بالخروج ل
التالي
الاستجابة.اكتب </TABLE></CENTER>%>
النوع الثاني: طريقة معلمة إرسال النموذج
هذه الطريقة هي نفس الطريقة الأولى عند إنشاء كائن Recordset، باستثناء أنه عند التحكم في تقليب الصفحة، يتم استخدام <input> وبيان الحالة لتحقيق قلب الصفحة. اسم صفحة الويب هو: emp2.asp. تحتوي هذه الطريقة على عيب في منطق البرمجة: بعد الضغط على زر الصفحة السابقة أو الصفحة التالية، ثم الضغط على زر التحديث في المتصفح، سيتم تشغيل الصفحة تلقائيًا. كود المصدر هو كما يلي:
if Pagenum = ثم Pagenum = 1 // ابدأ العرض من الصفحة الأولى
// إنشاء اتصال بقاعدة البيانات ومثيل كائن مجموعة السجلات rs.
نفس الطريقة الأولى، تم تخطيها هنا.
RS.Pagesize = 10 'اضبط عدد السجلات المعروضة في صفحة واحدة على 10
// تحديد إجراء قلب الصفحة
حدد طلب الحالة (NAV)
قضية
الجلسة (رقم الصفحة) = 1
الحالة الأولى 'السجل الأول
الجلسة (رقم الصفحة) = 1
الحالة السابق ' السجل السابق
إذا كانت الجلسة (Pagenum)> 1 ثم
جلسة (رقم الصفحة) = جلسة (رقم الصفحة) - 1
نهاية إذا
الحالة التالي 'السجل التالي
إذا كانت الجلسة (Pagenum)<RS.PageCount إذن
جلسة (رقم الصفحة) = جلسة (رقم الصفحة) + 1
انتهي إذا
الحالة الأخيرة 'السجل الأخير
جلسة (Pagenum) = RS.PageCount
إنهاء التحديد
RS.Absolutepage = Clng(session(Pagenum)) // تحديد رقم السجل الأول للصفحة الحالية
// عرض الصفحة الحالية
نفس الطريقة الأولى، تم تخطيها هنا.
// إعدادات زر صفحة التنقل
<طريقة النموذج=إجراء GET=emp2.asp>
<نوع الإدخال=اسم الإرسال=قيمة NAV=الصفحة الرئيسية>
<نوع الإدخال=قيمة الإرسال=اسم الصفحة السابقة=NAV>
<نوع الإدخال=قيمة الإرسال=اسم الصفحة التالية=NAV>
<نوع الإدخال=قيمة الإرسال=اسم الصفحة الأخيرة=NAV></نموذج>
النوع الثالث: استخدام التحكم بالشبكة لتصميم الترحيل
من بين جميع الطرق، هذا هو الأسهل. ما عليك سوى سحب عنصر تحكم Recordset وعنصر تحكم الشبكة في DTC إلى صفحة الويب asp. علاوة على ذلك، يمكنك أيضًا اختيار التحكم في تشغيل الصفحة على النظام الأساسي للخادم أو النظام الأساسي للعميل. العيب هو أنه يجب عليك عرضه بالتنسيق الذي يقدمه، ولا يمكنك التحكم بحرية في تنسيق عرض الجدول بنفسك.
وإليك الطريقة:
قم بإنشاء مشروع emp.vip في VI6.0. ثم قم بإضافة صفحة ويب asp إلى المشروع: emp3.asp.
الخطوة 1: حدد إضافة اتصال بيانات... على شريط القائمة الخاص بـ VI6.0 واتبع مطالبات التنقل الخاصة بأداة التطوير. يمكنك بسهولة إنشاء اتصال بقاعدة بيانات Staff.mdb. اسحب عنصر تحكم مجموعة السجلات من شريط أدوات DTC إلى صفحة الويب وقم بتعيين خصائصه. كما هو مبين في الشكل:
عندما تقوم بسحب عنصر التحكم إلى صفحة الويب، سيطالبك VI6.0 تلقائيًا ما إذا كنت تريد استخدام نموذج كائن البرمجة النصية، اضغط على نعم.
الخطوة 3: اسحب عنصر تحكم الشبكة من شريط أدوات DTC إلى صفحة الويب، ثم انقر بزر الماوس الأيمن فوق الماوس وقم بتعيين خصائصه، مثل: حدد اسم عنصر تحكم Recordset الذي تم إنشاؤه في الخطوة الثانية، وحدد الحقول في الجدول emp ، كل صفحة عدد السجلات التي يتم عرضها وتنسيق العرض وما إلى ذلك. إنه أمر بسيط ومريح للغاية، ما عليك سوى اتباع تعليمات التنقل.
الطريقة الرابعة: طريقة DHTML الأولى.
يتم عرض سجلات البيانات في جدول HTML. يستخدم ميزات ربط البيانات للجداول في DHTML للتحكم في عرض ترحيل الصفحات للسجلات. العيب هو أن طريقة تقليب صفحتك ستقتصر على طريقة محددة: الصفحات السابقة والتالية فقط وليس الصفحات الأولى والأخيرة. نظرًا لأنه يتم التحكم في تقليب الصفحة من جانب العميل، فإن هذه الطريقة والطريقة الخامسة هما الأسرع، ولكن لسوء الحظ لا يمكن استخدامها إلا على المتصفحات التي تدعم DHTML.
في DHTML، تتيح سمة DATASRC الخاصة بـ <TABLE> ربط الجدول بمصدر بيانات، وتحدد سمة أخرى، DATAPAGESIZE، عدد السجلات المعروضة على الصفحة في وقت واحد.
لننظر إلى المثال التالي:
الخطوة 1: اسحب عنصر تحكم Recordset إلى صفحة الويب التي تم إنشاؤها حديثًا emp4.htm وقم بتعيين خصائصها. الطريقة هي نفس الطريقة الثالثة، والتي تم حذفها هنا.
الخطوة الثانية: أدخل الكود التالي:
<TABLE ID=Table1 DATASRC=#Recordset1_RDS DATAPAGESIZE=5> // افترض أن عنصر تحكم مجموعة السجلات تم تسميته Recordset1 سابقًا. عرض 5 سجلات لكل صفحة.
<الرأس>
<TH ALIGN=العرض الأيسر=150>معرف Emp</TH> // رأس الإخراج
<TH محاذاة=العرض الأيسر=200>الاسم الأخير</TH>
<TH محاذاة=العرض الأيسر=200>الاسم الأول</TH>
</الرأس>
<TR>
<TD><DIV DATAFLD=معرف Emp></DIV></TD> // محتوى جدول الإخراج
<TD><DIV DATAFLD=الاسم الأخير></DIV></TD>
<TD><DIV DATAFLD=الاسم الأول></DIV></TD>
</TR>
</الجدول>
الخطوة 3: بعد ذلك، قم بإضافة زوج من عناصر التحكم في زر DTCs للتنقل في الصفحة، أحدهما يسمى btnPrevious (الصفحة السابقة) والآخر يسمى btnNext (الصفحة التالية). البرامج النصية المقابلة لها هي كما يلي:
<لغة البرنامج النصي=VBScript>
الدالة btnPrevious_onclick()
الجدول 1. الصفحة السابقة ()
وظيفة النهاية
الدالة btnNext_onclick()
الجدول 1.الصفحة التالية ()
وظيفة النهاية
</النص>
الطريقة الخامسة: طريقة DHTML الثانية
وهذه الطريقة هي تنقيح للطريقة الرابعة. باستخدام طريقة كتابة البرامج النصية يدويًا، يمكننا إنشاء أزرار التنقل في الصفحة الرئيسية والصفحة الأخيرة، وتحديد موضع (رقم السجل) لكل سجل. نظرًا لضيق المساحة، سأقدم فقط مثالًا محددًا أدناه وأقدم شرحًا موجزًا. للتعرف على الخصائص والأساليب الأخرى المتعلقة بعناصر تحكم DHTML ومجموعة السجلات، يرجى الرجوع إلى الكتب ذات الصلة. ما يجب ملاحظته هنا هو أن عنصر تحكم Recordset يختلف إلى حد ما عن كائن ADO Recordset الذي تم تقديمه في الطريقتين الأولى والثانية: لا يوفر عنصر تحكم Recordset خصائص مباشرة مثل حجم الصفحات وعدد الصفحات، ويجب حسابه باستخدام الطريقة الموضحة أقل.
الخطوة 1: اسحب عنصر تحكم Recordset إلى صفحة الويب التي تم إنشاؤها حديثًا emp5.htm، وقم بتسميتها Recordset1، ثم قم بتعيين خصائصها. الطريقة هي نفس الطريقة الثالثة، والتي تم حذفها هنا.
الخطوة 2: حدد ثلاثة متغيرات عامة واكتب البرنامج النصي ondatasetcomplete (اكتمل إعداد البيانات) الخاص بـ Recordset1.
Dim gCurrentPageNumber // رقم الصفحة الحالية
Dim gMaxPageNumber // الحد الأقصى لعدد الصفحات
Dim gRecordsPerPage // عرض عدد السجلات لكل صفحة
gRecordsPerPage = 5 // اضبط عدد السجلات المعروضة في كل صفحة على 5 سجلات.
الدالة Recordset1_ondatasetcomplete()
TotalRecordCount = Recordset1.getCount() // إجمالي عدد السجلات
gMaxPageNumber = Int(totalRecordCount / gRecordsPerPage) // احصل على الحد الأقصى لعدد الصفحات
إذا (totalRecordCount Mod gRecordsPerPage) > 0 إذن
gMaxPageNumber = gMaxPageNumber + 1
نهاية إذا
وظيفة النهاية
الخطوة 3: إنشاء أزرار التنقل في الصفحة.
الدالة btnFirst_onclick() 'انتقل إلى الصفحة الرئيسية
رقم الصفحة الحالي = 1
بيانات العرض ()
وظيفة النهاية
الدالة btnPrevious_onclick() 'انتقل إلى الصفحة السابقة
إذا كان gCurrentPageNumber> 1 ثم
gCurrentPageNumber = gCurrentPageNumber - 1
بيانات العرض ()
نهاية إذا
وظيفة النهاية
الدالة btnNext_onclick() "انتقل إلى الصفحة التالية."
إذا كان gCurrentPageNumber < gMaxPageNumber ثم
gCurrentPageNumber = gCurrentPageNumber + 1
بيانات العرض ()
نهاية إذا
وظيفة النهاية
الدالة btnLast_onclick() 'الانتقال إلى الصفحة الأخيرة
gCurrentPageNumber = gMaxPageNumber
بيانات العرض ()
وظيفة النهاية
الخطوة 4: اكتب دالة لعرض كل صفحة. يتم استخدام العديد من سمات وأساليب DHTML، ويُنصح القراء بالرجوع إلى الكتب ذات الصلة.
بيانات العرض الفرعي ()
startRecord = ((gCurrentPageNumber - 1) * gRecordsPerPage) + 1 // احسب عدد السجلات (الموضع والرقم) المعروضة في بداية كل صفحة
عدد الصف = 1
lblPageNumber.innerHTML = gCurrentPageNumber & / & gMaxPageNumber
For RecordPtr = startRecord To (startRecord + gRecordsPerPage - 1) // حلقة لعرض كل سجل في الصفحة
إذا سجلPtr > Recordset1.getCount() ثم //عرض الجدول الفارغ
Table1.rows(rowCtr).cells(0).innerHTML = <P> </P>
Table1.rows(rowCtr).cells(1).innerHTML = <P> </P>
Table1.rows(rowCtr).cells(2).innerHTML = <P> </P>
Table1.rows(rowCtr).cells(3).innerHTML = <P> </P>
آخر // عرض كل صفحة على وجه التحديد
Recordset1.moveAbsolute(recordPtr) // حرك مؤشر السجل.
empID = Recordset1.fields.getValue(معرف emp)
empLName = Recordset1.fields.getValue(الاسم الأول)
empFName = Recordset1.fields.getValue(اسم العائلة)
Table1.rows(rowCtr).cells(0).innerText = RecordPtr 'عداد
Table1.rows(rowCtr).cells(1).innerText = empID
Table1.rows(rowCtr).cells(2).innerText = empLName
Table1.rows(rowCtr).cells(3).innerText = empFName
نهاية إذا
صفCtr = صفCtr + 1
التالي
نهاية الفرعية
بالإضافة إلى ذلك، نحتاج أيضًا إلى كتابة البرنامج النصي التالي في حدث onload لكائن window:
بالنسبة لrowCtr = 1 إلى gRecordsPerPage
Table1.insertRow(rowCtr) "أدخل عمودًا جديدًا."
بالنسبة إلى cellCtr = 0 إلى 3
Table1.rows(rowCtr).insertCell()
التالي
التالي
الطريقة السادسة: طريقة تحويل صفحة التحكم من جانب الخادم.
إذا قمنا بترقيم البيانات على جانب الخادم لتشكيل عبارة HTML ثم إخراجها إلى العميل، فلن تكون هناك مشكلة في أن المتصفح لا يدعم DHTML. ومع ذلك، فإن استخدام الطريقة من جانب الخادم يتطلب منا إعادة إنشاء عنصر تحكم مجموعة السجلات في كل مرة نقوم فيها بتشغيل الصفحة، وبالتالي فإن السرعة بالتأكيد أبطأ من استخدام طريقة DHTML. ولكن إذا كان الخادم سريعًا بما فيه الكفاية، فلن يلاحظ هذا العميل البطيء ذلك.
في المثال التالي، سأقدم عنصر تحكم DTC جديدًا: PageObject. يجعل عنصر التحكم هذا صفحة الويب المحددة كائن صفحة ويب، ويمكن اعتبار الإجراءات الفرعية والوظائف التي ينظمها المستخدم في البرنامج النصي للخادم لصفحة الويب هذه بمثابة طرق لكائن صفحة الويب. يوفر طريقة متقدمة لإدارة معلومات الحالة: تحتوي كائنات صفحة الويب على بعض الخصائص (المتغيرات)، ويمكن للمستخدمين تحديد عمر هذه الخصائص. بسبب الخصائص المذكورة أعلاه، من السهل جدًا بالنسبة لنا تجميع البرامج النصية لقلب الصفحات.
لكن عيب هذه الطريقة هو: بعد الضغط على زر الصفحة السابقة أو الصفحة التالية، ثم الضغط على زر التحديث في المتصفح، سيتم تشغيل صفحة الويب تلقائيًا. بالإضافة إلى ذلك، إذا قمت بالضغط على زر الرجوع في المتصفح ثم قمت بالضغط على زر قلب الصفحة، فقد تظهر صفحة عشوائية. يحدث كل هذا بسبب خصائص كائن صفحة الويب (المتغيرات العامة).
الخطوة 1: اسحب عنصر تحكم مجموعة السجلات إلى صفحة الويب التي تم إنشاؤها حديثًا emp6.asp، وقم بتسميتها Recordset1، ثم قم بتعيين خصائصها. الطريقة هي نفس الطريقة الثالثة، والتي تم حذفها هنا.
الخطوة 2: اسحب عنصر تحكم PageObject إلى صفحة الويب وقم بتسميته emplist. ثم انقر بزر الماوس الأيمن فوق عنصر التحكم هذا لفتح صفحة الخصائص وتعيين الخصائص الثلاثة (المتغيرات العامة) الخاصة بـ MaxPageNumber وRecordsPerPage وCurrentPageNumber. يمكن لـ VI6.0 استخدام طرق get وset لقراءة وكتابة قيمها. يرجى الرجوع إلى المعلومات ذات الصلة لاستخدام محدد.
الخطوة 3: اكتب حدث ondatasetcomplete الخاص بـ Recordset1.
الدالة Recordset1_ondatasetcomplete()
السجلات لكل صفحة = 5
empList.setRecordsPerPage(recordsPerPage)// قم بتعيين عدد السجلات لكل سمة صفحة لكائن صفحة الويب على 5
TotalRecordCount = Recordset1.getCount()// احصل على العدد الإجمالي للسجلات في مجموعة السجلات
mpn = Int(totalRecordCount / RecordsPerPage) // احسب mpn كإجمالي عدد الصفحات
إذا (totalRecordCount Mod RecordsPerPage) > 0 إذن
mpn = mpn + 1
نهاية إذا
empList.setMaxPageNumber(mpn)
وظيفة النهاية
الخطوة 4: اسحب عناصر التحكم الأربعة إلى صفحة الويب واكتب برنامجًا نصيًا للتحكم في الصفحة. نحقق بشكل أساسي تقليب الصفحة عن طريق تغيير قيمة خاصية CurrentPageNumber لكائن صفحة الويب.
الدالة btnFirst_onclick() 'انتقل إلى الصفحة الرئيسية
empList.setCurrentPageNumber(1)
وظيفة النهاية
الدالة btnPrevious_onclick() 'انتقل إلى الصفحة السابقة
cpn = empList.getCurrentPageNumber()
إذا الحزب الشيوعي النيبالي> 1 ثم
empList.setCurrentPageNumber(cpn - 1)
نهاية إذا
وظيفة النهاية
الدالة btnNext_onclick() "انتقل إلى الصفحة التالية."
cpn = empList.getCurrentPageNumber()
إذا كان cpn < empList.getMaxPageNumber() إذن
empList.setCurrentPageNumber(cpn + 1)
نهاية إذا
وظيفة النهاية
الدالة btnLast_onclick() 'الانتقال إلى الصفحة الأخيرة
empList.setCurrentPageNumber( empList.getMaxPageNumber() )
وظيفة النهاية
من أجل ضمان عرض الصفحة الأولى عند الدخول إلى الصفحة لأول مرة، يجب علينا أيضًا كتابة حدث onEnter لكائن صفحة الويب.
الدالة empList_onEnter()
إذا تم إدخال empList.first ثم
empList.setCurrentPageNumber(1)
نهاية إذا
وظيفة النهاية
الخطوة 5: اكتب برنامجًا نصيًا يعرض كل صفحة.
<HR><TABLE BORDER=0><TR>//عرض الرأس
<TH محاذاة=العرض الأيسر=35></TH>
<TH محاذاة=العرض الأيسر=150>معرف Emp</TH>
<TH محاذاة=العرض الأيسر=200>الاسم الأخير</TH>
<TH محاذاة=العرض الأيسر=200>الاسم الأول</TH></TR>
<%
pageNumber = empList.getCurrentPageNumber()// حساب المعلمات المختلفة المطلوبة لقلب الصفحة، مثل طريقة DHTML 2
RecordsPerPage = empList.getRecordsPerPage()
startRecord = ((رقم الصفحة - 1) * السجلات لكل صفحة) + 1
lastRecord = Recordset1.getCount()
بالنسبة إلى RecordPtr = startRecord To (startRecord + RecordsPerPage - 1)%>
<%If Recordset1.EOF = True ثم%>
<TR>
<TD> </TD>
<TD> </TD>
<TD> </TD>
<TD> </TD>
</TR>
<%آخر%>
<%Recordset1.moveAbsolute(recordPtr)%>
<TR>
<% إذا سجلPtr <= السجل الأخير ثم %>
<TD><%=recordptr%></TD>
<%آخر%>
<TD> </TD>
<%نهاية إذا %>
<TD><%=Recordset1.fields.getValue(معرف emp)%></TD>
<TD><%=Recordset1.fields.getValue(اسم العائلة)%></TD>
<TD><%=Recordset1.fields.getValue(الاسم الأول)%></TD>
</TR>
<%نهاية إذا%>
<%التالي%>
</جدول><HR>
الطريقة السابعة: طريقة نموذج كائن بيئة البيانات (نموذج كائن بيئة البيانات).
يقوم نموذج كائن بيئة البيانات بتجريد نموذج كائن ADO وكائناته — كائنات الاتصال والأوامر ومجموعة السجلات والحقل والمعلمات — في نموذج أبسط. يعرض نموذج كائن بيئة البيانات الأوامر كطرق. يمكن للمستخدم استدعاء هذه الأساليب التي تنفذ الأوامر وتعيد مجموعة السجلات الناتجة. للحصول على معلومات مفصلة حول نموذج كائن DEOM، يرجى الرجوع إلى الكتب ذات الصلة. دعونا نلقي نظرة على مثال صفحة الويب التالية emp7.asp:
الخطوة 1: انقر بزر الماوس الأيمن فوق المشروع في نافذة مستكشف المشروع لـ VI6.0 وحدد إضافة اتصال بيانات من القائمة المنبثقة. بعد إنشاء اتصال بقاعدة البيانات وفقًا لمطالبات التنقل المقدمة من VI، يقوم المستخدم بإضافة أمر بيانات للوصول إلى قاعدة البيانات من تطبيق ASP. وفي الوقت نفسه، ستشاهد كائن Data Environment ضمن الملف global.asa في نافذة Project Explorer.
الخطوة 2: انقر بزر الماوس الأيمن فوق كائن Data Environment وحدد خيار Add Data Command من القائمة المنبثقة لإضافة أمر بيانات Command1. وفقًا لموجه التنقل الخاص بـ VI6.0، يمكنك تحديد عبارة SQL في الصفحة الجينية للنافذة المنبثقة لخصائص Command1 وإدخال: حدد * من emp. اضغط على موافق للعودة.
الخطوة 3: بعد إنشاء أمر البيانات، قمت بإنشاء طريقة لكائن بيئة البيانات. يمكنك بعد ذلك استدعاء هذه الطريقة من البرنامج النصي، وستعيد الطريقة مجموعة سجلات إلى المستخدم.
thisPage.createDE() // في وضع SOM، تمثل هذه الصفحة كائن صفحة الويب الحالية، وتقوم طريقة createDE() بإنشاء كائن DE.
DE.Command1//تنفيذ أمر كائن DE، والذي يمكن أن تتبعه معلمات، وهو أمر مفيد جدًا عند إجراء الاستعلامات الشرطية.
تعيين rs=DE.rsCommand1//DE.rscommand1 يجعل كائن rs مكافئًا تمامًا لكائن ADO Recordset.
الخطوة 4: نظرًا لأن rs هو كائن ADO، فإن رمز تحويل الصفحة التالية يشير بالكامل إلى الطرق المتعددة المقدمة أعلاه ويتم تخطيه هنا.
وتشمل الأخرى الأساليب التي تم تنفيذها في التنقل في قاعدة البيانات لبرنامج FrontPage2000، وما إلى ذلك. وبما أنها لا تتعلق بهذا الموضوع، فقد تم حذفها هنا.
خلاصة القول، أن كل طريقة تم تقديمها سابقًا تحتوي على العديد من التقنيات الجديدة، والتي لا يمكن مناقشتها بعمق بسبب ضيق المساحة. تريد هذه المقالة فقط تقديم طرق مختلفة لبرمجة صفحات الويب ASP من خلال المثال المحدد لقلب الصفحة؛ دع الجميع يجربون الوظيفة القوية لـ VI6.0 في إعداد صفحات الويب ويفهمون ADO وكيفية استخدام عناصر تحكم DHTML وDTC ونموذج كائن SOM ونموذج كائن DEOM، وآمل أن يوفر لك المزيد من الخيارات والمراجع عند تجميع صفحات الويب.