PDA

View Full Version : سوال: بررسی دیتابیس بدون مراجعه چند باره به بانک



shahrooz_esi
سه شنبه 29 شهریور 1390, 11:58 صبح
سلام خدمت دوستان
بنده به تازگی در حال انجام پروژه ای بودم که سوالی به ذهنم رسید
در پروژه بخشی دارم که مرتب باید دیتابیس رو مرتب چک کنه تا متوجه بشه آیا اطلاعات جدیدی وارد شده تا آنها رو پردازش کنه برای اینکار من یک Thread نوشتم
می خواستم ببین آیا راه دیگه ای هم هست که زمانی که اطلاعاتی وارد SQL server شد خودش Responsی به نرم افزار بفرسته که اطلاعاتی وارد شده ، و ما بی جهت پردازنده رو مشغول نکنیم
با تشکر

ya30ien2
سه شنبه 29 شهریور 1390, 13:22 عصر
البته من فکر نمیکنم این کار از طریق sql امکانپذیر باشه
فکر میکنم شما در کلیدی که برنامه اضافه رو نوشتید در آخرش دستور نمایش رو هم فراخوانی کنید
فکر میکنم این راهترین راه حل باشه

morteza271
سه شنبه 29 شهریور 1390, 13:34 عصر
فکر نمیکنم sql همچین امکانی رو داشته باشه.
اگه داشته باشه که واقعا منم لازم دارم.
منم قبلا میخواستم یه همچین کاری انجام بدم ولی هرچی سرچ کردم چیزی دستگیرم نشد و آخر سرمجبور شدم از یه روش دیگه استفاده کنم.
روشم رو بهتون میگم به نظرم روش خوبی هست :

یه کلاس جدید تعریف کنید و داخل اون کلاس یه پراپرتی مثلا از نوع bool بسازید و متدهای ست و گت رو هم براش بنویسین.
فقط در متد ست برش بنویسین اگه برابر true بود کار مورد نظرتون رو انجام بده. یا مثلا تابع مورد نظرتون رو صدا بزنید.

بعد بعد از هر تغییری که توی دیتابیس انجام دادین و خواستین این کار انجام بشه فقط کافیه مقدار این پراپرتی رو برابر true قرار بدین.

امیدوارم خوب توضیح داده باشم.
اگه خواستین بگین تا کدشو براتون بنویسم.
موفق باشید

aisana
سه شنبه 29 شهریور 1390, 16:35 عصر
فکر نمیکنم sql همچین امکانی رو داشته باشه.
اگه داشته باشه که واقعا منم لازم دارم.
منم قبلا میخواستم یه همچین کاری انجام بدم ولی هرچی سرچ کردم چیزی دستگیرم نشد و آخر سرمجبور شدم از یه روش دیگه استفاده کنم.
روشم رو بهتون میگم به نظرم روش خوبی هست :

یه کلاس جدید تعریف کنید و داخل اون کلاس یه پراپرتی مثلا از نوع bool بسازید و متدهای ست و گت رو هم براش بنویسین.
فقط در متد ست برش بنویسین اگه برابر true بود کار مورد نظرتون رو انجام بده. یا مثلا تابع مورد نظرتون رو صدا بزنید.

بعد بعد از هر تغییری که توی دیتابیس انجام دادین و خواستین این کار انجام بشه فقط کافیه مقدار این پراپرتی رو برابر true قرار بدین.

امیدوارم خوب توضیح داده باشم.
اگه خواستین بگین تا کدشو براتون بنویسم.
موفق باشید


میشه 1 جوری فهمید که اگه دیتا بیس تغییری کرده بود مثلا update یا insert اتفاق افتاده بود datagridview , ب refresh بشه ما نخوایم هی چک کنیم ؟

ya30ien2
سه شنبه 29 شهریور 1390, 16:46 عصر
والا من که سوادم به اونجاها نرسیده
اما فکر نمیکنم راه حلی که هم من هم دوست عزیزمون گفته باشیم نیازی به refresh مداوم داشته فقط مواقعی که کاری انجام میشه عمل refresh هم انجام میگیره

morteza271
سه شنبه 29 شهریور 1390, 16:46 عصر
میشه 1 جوری فهمید که اگه دیتا بیس تغییری کرده بود مثلا update یا insert اتفاق افتاده بود datagridview , ب refresh بشه ما نخوایم هی چک کنیم ؟
نمیدونم منظورتونو درست متوجه شدم یا نه!!!
ولی برای این کار بهتره کد یا تابعی که گریدتون رو رفرش میکنه رو بعد کد Insert و Update بنویسید تا دقیقا بعد اینکه یه اینزرت و یا آپدیت رخ داد گرید ویرایش بشه.
مثلا اگه برای افزودن سطر جدید یه فرم باز میشه بهتره که بعد اینکه فرم رو نمایش میدین تابع رفرش گریدتون رو صدا بزنید.
البته باید فرم رو با ShowDialog باز کنید و گرنه درست جواب نمیده.

aisana
سه شنبه 29 شهریور 1390, 17:01 عصر
منظورم اینه که وقتی این برنامه توزیع می شه بین کاربرا همزمان چند نفر دارن کار میکنن باهاش وقتی 1نفر 1 رکورد جدید اضافه کرد به دیتا بیس کاربرای دیگه خود به خود datagridview شون refreshبشه

aisana
سه شنبه 29 شهریور 1390, 17:06 عصر
والا من که سوادم به اونجاها نرسیده
اما فکر نمیکنم راه حلی که هم من هم دوست عزیزمون گفته باشیم نیازی به refresh مداوم داشته فقط مواقعی که کاری انجام میشه عمل refresh هم انجام میگیره

بله متوجه شدم راه خوبیم بود

morteza271
سه شنبه 29 شهریور 1390, 17:09 عصر
منظورم اینه که وقتی این برنامه توزیع می شه بین کاربرا همزمان چند نفر دارن کار میکنن باهاش وقتی 1نفر 1 رکورد جدید اضافه کرد به دیتا بیس کاربرای دیگه خود به خود datagridview شون refreshبشه
برای این کار به نظرم باید یه تایمر بذارین و توی این تایمر هرچند ثانیه یک بار یک مقداری رو که میتونه توی دیتابیس باشه چک کنه و بعد رفرش کنه که به نظرم اصلا خوب نیست

aisana
سه شنبه 29 شهریور 1390, 17:16 عصر
برای این کار به نظرم باید یه تایمر بذارین و توی این تایمر هرچند ثانیه یک بار یک مقداری رو که میتونه توی دیتابیس باشه چک کنه و بعد رفرش کنه که به نظرم اصلا خوب نیست
توی یکی از برنامه هام این کاررو کردم هر 20 دقیقه 1 بار 1 یکی از فیلدها رو چک میکنه اگر با 1 مقداری برابر بود آلارم می ده ولی نمی دونم اصلا منطقی هست یا نه شمام که میگین خوب نیست !

morteza271
چهارشنبه 30 شهریور 1390, 09:05 صبح
ببینید من نظر خودم رو گفتم شاید روشتون خوب باشه.
ولی به نظر من این کار مناسب نیست.

شاید این روش بهتر باشه که در فرمی که میخواین رفرش بشه یه کلید بذارین با عنوان مثلا تازه سازی جدول! بعد کاربر هر قت خواست خودش رفرش کنه و نیاز به تایمر نباشه که هی چک کنه!

ولی بازم میگم این نظر منه و شاید کاری که شما میخواین انجام بدین نیاز به رفرش شدن اتوماتیک داشته باشه.و به نظرم اگه واقعا الزامی هست که به ظپطوراتوماتیک رفرش بشه به نظر میرشه تنها راهش همین روشی هست که الان دارین استفاده میکنید.
موفق باشید

shahrooz_esi
جمعه 01 مهر 1390, 10:16 صبح
خیلی ممنون از دوستان
ولی فکر کنم باید یکمی پروژه رو باز کنم . اون جدولی که من چک باید بکنم یه فیلد ID داره که برای شناسایی اش که هیچ . یک فیلد دیگه داره از نوع bit که اگر فعالیت پردازش شده باشه تیک میخوره پس قاعدتا فیلد هایی که هنوز پروسه نشدن False هستن
در همین پروژه من thread خودم رو هر 2 ثانیه چک میکنم . چون ممکنه هر لحظه داده وارد بشه زیادم مشکلی باهاش ندارم . مشکل من جایی که ممکن یک ساعت اطلاعات وارد سیستم نشه اونجاست که سیستم بی دلیل برای خودش کار میکنه . مشکل من آنچنان مهم نیست چون داره نرم افزار الان کار خودش رو میکنه من فقط دوست داشتم اگر امکانش هست کدم رو بهینه بکنم
بازم ممنون