إنشاء إجراء GoalerPageSp
@IntPageSize int،
@IntCurrPage int،
@سترفيلدس نفارتشار (2000)،
@strTable فارشار (200)،
@strWhere فارتشار (800)،
@strOrderType فارشار (200)،
@strKeyField فارتشار(50)
مثل
قم بضبط NOCOUNT على
أعلن @tmpSQL nvarchar(4000)--بيانات SQL الديناميكية للتخزين
أعلن @tmpWhere varchar(800)
DECLARE @tmpAndWhere varchar(800)--يستخدم لشروط الاستعلام في الصفحة N (>1)
أعلن @tmpOrder varchar(200)
أعلن @tmpD_X varchar(2)
أعلن @tmpMin_MAX varchar(3)
--ضبط الشروط--
إذا كان @strWhere فارغًا أو RTRIM(@strWhere)=''
البدء--لا توجد شروط استعلام
تعيين @tmpWhere = ''
تعيين @tmpAndWhere=''
نهاية
آخر
البدء--هناك شروط الاستعلام
تعيين @tmpWhere=' أين '+@strWhere
قم بتعيين @tmpAndWhere=' و'+@strWhere
نهاية
--تعيين الفرز--
إذا @strOrderType != 0
ابدأ--ترتيب عكسي
ضبط @tmpD_X = '<'
ضبط @tmpMin_MAX = 'MIN'
SET @tmpOrder=' ORDER BY ' +@strKeyField+ ' DESC'
نهاية
آخر
يبدأ
ضبط @tmpD_X = '>'
ضبط @tmpMin_MAX = 'MAX'
تعيين @tmpOrder='الترتيب حسب' +@strKeyField+ 'ASC'
نهاية
--استعلام SQL--
إذا @IntCurrPage=1
تعيين @tmpSQL='SELECT TOP '+CAST(@IntPageSize AS VARCHAR)+' '+@strFields+' FROM '+@strTable+' '+@tmpWhere+' '+@tmpOrder
آخر
SET @tmpSQL='SELECT TOP '+CAST(@IntPageSize AS VARCHAR)+' '+@strFields+' FROM '+@strTable+' أين ('+@strKeyField+' '+@tmpD_X+' (SELECT '+@tmpMin_MAX+'(' +@strKeyField+') من (اختر TOP '+CAST(@IntPageSize*(@IntCurrPage-1) AS VARCHAR)+' '+@strKeyField+' FROM '+@strTable+' '+@tmpWhere+' '+@tmpOrder+') AS T))'+@tmpAndWhere+' ' +@tmpOrder
إكسيك (@tmpSQL)
يذهب
طريقة الاتصال:
حجم الصفحة = 20
strTable= [TableName] 'اسم جدول البيانات
strFields= Field1,Field2,Field3,Field4 'أسماء الأعمدة المراد قراءتها
strKeyField=Field1'المفتاح الأساسي: هنا من المفترض أن Field1 هو المفتاح الأساسي
strWhere='الحالة: FieldA='b'
strOrderType=1'طريقة الفرز: 1 هو ترتيب عكسي، 0 هو ترتيب تسلسلي
CurrPage=Request.QueryString(صفحة)
IF(CurrPage<> و Isnumeric(CurrPage))ثم
CurrPage=CLNG(CurrPage)
إذا كانت (CurrPage<1) ثم CurrPage=1
آخر
صفحة العملة=1
نهاية إذا
إذا strWhere<> ثم
tmpWhere= أين &strWhere
آخر
tmpWhere=
نهاية إذا
إذا(الجلسة(التسجيل)<>)ثم
IF(SESSION(strWhere)<>strWhere)ثم
RecCount=Conn.Execute(SELECT COUNT(&strKeyField&) من &strTable&tmpWhere)(0)
SESSION(RecCount)=RecCount
SESSION(strWhere)=strWhere
آخر
RecCount=SESSION(RecCount)
نهاية إذا
آخر
RecCount=Conn.Execute(SELECT COUNT(*) FROM &strTable&tmpWhere)(0)
SESSION(RecCount)=RecCount
SESSION(strWhere)=strWhere
نهاية إذا
إذا (RecCount MOD IntPageSize <>0) إذن
IntPageCount=INT(RecCount/IntPageSize)+1
آخر
IntPageCount=RecCount/IntPageSize
نهاية إذا
SET Cmd=Server.CreateObject(Adodb.Command)
كمد.CommandType=4
SET Cmd.ActiveConnection=Conn
Cmd.CommandText=GoalerPageSp
Cmd.Parameters.Append Cmd.CreateParameter(@IntPageSize,4,1,4,IntPageSize)
Cmd.Parameters.Append Cmd.CreateParameter(@IntCurrPage,4,1,4,CurrPage)
Cmd.Parameters.Append Cmd.CreateParameter(@strFields,200,1,2000,strFields)
Cmd.Parameters.Append Cmd.CreateParameter(@strTable,200,1,200,strTable)
Cmd.Parameters.Append Cmd.CreateParameter(@strWhere,200,1,800,strWhere)
Cmd.Parameters.Append Cmd.CreateParameter(@strOrderType,4,1,4,strOrderType)
Cmd.Parameters.Append Cmd.CreateParameter(@strKeyField,200,1,50,strKeyField)
تعيين RS=Cmd.Execute()
إذا تم إعادة العد <1 ثم
الاستجابة.الكتابة (لا يوجد سجل)
آخر
GetRecord=RS.GetRows(IntPageSize)
بالنسبة إلى i=0 إلى Ubound(GetRecord,2)
Response.Write(GetRecord(0,i),GetRecord(1,i),GetRecord(2,i))'...محتوى الإخراج
التالي
GetRecord=Null
نهاية إذا
ضبط RS = لا شيء
يرجى من الأصدقاء المفيدين تصحيح الأخطاء بنفسك باستخدام ASP وتخزينها في SESSION. إذا قمت بحساب إجمالي السجلات في كل مرة، فسيستغرق الأمر وقتًا طويلاً بالطبع الإجراء المخزن، ومن الممكن أيضًا تسجيل وإرجاع العدد الإجمالي للصفحات، وفيما يلي الكود:
--الحصول على العدد الإجمالي للسجلات--
تعيين @tmpSQL='SELECT @getRecordCounts=COUNT('+@strKeyField+') من '+@strTable+@tmpWhere
EXEC sp_executesql @tmpSQL، N'@getRecordCounts إخراج int'،@getRecordCounts OUTPUT
--الحصول على العدد الإجمالي للصفحات--
SET @tempFolatNumber=@getRecordCounts%@IntPageSize
إذا @getRecordCounts<=@IntPageSize
تعيين @getPageCounts=1
آخر
يبدأ
إذا @tempFolatNumber != 0
تعيين @getPageCounts=(@getRecordCounts/@IntPageSize)+1
آخر
تعيين @getPageCounts=(@getRecordCounts/@IntPageSize)
نهاية
لا تنس إرجاع معلمات التعريف:
@getRecordCounts إخراج int،--إرجاع إجمالي السجلات
@getPageCounts إخراج int - يُرجع العدد الإجمالي للصفحات