نمایش نتایج 1 تا 15 از 15

نام تاپیک: دسترسی به رکورد بعدی جدول (فوری)

  1. #1
    کاربر دائمی آواتار sm
    تاریخ عضویت
    اردیبهشت 1383
    محل زندگی
    ایساتیس
    پست
    1,389

    دسترسی به رکورد بعدی جدول (فوری)

    باسلام به دوستان عزیز
    یه بانک دارم که جدولهای گردن کلفتی داره!!!!!
    توی VB.NET می خوام روی رکوردها حرکت کنم وبه رکورد قبل و بعد از رکورد جاری بوسیله کلیدی دسترسی داشته باشم که برای اینکار اومدم یه StoredProcedure نوشتم که مثلا برای رفتن به رکورد بعدی مینمم عدد بزرگتر از رکورد جدید رو که کلید هست پیدا می کنه
    با اینکار یه مشکل بوجود می آید و اونم اینه که چون تعداد رکوردهای جدول زیاده (250000رکورد) یه کمی زمانبر است
    البته زمانبر بودن ایجوریه که اگه در ابتدای جدول باشیم و به رکورد بعدی برویم چون تعداد اونها زیاده و می خواد مینیمم اونها رو برگردونه زمان زیادی می بره درصورتیکه اگه ابتدای جدول باشیم (رکوردهای 50تا500)برای رفتن به رکورد قبلی اصلا زمانی صرف نمی شه
    می خواستم از دوستان کمک بگیرم ببینم آیا می شه با یه دستور ساده به رکورد قبل یا بعد از رکورد جاری دسترسی پیدا کرد؟
    ممنون
    درضمن بفرض آنکه دادها مرتب شده باشند و با Stored Procedure ونکته دیگر اینکه چون برنامه تحت شبکه می باشد باید هرلحظه داده ها را از بانک خواند و نمی توان یکبار آنها را Fill کرد و روی آنها جستجو نمود.......
    ممنون میشم درصورت امکان زود پاسخ بدین

  2. #2
    دوست عزیز،
    من دو حدس میتوانم بزنم:
    یکی اینکه شما روی فیلدی که Min یا Max میگیرید، ایندکس نساخته اید. ولی با توجه به اینکه گفته شد این فیلد کلیدی است، پس Primary Key بوده و ایندکس دارد. پس حدس من غلط است.
    دوم اینکه شما برای مثلا انتخاب رکورد بعدی، کل رکوردهای بعد از اون رو انتخاب میکنید و بعد کوچکترین رو برمیدارید. اما به اعتقاد من Procedure که برای گرفتن رکورد بعدی استفاده میشود، بهتر است چیزی شبیه به این باشد:

    Create Proc MyPrco1 @KeyValue as int as
    declare @NextKey int
    select @NextKey=min(KeyColumn) from MyBigTable where KeyColumn>@KeyValue

    select * from MyBigTable where KeyColumn=@NextKey


    ضمنا شما به دلیل تحت شبکه بودن برنامه، مجبور به خواندن رکوردها به طور پی در پی از بانک اطلاعاتی نیستید. میتونید مثلا در دسته های 50تایی از بانک بخوانید، موقع برگرداندن رکوردهای ویراش شده کنترل کنید که هر رکورد از زمان آخرین خوانده شدن، توسط کاربر دیگری ویرایش شده یا نه.
    البته امیدوارم هدف شما رو درست متوجه شده باشم

  3. #3
    یعنی توی VB.NET دستوری مثل ADOTable1.Next نداره! :?:

  4. #4
    چرا محمد جان
    ولی موضوع این هست که در بعضی شرایط خاص از این روشها ترجیح میدن که استفاده نشه به دلایلی.
    امکانی که شما اشاره کردین در ADO از قدیم برای Recordset وجود داشته چه برسه در ADO.NET اما در درجه اول سعی میکنیم این دوستمون الگوریتم کار خودشون رو بهتر عیب یابی کنن...

  5. #5
    کاربر دائمی آواتار hmm
    تاریخ عضویت
    مهر 1382
    محل زندگی
    ایران - یزد
    پست
    1,229
    یکبار من برای دات نت پیدا کردم که به رکورد بعدی میرفت الان یادم نیست میگردم پیدا میکنم
    ولی اگه شما نمیخواهید که عمل برگشت رو انجام بدید از datareader استفاده کنید.

  6. #6
    اگر پایگاهتان تحت SqlServer است با Cursor مشکل را حل کنید

  7. #7
    استفاده از Cursor دارای Cost بالایی هستش و فقط در شرایطی که واقعا ناچار هستیم باید استفاده کنیم. ضمنا Cursor در حافظه سرور تشکیل میشه و نمیشه از کلاینت یک به یک رکوردها رو از اون فراخوانی کرد. در این مورد با تکنیکهای بسیار ساده تری مشکل رو میشه حل کرد. مثلا استفاده از Dataset

  8. #8
    کاربر دائمی آواتار sm
    تاریخ عضویت
    اردیبهشت 1383
    محل زندگی
    ایساتیس
    پست
    1,389
    ممنون از دوستان
    مشکلم حل شد
    خیلی خیلی ممنون

  9. #9

  10. #10
    کاربر دائمی آواتار hmm
    تاریخ عضویت
    مهر 1382
    محل زندگی
    ایران - یزد
    پست
    1,229
    در ADO از قدیم برای Recordset وجود داشته چه برسه در ADO.NET
    میشه بفرمایید چیه؟

  11. #11
    در ADO تقریبا از بدو تولدش یک پراپرتی برای Recordset وجود داشته به اسم CacheSize.
    اگر چه توسط دو متد MoveNext و MovePrevious امکان جابجایی بین رکوردها در Recordset وجود داره ولی CacheSize تاثیر جالبی بر این کار داره. به این ترتیب که اگر فرضا مقدار CacheSize رو به 10 تنظیم کنیم، ADO به محض انجام Query فقط 10 رکورد از نتیجه Query رو در Local Memoery ذخیره(Cache) میکنه. زمانی که کاربر بین این 10 رکورد در Recordset حرکت میکنه و از رکورد دهم به رکورد یازدهم میخواد بره، ADO اقدام به آوردن 10 رکورد بعدی میکنه و به همین ترتیب برای ادامه کار عمل میکنه.
    CacheSize کمک میکنه که اولا حافظه کلایت (Local Memory) یکباره بر اثر بزرگ بودن Query، اشغال نشه ثانیا در سبک کردن بار ترافیک شبکه هم تاثیر مثبت داره چرا که Download کردن یکباره نتیجه Query به ویژه زمانی که حجیم هستش باعث کند کردن شبکه میشه. ولی بوسیله تنظیم CacheSize، فقط رکوردها در زمانی که مورد نیاز هستند Download میشن.

    موفق باشین

  12. #12
    کاربر دائمی آواتار hmm
    تاریخ عضویت
    مهر 1382
    محل زندگی
    ایران - یزد
    پست
    1,229
    منظورم در ado.net بود روش پیمایش دیتا سورس رو بفرمایید.

  13. #13
    یک Sample خوب در این فایل Zip هستش، خوشبختانه توضیح هم داده برای هر سطر از برنامه. امیدوارم کمکتون کنه.
    موفق باشین

  14. #14
    کاربر دائمی آواتار hmm
    تاریخ عضویت
    مهر 1382
    محل زندگی
    ایران - یزد
    پست
    1,229
    ممنون

  15. #15

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •