PDA

View Full Version : مبتدی: تغییر اتومات مقادیر داخل برنامه



ssadegh1365
شنبه 28 فروردین 1400, 11:09 صبح
سلام خدمت همه اعضای محترم.
یه کار مهمی میخوام انجام بدم تو برنامم و نمیدونم چکار کنم.
میخوام مثلا با تغییر یک فیلد از داخل پایگاه دادم تو سی شارپ، اعداد مربوط به اون مثلا تو بازه زمانی ماه تغییر کنن بصورت خودکار.
مثلا جمع اعداد فیلد وزن تیرآهن در ماه فروردین شده 500 ، و عدد یکی از روزهای فروردین رو تغییر میدیم مثلا 100 تا اضافه می کنیم.
میخوام بمحض تغییر وزن که 100 تا اضافه میشه عدد مربوط به کل ماه بشه 600 و همچنین عدد مربوط به همون روز که تغییر میکنه هم بشه 100.
تو تمام فیلدهای بانک اطلاعاتیم میخوام همین کارو بکنم.
مثل تو اکسل.
خواهشمندم هر کی بلده راهنماییم کنه
خیلی ممنون مرسسی

ssadegh1365
شنبه 28 فروردین 1400, 13:44 عصر
دیتابیس هم SQL Server 2008 R2 هست

ssadegh1365
چهارشنبه 01 اردیبهشت 1400, 11:09 صبح
کسی نیست کمکی راهنمایی ای کنه منو.

mazoolagh
شنبه 04 اردیبهشت 1400, 09:32 صبح
سلام و روز خوش
شما میتونین در sql از trigger استفاده کنین.
تریگر در واقع کدی هست که میتونین جداگانه برای هر یک از عملیات Insert/update/delete یک جدول تعریف و در اون هر تغییری که خواستین در همون جدول یا جدول دیگه اعمال کنین،
صرفنظر از این که این عملیات با اکشن کوئری انجام شده باشه یا مستقیما روی جدول.

Mahmoud.Afrad
شنبه 04 اردیبهشت 1400, 22:32 عصر
در مورد sqldependency جستجو کنید قبلا در همین انجمن کدش قرار داده شده.

ssadegh1365
یک شنبه 05 اردیبهشت 1400, 08:48 صبح
اگه مطلبی کدی چیز مفیدی در این باره دارین دوستان، خواهشمندم برام بفرستین.
خیلی ممنون

ssadegh1365
دوشنبه 06 اردیبهشت 1400, 09:02 صبح
اگه حمل بر بی ادبی نباشه از دوستان عزیز خواهش دارم یه نمونه عملی در رابطه با تریگر برای اعمل حذف، اضافه و ویرایش دیتابیس بذارن تا عملی استفاده کنم تا بتونم تو برنامم اعمال کنم.
یه تحقیقی کردم تو اینترنت دربارش ولی چون مبتدی هستم زیاد نتونستم بفهمم دستوراتش رو.
خیلی خیلی ممنونم از لطف اعضای محترم

ssadegh1365
دوشنبه 06 اردیبهشت 1400, 09:43 صبح
یه مثال بیارم تا بتونم منظور سوالمو واضحتر بگم:
فرض کنین یه جدول به نام table1 دارم با فیلدهای تاریخ تولید ، تعداد تیرآهن درجه 1 و وزن تیرآهن درجه 1 . این جدول روز به روز فیلدهاش پر میشه.فکر کنین از تاریخ 1400/01/01 تا 1400/01/31 جدول با اعداد مختلف پرشده.
حالا مثلا در تاریخ 1400/01/15 عدد مربوط به وزن تیرآهن درجه 1 رو که مثلا 1500 بوده به 2500 (1000 تا بیشتر بشه) تغییر میدم .
حالا میخوام از تاریخ 1400/01/15 تا آخرین تاریخ ثبت اطلاعات که مثلا همون 1400/01/31 هست، عدد مربوط به وزن تیرآهن درجه 1 هر روز 1000 تا اضافه بشه بصورت خودکار.
یه نمونه کد میخوام برای Trigger ، after update
create Trigger trigger1 on navard
for update
as
update

ssadegh1365
دوشنبه 06 اردیبهشت 1400, 09:44 صبح
اون navard ، table1 هست که اشتباه نوشتم

ssadegh1365
دوشنبه 06 اردیبهشت 1400, 09:47 صبح
فقط همین مشکل مونده تا برنامم کامل بشه و فایل اجرایی درست کنم از روش.
از هر کی بلده و میتونه خواهش میکنم کمکم کنه تا بتونم بعد حل این مشکل اولین برنامه ای که درست کردم رو بتونم به سرانجام برسونم.
خیلی ممنون

336699
دوشنبه 06 اردیبهشت 1400, 13:57 عصر
یه مثال بیارم تا بتونم منظور سوالمو واضحتر بگم:
فرض کنین یه جدول به نام table1 دارم با فیلدهای تاریخ تولید ، تعداد تیرآهن درجه 1 و وزن تیرآهن درجه 1 . این جدول روز به روز فیلدهاش پر میشه.فکر کنین از تاریخ 1400/01/01 تا 1400/01/31 جدول با اعداد مختلف پرشده.
حالا مثلا در تاریخ 1400/01/15 عدد مربوط به وزن تیرآهن درجه 1 رو که مثلا 1500 بوده به 2500 (1000 تا بیشتر بشه) تغییر میدم .
حالا میخوام از تاریخ 1400/01/15 تا آخرین تاریخ ثبت اطلاعات که مثلا همون 1400/01/31 هست، عدد مربوط به وزن تیرآهن درجه 1 هر روز 1000 تا اضافه بشه بصورت خودکار.
یه نمونه کد میخوام برای Trigger ، after update
create Trigger trigger1 on navard
for update
as
update



در این مورد شما نیازی به trigger ندارید
شما وقتی یه کوئری میزنید و به دیتابیس می گویید که عدد مربوط به وزن رو در تاریخ فلان تغییر بده
با یکمی تغییر در کوئری مربوطه و تعیین محدوده تاریخ، می توانید به دیتابیس بگویید از تاریخ فلان تا تاریخ فلان عدد مربوط به وزن رو مثلا هزار تا افزایش بده.

ssadegh1365
دوشنبه 06 اردیبهشت 1400, 14:16 عصر
با تشکر از دوست عزیز. این تاریخ رو مثال زدم. میخوام این جریان تغییر ثابت باشه تو برنامه و دیتابیسم. هرجور فکر کردم نتونستم کدی درست کنم برا این کار.
اون دوست عزیز که گفت با تریگر میشه، بنظرم با همون تریگر اگه بشه که بهتره.
اگه هرکی کدی میتونه بذاره برام تا به نتیجه برسه خیلی ممنون میشم ازش.

ssadegh1365
دوشنبه 06 اردیبهشت 1400, 14:20 عصر
میخوام که دیتابیسم مثه اکسل که این کار رو راحت میشه با فرمول گذاشتن تو هر سلول انجام داد بشه. منتها تو سی شارپ و اس کیو ال اگه
بتونم کدی ایجاد کنم که به مقدار سطر قبل ( همون روز قبل) دسترسی داشته باشم، میشه کدی نوشت که اگه مقدار هر سطری از فیلدها که تغییر کرد ، مقدار
روز بعد رو باهاش جمع بزنه.
اس کیو ال سرور من 2008 R2هست و هرکار کردم نتونستم به مقدار فیلد روز قبل دست پیدا کنم.
آیا کسی بلده کدی بذاره که اجرا بشه این کار؟

mazoolagh
دوشنبه 06 اردیبهشت 1400, 15:49 عصر
1- ظاهرا اونچه در پست شماره 1 نوشتین با خواسته پست شماره 8 تفاوت داره:
از پست 1 اینجور برمیاد که یک جدول جداگانه دارین برای جمع ولی از پست 8 اینجور برداشت میشه که یک فیلد جداگانه بصورت جمع انباشته (running sum) در همون جدول هست.
اول این مورد رو دقیق مشخص کنین - با تصویر از دیتا جدول (یا جداول) قبل و بعد از تغییرات.

2- راهنمایی پست 11 رو مد نظر داشته باشین، اصلاح یک کوئری به مراتب ساده تر از نوشتن تریگر هست.

ssadegh1365
سه شنبه 07 اردیبهشت 1400, 07:47 صبح
باسپاس از دوست عزیز که جواب دادن ، اون پست 8 که میگی اون فیلد مثالیه برای نمونه فیلدهای جداولم.
شکل کلی درخواستم همونه که میخوام جداول دیتابیسم در هنگام تغییرات روی هرکدوم از فیلدها قابل به روز شدن و تغییر باشن.
قبل وبعدش هم که مشخصه : با تغییر هر روز مقدار هر فیلد یا سطر جدول ، مقدار فیلد روز بعد هم تغییر کنه.
153266

طبق تصویر تاریخ تولید رو ببینین و مثلا مقدار شبانه روز شمش شارژ شده یا وزن شارژ شده رو. دکمه پیمایش گذاشتم تا
بین رکوردهای جدول حرکت کنم. هر رکورد جلو عقب برم تاریخ تولید هم جلو عقب میره.
حالا اگه یکی از فیلدهای مثلا وزن شارژ شده رو مقدارشو تغییر دادم بطور اتومات مقدار همون فیلد تو روز های بعد از اون تاریخ که تغییر کرده، هم تغییر کنه به همون اندازه.
انگار کل فیلدهای مثلا شمش شارژ شده از روز قبلش تاثیر بگیره و بهم مربوط باشن
حالا دیگه فک کنم منظورمو رسونده باشم

ssadegh1365
سه شنبه 07 اردیبهشت 1400, 07:59 صبح
چه از راه اصلاح کوئری چه تریگر فقط خواهشمندم یه کمکی بکنین به نتیجه برسم

Mahmoud.Afrad
پنج شنبه 09 اردیبهشت 1400, 03:51 صبح
ساختار جدول و نمونه دیتا قرار بدید.