PDA

View Full Version : سوال: این صفحه بندی چطور کار می کنه؟



bftarane
پنج شنبه 11 مهر 1392, 19:31 عصر
سلام. لطفاً این کد رو ببینید

SELECT * FROM ( SELECT Top 5 sub.ClientCode FROM ( SELECT TOP 15 tblClient.ClientCode FROM tblClient ORDER BY tblClient.ClientCode ) sub ORDER BY sub.ClientCode DESC ) subOrdered ORDER BY subOrdered.ClientCode
منبعش اینه: http://stackoverflow.com/questions/1900635/how-do-i-implement-pagination-in-sql-for-ms-access
لطفاً این رو توضیح بدید چطوری صفحه بندی انجام میده؟ اون StartPos که گفته خوب دفعه اول می تونیم دستی 1 بدیم منظورم شماره اولین رکورده ولی وقتی کاربر صفحه 2 رو مثلاً کلیک کرد تکلیف این
StartPosچی میشه؟

bftarane
جمعه 12 مهر 1392, 13:52 عصر
کوئری زیر در Sql Server کار میکنه
declare @RecordCount int
declare @PageSize int=4
declare @PageIndex int=3
Select @RecordCount= Count(*) From tbl_product


SELECT *
FROM (
SELECT Top (@PageSize) sub.*
FROM (
SELECT TOP ((@RecordCount) - (((@PageIndex) - 1) * (@PageSize))) tbl_product.*
FROM tbl_product
ORDER BY tbl_product.pd_id Desc
) sub
ORDER BY sub.pd_id Asc
) subOrdered
ORDER BY subOrdered.pd_id
از لینکهای زیر کمک گرفتم
http://www.jertix.org/en/blog/programming/implementation-of-sql-pagination-with-ms-access.html
و لینکی که در بالا گذاشتم
ولی همین کدها در Access کار نمی کنه و ارور میده.
ایرادش چیه؟

Abbas Amiri
جمعه 12 مهر 1392, 16:40 عصر
کوئری زیر در Sql Server کار میکنه
declare @RecordCount int
declare @PageSize int=4
declare @PageIndex int=3
Select @RecordCount= Count(*) From tbl_product


SELECT *
FROM (
SELECT Top (@PageSize) sub.*
FROM (
SELECT TOP ((@RecordCount) - (((@PageIndex) - 1) * (@PageSize))) tbl_product.*
FROM tbl_product
ORDER BY tbl_product.pd_id Desc
) sub
ORDER BY sub.pd_id Asc
) subOrdered
ORDER BY subOrdered.pd_id
از لینکهای زیر کمک گرفتم
http://www.jertix.org/en/blog/programming/implementation-of-sql-pagination-with-ms-access.html
و لینکی که در بالا گذاشتم
ولی همین کدها در Access کار نمی کنه و ارور میده.
ایرادش چیه؟

سلام
برای استفاده در اکسس می توانید از روش زیر استفاده کنید:



Sub paginationQuery(pageSize As Integer, PageIndex As Integer)
Dim strSQL As String, QueryName As String
Dim RecCount As Integer
QueryName = "MyQuery" ' Put your favorite query name instead "MyQuery"
RecCount = DCount("*", "tbl_product")
strSQL = "SELECT * FROM " & _
"(SELECT Top " & pageSize & " sub.* FROM " & _
"(SELECT TOP " & RecCount - ((PageIndex) - 1) * pageSize & " tbl_product.* FROM " & _
"tbl_product " & _
"ORDER BY tbl_product.pd_id Desc " & _
") sub " & _
"ORDER BY sub.pd_id Asc " & _
") subOrdered " & _
"ORDER BY subOrdered.pd_id"
Dim qdf As QueryDef
On Error Resume Next
Set qdf = CurrentDb.CreateQueryDef(QueryName, strSQL)
CurrentDb.QueryDefs.Append qdf
CurrentDb.QueryDefs(QueryName).SQL = strSQL
Application.RefreshDatabaseWindow
'Debug.Print strSQL
End Sub
'Example:
'paginationQuery 4,3


روال فوق را در یک ماژول کپی کنید و در هر کجا آنرا به همراه آرگومانهایش صدا بزنید کوئری مربوطه را با ترکیب مورد نظر آپدیت میکند
اگرکوئری که نام آن در خط چهارم کدهای فوق آمده در دیتابیس موجود نبود ، آنرا خواهد ساخت .

اگر جدل مربوطه را ضمیمه می کردید و مورد استفاده از این کوئری را مرقوم می کردید ، شاید بهتر می شد راهنمایی کرد.

bftarane
جمعه 12 مهر 1392, 17:01 عصر
سلام. ممنون که پاسخ دادید.
من دلیل استفاده از این کوئری رو در لینک زیر توضیح دادم.
http://barnamenevis.org/showthread.php?422246
جدولشم چیز خاصی نیست. مثلاً یه جدول به اسم tbl_product با فیلدهای pd_id، pd_name,cat_id.
و فرضاً 11 تا رکورد توش هست حالا می خواهیم در هر صفحه 5 تا رکورد نشون بده پس میشه 3 تا صفحه دو تا 5 رکوردی و 1 صفحه 1 رکوردی. (یعنی 1 رکورد توش نشون داده میشه)

راستش با اکسس آشنایی چندانی ندارم و همین ماژول که گفتید رو در اکسس منظورش رو نمی دونم ولی ممنون. تست می کنم و اگه به نتیجه رسیدم می یام می گم.

bftarane
جمعه 12 مهر 1392, 17:49 عصر
رفتم با در یه ماژول کپی کردم همونجا در محیط اکسس ران می کنم جواب صحیح میده. امیدوارم بتونم ازش در ASP.net استفاده کنم.
مثلاً وقتی با Sql Server کار می کردم کوئری های رو در Stored Procedure می نوشتم و در Asp.net (با زبان C Sharp) فراخوانی می کردم.
ولی الآن که دارم با اکسس کار می کنم چون شنیدم Sp نداره اکسس باید سعی کنم کوئری ها رو مستقیم تو خود برنامه بنویسم. امیدوارم بشه.

Abbas Amiri
جمعه 12 مهر 1392, 19:29 عصر
رفتم با در یه ماژول کپی کردم همونجا در محیط اکسس ران می کنم جواب صحیح میده. امیدوارم بتونم ازش در ASP.net استفاده کنم.
مثلاً وقتی با Sql Server کار می کردم کوئری های رو در Stored Procedure می نوشتم و در Asp.net (با زبان C Sharp) فراخوانی می کردم.
ولی الآن که دارم با اکسس کار می کنم چون شنیدم Sp نداره اکسس باید سعی کنم کوئری ها رو مستقیم تو خود برنامه بنویسم. امیدوارم بشه.

برای فراخوانی یک پروسیجر از خارج محیط آن می توانید از دستور Appliction.Run استفاده کنید .
یک نمونه از فایل اکسس بسازید و از متد Run استفاده کنید

به لینک زیر هم سری بزنید
http://www.progtown.com/topic626581-access-to-variables-and-functions-from-exterior-applications.html