الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تقسيم النتائج على عدة صفحات

مغلق
بدأه Mr.ASP في 6 مايو 2002 · 12 رد · 1,474 مشاهدة · في منتدى تصميم صفحات الويب
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

في قواعد البيانات الكبيرة يصعب عرض البيانات في صفحة واحدة، و لهذا يجب

تقسيم النتائج على عدة صفحات. في ال 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

#2

حدثت مشكلة عند أرفاق الملف

---

الصورة التي تحاول إرفاقها موجودة مسبقاً ..

إذا كنت تريد تعديلها فتستطيع ذلك من خلال

وجودها في الموضوع: كيف تقسم الصفحات حسب الحقول ؟؟

---

Warning: open_basedir restriction in effect. File is in wrong directory in /usr/local/psa/home/vhosts/arabteam2000.com/httpdocs/vb/admin/functions.php on line 1678

Warning: fopen("/tmp/phpPH330d", "rb") - Operation not permitted in /usr/local/psa/home/vhosts/arabteam2000.com/httpdocs/vb/admin/functions.php on line 1678

Warning: Supplied argument is not a valid File-Handle resource in /usr/local/psa/home/vhosts/arabteam2000.com/httpdocs/vb/admin/functions.php on line 1679

Warning: Supplied argument is not a valid File-Handle resource in /usr/local/psa/home/vhosts/arabteam2000.com/httpdocs/vb/admin/functions.php on line 1680

---

أرجو من المشرف أصلاح هذه المشكلة لأتمكن من أرفاق الملف

#3

المعذرة أخي لا يمكن إرفاق الملف فهذة الخاصية مغلقة

:o

#4

تفضلوا

http://www.alnoor-world.com/asp/addon/pagging2.zip

بس ماشوف أقبال على الدرس ... ليش ؟

دمه ثقيل أو أنا الي ... ؟

#5

هذا هو الوضع يا أخ Mr.asp

هذا السؤال تكرر عدة مرات على العموم مرحبا بك وبكل المحترفين وسوف نضع الدرس في الصفحة الرئيسية حتى لا يضيع وسط الدروس إحتفظ به لديك فأنا الأن أحاول ترتيب الدروس وسو ف أطلبه منك إن شاء الله لوضعه في الصفحة الرئيسية

#6

كذا يكون أفضل و الكود موجود متى ماطلبنه ...

إلى كل من يواجة صعوبة في فهم الكود:

الرجاء طرح الأسئلة هنا ليستفيد الجميع .

و أرجو من المبرمجين المحترفين أبداء ملاحظاتهم على الكود ...

#7

السلام عليكم

سؤال بيسط للأخ Mr.ASP بما ان رابط الملف من موقعhttp://www.alnoor-world.com

فهل انت صاحب الموقع .... لان عندي بعض الاستفسارات على الدروس الموجوده في الموقع فقد إستصعبت علي بعض الامور ولم استطع ان اكمل باقس الدروس ....

ارجوا الإفاده

#8

لا هو صديق عزيز علي ، صاحب الموقع موجود بالمنتدى أسمه بو محمد

تقدر تراسلة من المنتدى

private.php?s=&action=newmessage&userid=3215

#9

ما قصرت اخ Mr.ASP

بس ودي اسأل ممكن يفيدني هذا الكود ..

<%

dim PageSize ' عدد السجلات التي ستظهر في الصفحة

dim PageCount '  عدد الصفحات

dim currenpage '  الصفحة التي نريد عرضها

dim rs 



pagesize = 10



If Request.QueryString("page") = "" Then

currenpage = 1

Else

currenpage = CInt(Request.QueryString("page"))

End If



' جملة الاستعلام الخاصة بك تضعها هنا



rs.PageSize = PageSize



' نحصل على عدد الصفحات بواسطة عدد السجلات

PageCount = rs.PageCount



' في حالة حدوث خطأ ووضع رقم غير موجود

If currenpage > PageCount  Then currenpage = PageCount

If currenpage < 1 Then currenpage = 1



' الذهاب للصفحة المختارة	

rs.AbsolutePage = currenpage 

%>



<p><font size="1">Page <%= currenpage  %> 

of <%= PageCount %></font></p>

وكيف ممكن اسوي لينك لصفحه التاليه والسابقة ؟

وشكرا :)

#10

ASP-Boy :

نزلت الملف المرفق؟

تلاحظ بكل مل بالأخير هالكود

If Pages>1 Then

...

...

End if

/code2]

الكود واضح ؟

شكلي مافهمت قصدك؟

#11

بعض المراجع و الدروس:

لماذا طريقة GetRows أفضل الطرق لأستخراج البيانات

read Why GetRows() Is Best to Fetch Data.

http://www.learnasp.com/Advice/WhyGetRows.asp

...

سؤال: كيف يتم تحويل كائن RecordSet إلى مصفوفة ؟ و العكس

FAQ: How can I convert a Recordset into an array? Also, how can I convert an array into a Recordset?

http://www.aspfaqs.com/aspfaqs/ShowFAQ.asp?FAQID=161

...

كيف أعرض البيانات بطرقة المصفوفات بدلا من Do ... While ..MoveNext

How do I display data on a web page using arrays instead of Do...While...MoveNext...???...

http://www.aspfaqs.com/aspfaqs/ShowFAQ.asp?FAQID=190

....

#13

من هذا الدرس تعلمنا عرض النتائج بعدة صفحات بعدة طرق

و هي طرق صعبه على أغلب القراء على ما أظن ، هناك طريقة

سهلة الفهم و غير معقدة و تعمل على جميع قواعد البيانات من

أكسس إلى أوراكل . قد يتسائل أحدكم " ليش كل هاالتعقيد ؟ "

أو " ليش ماحطيتها الطريقة الأولى؟" أو أي سؤال مشابة ..

السبب أعتقد أنه واضح عن الأخوة المشرفيين على الأقل، لأني

حبيت أعقدها شوي علشان تتعلموا و تسألوا و يصير فيه نقاش،

بس ماشاء الله عليكم مافيه أسئلة أكيد فاهمين و للدرس حافظيين

أتمنى ذلك ...

الدرس في قسم قواعد البيانات

هذا الموضوع مغلق.

مواضيع مشابهة