PDA

View Full Version : واکشی صفحه به صفحه از جدول



amin joon
یک شنبه 25 شهریور 1386, 11:33 صبح
با سلام

من یه جدول دارم که میخوام به صورت صفحه به صفحه اون رو به کاربر نشون بدم.(نمیخوام از کنترل های آماده استفاده کنم.)
یک روش اینه که در هر بار نمایش صفحه جدید کل جدول رو لود کرد و بعد رکوردهای اضافی رو حذف کرد و نتیجه رو به کاربر نشون داد.
میخواستم ببینم آیا میشه با استفاده از یک Stored procedure و ارسال شماره صفحه به اون رکوردهایی رو که تو اون صفحه ی بخصوص هست رو واکشی کرد.
در واقع من دنبال یک دستور SELECT هستم که بتونه رکوردهی (n)ام تا (n+10) ام رو برگردونه.

با تشکر

Hamid.Kad
یک شنبه 25 شهریور 1386, 19:00 عصر
http://barnamenevis.org/forum/showthread.php?t=75741

ali643
یک شنبه 25 شهریور 1386, 21:45 عصر
یک پیاده سازی تر و تمیز از این قابلیتی که می خواید استفاده کنید رو بهروز راد در تاپیک اعمال متداول باGridview انجام داده.

http://barnamenevis.org/forum/showthread.php?t=50594

به spBindGridView توجه کن.

miladr
دوشنبه 26 شهریور 1386, 10:29 صبح
ببین صفحاتی که می خوای خروجی بگیری بر اساس یه فیلدی سورت شدن دیگه مثلا تاریخ که تعیین می کنه کدوم فیلد باید تو کدوم صفحه بمونه این کد زیر بر اساس تاریخه.
stored procedure دو تا ورودی داره یکی شماره رکوردی که اول صفحه ست و دومی تعداد رکورد هایی که خروجی می ده.

ALTER PROCEDURE dbo.selectpage
(@startRowIndex int, @maximumRows int)
AS
SET NOCOUNT ON;
DECLARE @mydate datetime
SET ROWCOUNT @startRowIndex
SELECT @mydate = news_date
FROM news_tb
ORDER BY news_date DESC
SET ROWCOUNT @maximumRows
SELECT *
FROM news_tb
WHERE (news_date <= @mydate)
ORDER BY news_date DESC

amin joon
دوشنبه 26 شهریور 1386, 13:50 عصر
با تشکر از حمید KAD

من قبل از اینکه این تاپیک رو مطرح کنم ، تاپیک های قبلی رو جستجو کرده بودم. ولی عجیبه که این تاپیک رو ندیده بودم !!!

مشکل من به کمک این تاپیک و کمی بررسی بیشتر در این زمینه حل شد.

کدی که برای حل مشکلم نوشتم اینجوریه:



CREATE PROCEDURE prcSelectPage
@page int
AS
select IDENTITY(int,1,1) as rowNum,* into tblNew
from tblOld
select * from tbNew where rowNum between (10*@page+1) and (10*@page+10)
drop table tbNew
GO


کار تابع Identity اینه که یک شناسه برای هر ردیف ایجاد میکنه. پارامتر اول نوع شناسه - پارامتر دوم مقداری هست که باید به اولین ردیف داده شود و آخرین پارامتر مقدار افزایش را مشخص میکند.

از miladr هم ممنون. اگه میشه یکم درباره کدتون توضیح بدید. بعضی از قسمتهاش برام نا آشنا هست. مثل RowCount و NoCount .

hm1984ir
سه شنبه 27 شهریور 1386, 09:10 صبح
سلام به همه
من از این روش استفاده می کنم


USE dbTemp
GO
WITH OrderedOrders AS
(SELECT field1,Field2,ROW_NUMBER() OVER (order by field3)as RowNumber
(FROM tblTemp

* SELECT
FROM OrderedOrders
WHERE RowNumber between 30 and 40