درس إضافي.. قام بكتابة الدرس: Mr.ASP
تقسيم النتائج على عدة صفحات
في قواعد البيانات الكبيرة يصعب عرض البيانات في صفحة واحدة، و لهذا يجب تقسيم النتائج على عدة صفحات. في ال ASP هناك عدة طرق لعمل ذلك.
طريقة AbsolutePage
------------------------------
ملف pagging1.asp في الملف المرفق .
pagging1+2.aspتعتبر هذه الطريقة الأكثر كلفة لاعتمادها على جهاز الزبون لحفظ البيانات مؤقتا ..
في الكود :
Code Sample |
RS.CursorLocation=adUseClient
|
هذه هي الجملة المكلفة و هذه الطريقة لا تعمل بدون استخدام قيمة adUseClient
CursorLocation القيمة الافتراضية هي adUseServer..
CursorLocation : مكان حفظ البيانات المؤقت ..
و سبب آخر يبطئ عملية جلب البيانات هي استخدام Record Set (يمكن تعريبها
كصندوق البيانات) المخصصة لاستخدامات سطح المكتب و الشبكات ، و ترك نوع
adOpenForwardOnly المخصص لاستخدامات الويب ...
طريقة GetRows
-----------------------------------
ملف pagging2.asp في الملف المرفق .
من أسرع الطرق و كود جلب البيانات بسطر واحد فقط MyDate=Rs.GetRows()
تعطي هذه الدالة مصفوفة ذات أتجاهين MyData(ColumnID,RowID)
ColumnId = رقم العمود
RowID = رقم الصف
طريقة Move و GetRows
-------------------------------------
هذي هي الطريقة الأمثل لجلب البيانات بال ASP
الكود:
Code Sample |
Const PageSize=10 Set RS=ADO.Execute(SQL,NumOfRecAff) TotalPages=Ceil( NumOfRecAff / PageSize) RS.Move (Page-1) * PageSize MyData=RS.GetRows(PageSize)
|
هذه الطريقة لا تعمل مع قواعد بيانات أكسس لسبب واحد المتغير NumOfRecAff
في دالة Execute تأخذ القيمة -1 و في قواعد البيانات الأخرى مثل MySQL
تأخذ عدد صفوف البيانات الناتجة، و يمكن تعديل الكود ليعمل مع أي قاعدة بيانات ،
مثلا في أكسس ما عليك سوى أيجاد عدد السجلات باستعلام مثل
select count(*) from TableName Where ColunmName=??
تعتبر هذه الطريقة الأمثل و الأفضل لجلب البيانات بال ASP لماذا؟
لأنها تأخذ العدد المطلوب من البيانات PageSize لعرضها ،
و تعمل على جميع قواعد البيانات..
طريقة خاصة بقواعد بيانات MySQL
--------------------------------
للقواعد بيانات MySQL طريقة خاصة لعرض النتائج على عدة صفحات . تستخدم دالة Limit M,N
M=الصفحة الحالية الصفحة الأولى = 0 .
N= عدد الصفوف في كل صفحة .
Code Sample |
Const PageSize=10 Page=Request("Page") If Page="" Or Not isNumeric(Page) Then Page=1 If Page<0 Then Page=0 Page=Page-1 SQL1="select count(*) From TableName Where Condition"
Set RS=ADO.Execute(SQL1) NumOfRecAff=RS(0) Set RS=Nothing TotalPages=Ceil( NumOfRecAff / PageSize) If Page>TotalPages Then Page=TotalPages SQL2="select * From TableName Where Condition Limit " & Page & "," & PageSize Set RS=ADO.Execute(SQL2)
|
إضافة: أنواع صناديق البيانات
-----------------------------
Code Sample |
RS.Open SQL,ADO,RecordSetCursorType,LockType
|
RecordSetCursorType:عدد صحيح يحدد نوع ال RecordSet المستخدم
قيم RecordSetCursorType:
adOpenForwardOnly : أسرع الأنواع و أخفها التصفح في اتجاه واحد فقط ..
adOpenStatic : نسخة ثابتة من البيانات و تصفح البيانات في جميع الاتجاهات
adOpenKeyset : فتح نسخة من البيانات و مشاهدة المتغيرات ماعدا البيانات المدخلة
حديثا و تصفح البيانات في جميع الاتجاهات
adOpenDynamic : فتح نسخة ترى فيها جميع التغيرات التي تطرأ على البيانات من
تحديث و حذف و أدخال
القيم الرقمية:
Code Sample |
Const adOpenForwardOnly = 0 Const adOpenKeyset = 1 Const adOpenDynamic = 2 Const adOpenStatic = 3
|
تجد هذه الثوابت و العديد منها في ملف أسمة adovbs.inc ( نسخة الفي بي سكربت )
و adojs.inc ( نسخة الجافا سكربت ) ..
قام بكتابة الدرس: Mr.ASP