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

معلومة/تقسيم مجموعات البيانات الضخمة إلى صفحات

مغلق
بدأه SOLO.NET في 24 نوفمبر 2005 · 18 رد · 1,586 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

ليس من المنطقيّ عرض مئات السجلات في صفحة واحدة.. ليس فقط لبطء تحميلها، ولكن أيضا لصعوبة تصفّحها.

لهذا كان الحلّ هو تقسيم هذه السجلات إلى مجموعة صفحات لتحسين الاداء

التطبيق

المثال التالى يوضح كيفية تطبيق هذا الاسلوب

سنستخدم قاعدة البيانات Northwind ونعمل فيها اجراء مخزن الذى يعيد الصفحات الاول،التاالى،السابق،الاخير او صفحة محددة وكل صفحة تحتوى على عشر سجلات من الجدول Order

CREATE PROCEDURE SOLO_PageOrders
    @PageCommand nvarchar(10),
    @FirstOrderId int = null,
    @LastOrderId int = null,
    @PageCount int output,
    @CurrentPage int output
AS
    SET NOCOUNT ON
    
    select @PageCount = CEILING(COUNT(*)/10) from Orders
    
    -- first page is requested or previous page when the current
    -- page is already the first
    if @PageCommand = 'FIRST' or (@PageCommand = 'PREVIOUS' and
        @CurrentPage <= 1)
    begin
        select top 10 *
        from Orders
        order by OrderID
        
        set @CurrentPage = 1
        
        return 0
    end
    
    -- last page is requested or next page when the current
    -- page is already the last
    if @PageCommand = 'LAST' or (@PageCommand = 'NEXT' and
        @CurrentPage >= @PageCount)
    begin
        select a.*
        from
            (select TOP 10 *
            from orders
            order by OrderID desc) a
        order by OrderID
        
        set @CurrentPage = @PageCount
        
        return 0
    end
    
    if @PageCommand = 'NEXT'
    begin
        select TOP 10 * 
        from Orders
        where OrderID > @LastOrderId
        order by OrderID
        
        set @CurrentPage = @CurrentPage+1
        
        return 0
    end
    
    if @PageCommand = 'PREVIOUS'
    begin
        select a.*
        from (
            select TOP 10 *
            from Orders
            where OrderId < @FirstOrderId
            order by OrderID desc) a
        order by OrderID
        
        set @CurrentPage = @CurrentPage-1
        
        return 0
    end
    
    if @PageCommand = 'GOTO'
    begin
        if @CurrentPage < 1
            set @CurrentPage = 1
        else if @CurrentPage > @PageCount
            set @CurrentPage = @PageCount
        
        declare @RowCount int
        set @RowCount = (@CurrentPage * 10)
        
        exec ('select * from
        (select top 10 a.* from
        (select top ' + @RowCount + ' * from Orders order by OrderID) a
        order by OrderID desc) b
        order by OrderID')        
        
        return 0
    end
    
    return 1

هذا الاجراء يحتوى على الممررات الاتية:

@PageCommand

وهو ممر داخل input parameter وهو يقبل احد القيم التالية : FIRST, LAST, PREVIOUS, NEXT, or GOTO وهو يحدد صفحة النتائج العائدة الى العميل

@First OrderId

وهو ممر داخل input parameter وهو يحتوى على رقم الطلب OrderID للسجل الاول فى صفحة البيانات

@Last OrderId

وهو ممر داخل input parameter وهو يحتوى على رقم الطلب OrderID للسجل الاخير فى صفحة البيانات

@PageCount

وهو ممر خارج output parameter ويعيد عدد الصفحات الممكنة حيث كل صفحة تحتوى على عشر سجلات فقط

@CurrentPage

وهو ممر خارج output parameter وهو يعيد رقم الصفحة الحالية للبيانات المعروضه

البرنامج موجود فى المرفقات مع الكود كل ما عليك هو اضافة الاجراء المخزن فى قاعدة البيانات المذكورة اعلاه

بالتوفيق

Paging Demo.zip

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#2

جاري التحميل ...

وحقيقة كنت سأطرح هذا السؤال اليوم وسبقتني بالإجابة

جعله الله في ميزان حسناتك

<< CLICK TO START>>

post-41869-046528000%201305052277.jpg

ليس أن تجد حلا بل أن تجد الافضل

أن تصـــنع الخـيال هذا هوا الأفضل</span>

#3

هناك مشكلة فالملف المرفق

الرجاء إعادة رفعه ..

<< CLICK TO START>>

post-41869-046528000%201305052277.jpg

ليس أن تجد حلا بل أن تجد الافضل

أن تصـــنع الخـيال هذا هوا الأفضل</span>

#4

مشكورة على الملاحظة

البرنامج فى المرفقات

Paging Demo.rar

تم تعديل هذه المشاركة بواسطة SOLO.NET في 24 نوفمبر 2005 في 16:26

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#5

عمل مشكور ومجهود مبارك ...

بارك الله فيك وزادك الله علماً

#6

بارك الله فيك أخي, مطوياتك و مقالاتك تستحق المتابعة.

في المثال يتضح المقال

#7

الله ينور

لكن إسمح لي أسأل سؤال بعيد

أنا عملت برنامج بسيط عبارة عن وور د

لكن أنا عايز أفتح أمر new بواسطة أو عن طريق MDI وينفذ على RT

#8

اخوتى الغملاسى وهارون POWER _GIRL بارك الله فيكم على المرور والتشجيع

اخmorshidy مشكور ولكن ما علاقة سؤالك بالموضوع؟؟......> <_<

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#9

SQLDMO.SQLServer

ما المشكلة :unsure: هنا أيها المبرمج المحترف SOLO.NET B)

<< CLICK TO START>>

post-41869-046528000%201305052277.jpg

ليس أن تجد حلا بل أن تجد الافضل

أن تصـــنع الخـيال هذا هوا الأفضل</span>

#10
اقتباس
SQLDMO.SQLServer

ما المشكلة  هنا أيها المبرمج المحترف SOLO.NET

ماهى مشكلتك؟ :rolleyes:

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#11

الخطأ يظهر مع كل الجمل التي بها..

SQLDMO.SQLServer

وهوا غير متعرف عليها :blink: !؟

<< CLICK TO START>>

post-41869-046528000%201305052277.jpg

ليس أن تجد حلا بل أن تجد الافضل

أن تصـــنع الخـيال هذا هوا الأفضل</span>

#12

السلام عليكم

اضيفى مرجع لـSQLDMO

على كل حال لو كانت قاعدة البيانات Norhtwind موجودة فى SQL server فلست بحاجة الى استخدام الكود فهو مخصص لتنصيب هذه القاعدة على msde من net sdk

بالتوفيق

تم تعديل هذه المشاركة بواسطة SOLO.NET في 27 نوفمبر 2005 في 16:45

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#13

كيف لي إضافة المرجع ؟ :D

<< CLICK TO START>>

post-41869-046528000%201305052277.jpg

ليس أن تجد حلا بل أن تجد الافضل

أن تصـــنع الخـيال هذا هوا الأفضل</span>

#14

جزاك الله خيرا

الموضوع ده مهم جدا

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#15

جزاك الله كل الخير و زادك الله حسنة على كل حرف كتبته في ميزان حسناتك

#16

بارك الله فيكم جميعا

اختىPOWER _GIRL من قائمة Projectلبيئة التطويراختارى Add Refrence

بتطلع نافذة اضافة مرجع فى التبويب COM ابحثى عن Microsoft SQLDMO Library 8.x

بالتوفيق

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#17

شكرا لك :lol: أسعد الله أيامك

<< CLICK TO START>>

post-41869-046528000%201305052277.jpg

ليس أن تجد حلا بل أن تجد الافضل

أن تصـــنع الخـيال هذا هوا الأفضل</span>

#19

شكرا لك في البداية :

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

لكني ما اجمل تقسيم الصفحات في قاعدة البيانا MySql :

SELECT * FROM emp WHER E Sal > 2000 LIMIT 0,10

يعني رجع لي الحقول من اول حقل حتى العاشر طيب شوف التالي :

SELECT * FROM emp WHER E Sal > 2000 LIMIT 10,20

من الحقل العاشر إلى الحقل العشرين .

فعلاً عبارة Limit أكثر من رائعة في لغة MySql. :rolleyes:

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

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