في قواعد البيانات الكبيرة يصعب عرض البيانات في صفحة واحدة، و لهذا يجب
تقسيم النتائج على عدة صفحات. في ال ASP هناك عدة طرق لعمل ذلك.
** طريقة AbsolutePage
ـــــــــــــــ
ملف pagging1.asp في الملف المرفق .
تعتبر هذه الطريقة الأكثر كلفة لأعتمادها على جهاز الزبون لحفظ البيانات موقتا ..
في الكود :
RS.CursorLocation=adUseClient
هذه هي الجملة المكلفة و هذه الطريقة لا تعمل بدون استخدام قيمة adUseClient
CursorLocation القيمة الأفتراضية هي adUseServer..
CursorLocation : مكان حفظ البيانات الموقت ..
و سبب اخر يبطي عملية جلب البيانات هي أستخدام Record Set (يمكن تعريبها
كصندوق البيانات) المخصصة لأستخدامات سطح المكتب و الشبكات ، و ترك نوع
adOpenForwardOnly المخصص لأستخدامات الويب ...
** طريقة GetRows :
ـــــــــــــــ
ملف pagging2.asp في الملف المرفق .
من أسرع الطرق و كود جلب البيانات بسطر واحد فقط MyDate=Rs.GetRows()
تعطي هذه الدالة مصفوفة ذات أتجاهين MyData(ColumnID,RowID)
ColumnId = رقم العمود
RowID = رقم الصف
** طريقة Move و GetRows :
ـــــــــــــــــــ
هذي هي الطريقة الأمثل لجلب البيانات بال ASP
الكود:
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= عدد الصفوف في كل صفحة .
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)أضافة:
أنواع صناديق البيانات
ـــــــــــ
RS.Open SQL,ADO,RecordSetCursorType,LockType
RecordSetCursorType:عدد صحيح يحدد نوع ال RecordSet المستخدم
قيم RecordSetCursorType:
adOpenForwardOnly : أسرع الأنواع و أخفها التصفح في أتجاه واحد فقط ..
adOpenStatic : نسخة ثابتة من البيانات و تصفح البيانات في جميع الأتجاهات
adOpenKeyset : فتح نسخة من البيانات و مشاهدة المتغيرات ماعدا البيانات المدخلة
حديثا و تصفح البيانات في جميع الأتجاهات
adOpenDynamic : فتح نسخة ترى فيها جميع التغيرات التي تطرأ على البيانات من
تحديث و حذف و أدخال
القيم الرقمية:
Const adOpenForwardOnly = 0 Const adOpenKeyset = 1 Const adOpenDynamic = 2 Const adOpenStatic = 3
تجد هذه الثوابت و العديد منها في ملف أسمة adovbs.inc ( نسخة الفي بيسكربت )
و adojs.inc ( نسخة الجافا سكربت ) ..
ملاحظة:
دالة Ceil المستخدمة في كود طريقة Move و GetRows تجدها هنا
showthread.php?threadid=11353