PDA

View Full Version : سوال: چطور میشه حجم زیادی از اطلاعات رو به جای یک توقف طولانی به صورت پی در پی خواند



DoDoklak
شنبه 10 بهمن 1388, 15:47 عصر
اگر یک Query رو تو محیط Access یا SQL SERVER اجرا کرده باشید اگر حجم زیادی از اطلاعات همراه query مورد نظر بیاید.میبینید که رکوردها کم کم نمایش داده میشوند و کاربر نمایش اطلاعات رو به صورت تدریجی میبینه.
اما اگر این query رو تو محیط VS اجرا کنی تا نمایش کل رکوردها نمیشه هیچ چیزی رو مشاهده کرد و کاربر تا لحظه نهایی چیزی مشاهده نمیکنه که برای گزارشهای سنگین زیاد کاربر پسند نیست.

اگر کسی نکاتی در این مورد میدونه ممنون میشم ذکر کنه

با تشـــــــــــــــــــــــ کر

Alirezanet
شنبه 10 بهمن 1388, 17:51 عصر
سوال جالبی بود ولی تا حالا بهش برخورد نکرده بودم ... کسی نمیدونه ؟؟؟؟
فکر کنم از BackgrounWorker استفاده کنید مشکل رفع شه...

Navid Asadi
شنبه 10 بهمن 1388, 19:04 عصر
از MultiThreaning هم میشه ولی من تاحالا ازش استفاده نکردم...

Alghoochi
شنبه 10 بهمن 1388, 20:21 عصر
دوستان مشکل استفاده از MultiTreading یا BackgroundWorker نیست. این دوستمون می خواد مثلاٌ اگه می خواد 1000 تا رکورد رو درخواست کنه هر 10 تا که گرفته شد نشون داده باشه ولی الان تا هر هزار تا گرفته نشه نشون داده نمی شه. البته اگه منظورتونو درست فهمیده باشم.
اگه می خوای چند تا رکوردو درخواست کنی می تونی اونا رو به چند بخش تقسیم کنی و بعد از گرفته شدن هربخش اونو نشون بدی

DoDoklak
یک شنبه 11 بهمن 1388, 08:36 صبح
فکر کنم از BackgrounWorker استفاده کنید مشکل رفع شه...

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

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


دوستان مشکل استفاده از MultiTreading یا BackgroundWorker نیست. این دوستمون می خواد مثلاٌ اگه می خواد 1000 تا رکورد رو درخواست کنه هر 10 تا که گرفته شد نشون داده باشه ولی الان تا هر هزار تا گرفته نشه نشون داده نمی شه. البته اگه منظورتونو درست فهمیده باشم.


بله دقیقا منظورم همین بود.


اگه می خوای چند تا رکوردو درخواست کنی می تونی اونا رو به چند بخش تقسیم کنی و بعد از گرفته شدن هربخش اونو نشون بدی

این روش امکانپذیر نیست .فرض کنید کاربر از من گزارش خرید یک کالا رو در یک سال جاری میخواهد حالا من هم یک Query به بانک میفرستم تا رکوردهای خواسته شده رو پیدا کنه.در این حالت من اصلا نمیدونم چند تا رکورد قرار برگشت داده بشه تا اونو تقسیم کنم.به فرض اگه بدونم چند تا رکورد هم هست باید کلی Query دیگه اجرا کنم تا کم کم همه رو بیارم.این روش منطقی نیست.

ولی من مطمئن هستم یه راهی وجود داره چون توابع خیلی زیادی برای کار با بانک ایجاد شده که خیلی به ندرت ازش استفاده میکنیم.

از دوستانی که تو فریوم های خارجی عضو هستند تقاضا میشه این بحث رو اونجا مطرح کنن.
با تشـــــــــــــــــکر

Alghoochi
یک شنبه 11 بهمن 1388, 10:24 صبح
می تونی تعداد رکوردها رو درخواست کنی. نتیجه فقط یه عدده و خیلی سریع برگشت داده می شه.
بعد از دریافت باید اطلاعات رو تقسیم کنی. اگه 100 تا رکورد نتیجه شد می تونی 20 تا 20 تا درخواست کنی



Select * FROM TABLE WHERE Condition Limit 0 to 20

البته این روش یه مشکل دیگه هم داره. اونم اینکه اطلاعات گرفته شده رو چجوری باید به یه بانک اطلاعاتی واحد تبدیل کرد. چون شما با هربار استفاده از دستور بالا فقط 20 تا رکورد می گیری

sh
یک شنبه 25 بهمن 1388, 00:24 صبح
سلام
لینکهای زیر رو بدقت مطالعه کن
http://arsalantamiz.blogspot.com/2008/09/asynchronous-data-loading-using.html

http://www.devx.com/dotnet/Article/22358/0/page/3

محمد سلیم آبادی
یک شنبه 25 بهمن 1388, 05:31 صبح
اگر یک Query رو تو محیط Access یا SQL SERVER اجرا کرده باشید اگر حجم زیادی از اطلاعات همراه query مورد نظر بیاید.میبینید که رکوردها کم کم نمایش داده میشوند و کاربر نمایش اطلاعات رو به صورت تدریجی میبینه.
اما اگر این query رو تو محیط VS اجرا کنی تا نمایش کل رکوردها نمیشه هیچ چیزی رو مشاهده کرد و کاربر تا لحظه نهایی چیزی مشاهده نمیکنه که برای گزارشهای سنگین زیاد کاربر پسند نیست.

اگر کسی نکاتی در این مورد میدونه ممنون میشم ذکر کنه

با تشـــــــــــــــــــــــ کر

برای نمایش دادن رکوردهای بانک نیاز نیست تمام رکوردها خوانده شوند کافیست در هر بار مثلا 10 رکورد بارگذاری شوند برای این کار تکنیک Paging (صفحه بندی) وجود داره که با کمک تابع Row_numberو Stored Proceduer قابل پیاده سازیست.

DoDoklak
یک شنبه 25 بهمن 1388, 09:06 صبح
سلام
لینکهای زیر رو بدقت مطالعه کن
http://arsalantamiz.blogspot.com/200...ing-using.html (http://arsalantamiz.blogspot.com/2008/09/asynchronous-data-loading-using.html)

http://www.devx.com/dotnet/Article/22358/0/page/3 (http://www.devx.com/dotnet/Article/22358/0/page/3)


ممنون من از لینکها جواب اصلی رو گرفتم


برای نمایش دادن رکوردهای بانک نیاز نیست تمام رکوردها خوانده شوند کافیست در هر بار مثلا 10 رکورد بارگذاری شوند برای این کار تکنیک Paging (صفحه بندی) وجود داره که با کمک تابع Row_numberو Stored Proceduer قابل پیاده سازیست

اگر با یک نمونه یکم بیشتر تضیح بدید ممنون میشم.شاید این روش هم جالب باشه

محمد سلیم آبادی
یک شنبه 25 بهمن 1388, 09:34 صبح
بایستی از روشی شبیه به پست NanShekari (http://barnamenevis.org/forum/showthread.php?t=187448&highlight=Paging) استفاده کنین