![]() |
|
عمل pageing للداتا جريد من خلال جمل السيكوال - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : الاقسام الاخرى (http://vb4arb.com/vb/forumdisplay.php?fid=74) +--- قسم : قسم المقالات العام (http://vb4arb.com/vb/forumdisplay.php?fid=85) +--- الموضوع : عمل pageing للداتا جريد من خلال جمل السيكوال (/showthread.php?tid=9318) |
عمل pageing للداتا جريد من خلال جمل السيكوال - delegater - 18-06-13 السلام عليكم ورحمة الله كنت قد قرات موضوع استاذى ابو ايهاب الخاص بعمل 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) هذه الجملة تقوم بارجاع العشر سجلات الموجودين بعد التسعمائة الف سجل الاوائل نفس النتيجة الزمنية تقريبا فرق واضح طبعا واتمنى من الله ان يكون الموضوع مفيد للاعضاء وشكرا عمل pageing للداتا جريد من خلال جمل السيكوال - أبو يعقوب - 18-06-13 السلام عليكم موضوع في غاية الأهمية أظن أنه تمت إضافة خاصية RowNumber أو ما يشبهها في الـSQL Server مقال للاستاذ الغائب تركي العسيري يشرح طريقة تجزيء البيانات بنفس طريقة الأخ صاحب الموضوع http://www.al-asiri.com/View1/Pages/Record.ASPX?Action=OPN&ID=59836175-bf27-4ae4-b2ff-6d5c7a15c6a7 طبعا انا جربت هذه الطريقة واستبدلتها بأخرى، لأني كل ما اطلبه هو Row Number بدلالة AutoNumber ، فكان اعتمادي على Data Reader حيث أقوم بتحريكه إلى الصف الذير أريد فقط لكي أحصل على ID الذي تبدأ به الصفحة ثم بعدها أضع الشرط Where ID<=value عمل pageing للداتا جريد من خلال جمل السيكوال - Sajad - 18-06-13 السلام عليكم جميل بارك الله فيك عمل pageing للداتا جريد من خلال جمل السيكوال - rinawi - 02-07-13 جزاك الله كل خير و مشكور على مجهودك و مشاركتك |