تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
عمل pageing للداتا جريد من خلال جمل السيكوال
#1
السلام عليكم ورحمة الله

كنت قد قرات موضوع استاذى ابو ايهاب الخاص بعمل pageing للداتا جريد فيو وحملت المثال وشوفته ومثال رائع ولهذا رايت ان اضيف جزء مكمل لموضوع استاذى ابو ايهاب

مثال اخى ابو ايهاب يقوم على ارجاع جميع بيانات الجدول من قاعدة البيانات ووضعها في داتا سيت او داتا تيبل ثم بعدها يتم عمل pageing من الداتا تيبل الموجود والذى تم ملأه بكل البيانات

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

وعندما عملت جملة استعلام بسيطة لارجاع جميع البيانات مثل الجملة الاتية والتى يعرفها اكيد كل المبرمجين
select * from table
كان متوسط زمن التنفيذ 14 ثانية مع العلم ان امكانيات جهازى عاليه جدا جدا

تخيل مثلا لو برنامجك على جهاز متوسط او على شبكة ضعيفة

سيكون البطء هو شعار البرنامج

ولهذا اعتقد ان الافضل عمل pageing من خلال جملة الاستعلام نفسها وذلك كالاتى


مثلا الجدول به الف سجل وانا اريد عرض عشر سجلات في الداتا جريد فيو في كل صفحة

مثلا عند ارجاع العشر سجلات الاولى تكون الجملة كالاتى

select top 10 * from table

هذه الجملة تقوم بارجاع فقط العشر سجلات الاولى

حسنا
على سبيل المثال اريد ارجاع العشر سجلات من السجل رقم 900 الى السجل رقم 910
وهى اساس عملية ال pageing التى تقوم على تقسيم البيانات على الصفحة في الداتا جريد فيو
اذن كيف سيكون شكل جملة الاستعلام
ستكون كالاتى


إقتباس :select top 10 * from mytable where id not in (select top 900 id from table)


هذه العملية لن تستغرق على اسوأ الظروف اكثر من ثانية واحدة او ثانيتين في حالة كان الجهاز ضعيف جدا
هل الفرق واضح بين زمنى التنفيذ

حتى لو كان الجدول به مليون سجل او اكثر ونفذت نفس الطريقة

مثلا



select top 10 * from mytable where id not in (select top 900000 id from table)

هذه الجملة تقوم بارجاع العشر سجلات الموجودين بعد التسعمائة الف سجل الاوائل
نفس النتيجة الزمنية تقريبا

فرق واضح طبعا


واتمنى من الله ان يكون الموضوع مفيد للاعضاء

وشكرا
الرد }}}
تم الشكر بواسطة:
#2
السلام عليكم

موضوع في غاية الأهمية

أظن أنه تمت إضافة خاصية RowNumber أو ما يشبهها في الـSQL Server

مقال للاستاذ الغائب تركي العسيري يشرح طريقة تجزيء البيانات بنفس طريقة الأخ صاحب الموضوع
http://www.al-asiri.com/View1/Pages/Reco...5c7a15c6a7



طبعا انا جربت هذه الطريقة واستبدلتها بأخرى، لأني كل ما اطلبه هو Row Number بدلالة AutoNumber ، فكان اعتمادي على Data Reader حيث أقوم بتحريكه إلى الصف الذير أريد فقط لكي أحصل على ID الذي تبدأ به الصفحة ثم بعدها أضع الشرط Where ID<=value
الرد }}}
تم الشكر بواسطة:
#3
السلام عليكم

جميل بارك الله فيك
الرد }}}
تم الشكر بواسطة:
#4
جزاك الله كل خير
و مشكور على مجهودك و مشاركتك
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  مدخل إلى برمجة الأجهزة الكفية Pocket PC من خلال .net RaggiTech 0 2,265 14-10-12, 01:33 PM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم