PDA

View Full Version : سوال: آموزش ویرایش یک فیلد از جدول دیگر بعد از درج یا ویرایش جدول ورود یا خروج



elderado
پنج شنبه 25 اسفند 1401, 15:56 عصر
دوستان عزیز سلام و خسته نباشید

من یک فایل اکسس ساده دارم برای کنترل ورودی و خروجی یک انبار کوچیک

یک جدول که اطلاعات یوزر ها رو نگه میداره
یک جدول که موجودی انبار رو نگه میداره
یک جدول اطلاعات کالاهای وارد شده
یک جدول اطلاعات کالاهای خارج شده

میخوام جوری تنظیم کنم که بعد از ورود یا خروج کالا اتوماتیک موجودی اون کالا توی جدول موجودی انبار آپدیت بشه
مثلا اگه کاربری 10 عدد خودکار از انبار دریافت کرد موجودی خودکار توی جدول موجودی 10 عدد کم بشه

ممنون میشم راهنمایی کنید

mazoolagh
شنبه 27 اسفند 1401, 09:56 صبح
سلام و روز خوش

البته این کار (محاسبه یک تابع aggregate مثل sum روی جدول detail و update جدول master) شدنی هست:
PARAMETERS [@kalaid] LONG;
UPDATE kalaha SET kalaha.tedad_kol =
DSUM("tedad","voroodi","kalaid=" & [@kalaid])
-
DSUM("tedad","khorooji","kalaid=" & [@kalaid])
WHERE kalaha.id=[@kalaid]

mazoolagh
شنبه 27 اسفند 1401, 10:20 صبح
ولی چند نکته هست که باید در نظر داشته باشین:
1- اصولا نیازی به این کار نیست و همیشه به sum (یا هر نوع تابع aggregate دیگه) با یک کوئری ساده دسترسی داریم.
2- اگر به هر دلیلی کد آپدیت جمع کل اجرا نشه، مقدار اون نادرست هست.
در حالی که اگر در وقت نیاز کوئری جمع رو اجرا کنیم مطمئن هستیم مقدار درست رو به ما میده.
3- کدنویسی و نگهداری برنامه پیچیده تر هست، چون در هر جا که یک عملیات insert/update/delete رو جدول detail انجام بشه باید حواسمون باشه که کد مناسب برای آپدیت جدول master رو اجرا کنیم.
4- اگر عملیات روی جدول detail بصورت batch و با تعداد رکورد زیاد داشته باشیم (مثلا حذف 50 هزار رکورد بصورت یکجا) مشکلات جدی خواهیم داشت.
5- اگر مانده یا جمع انباشته نداشته باشیم کد نویسی ساده تر و احتمال بروز مشکل پرفورمنس هم کمتر هست.
در این صورت بجای محاسبه جمع روی همه رکوردها کافی هست که مقدار جمع کل بر اساس این که چه نوع عملیاتی در detail انجام شده آپدیت بشه.
فرضا اگر یک رکورد با مقدار 5 به جدول detail اضافه شد کافی هست به جمع کل 5 رو اضافه کنیم و به همین قیاس برای delete و update
6- معمولا برای خودکار کردن این نوع کارها بجای کدنویسی در فرم، فقط یکبار در خود جدول کدنویسی میکنیم (trigger در sql و datamacro در access).

elderado
جمعه 04 فروردین 1402, 11:27 صبح
سلام مجدد و تشکر بابت وقتی که گذاشتید

عرض کنم که من این کار رو با استفاده از ویزارد ماکرو خود اکسس انجام دادم و برای اینزرت و آپدیت هر رکورد جدیدی از جداول ورودی و خروجی انبار - تعداد اون کالا رو از جدول موجودی کم و زیاد کردم - این هم تصویر ماکرو که ایجاد کردم

154592