PDA

View Full Version : سوال: پرکردن فیلدهای یک تیبل بر اساس محتویات تیبلی دیگر



ryonis
شنبه 06 شهریور 1395, 13:13 عصر
سلام. فایل نمونه رو ضمیمه کردم اساتید کمک کنند

فرض کنید تعدادی نمایندگی داریم که هرکدام کارتهای هدیه با مبالغ مختلف صادر کرده اند. مشکل اینجاست فایلی که برای مرکز ارسال میشود بر اساس کد نمایندگی است بدین صورت که هر رکورد حاوی کد نمایندگی، نوع کارت و تعداد آن است.
به مثال زیر دقت کنید، فرض کنید اطلاعات کارت های صادر شده در نمایندگی ها به قرار ذیل دریافت میشود:
142205
میخوام در نهایت در فایل اطلاعات نمایندگی ها در مقابل نام هر نوع کارت صادره، مجموع کارت های صادره آن نوع درج شود. عکس زیر
142206در فرم اصلی، کلیدی تحت عنوان «بروزرسانی» داریم که لازم است فایل کارت ها را خوانده و اطلاعات نمایندگی ها را بروز نماید. لطفا کمکککککککک

mazoolagh
یک شنبه 07 شهریور 1395, 10:47 صبح
اگر فقط هدف دیدن بود که crosstab query‌ زیر جوابگو بود:


TRANSFORM NZ(SUM(CARD.COUNT),0) AS N
SELECT BRANCH.BRANCH_CODE
FROM BRANCH LEFT JOIN CARD ON
BRANCH.BRANCH_CODE=CARD.BRANCH_CODE
GROUP BY BRANCH.BRANCH_CODE
PIVOT CARD.CARD_TYPE


چون قرار هست با نتایج این کوئری یک جدول آپدیت بشه باید یک سری کار اضافه انجام بدین:

کوئری بالا رو به یک اسم مثلا CT ذخیره کنین چون نتایج کوئری کراس تب رو نمیشه مستقیما برای آپدیت یا ساخت جدول استفاده کرد (اگر هم بشه من راهشو نمیدونم)
یک کوئری make table بسازین که از روی نتایج CT یک جدول موقت بسازه مثلا TT
از روی TT جدول BRANCH رو آپدیت کنین



CURRENTDB.EXECUTE "SELECT F1,F2,F3, BRANCH_CODE INTO TT FROM CT"
CURRENTDB.EXECUTE "UPDATE BRANCH INNER JOIN TT ON BRANCH.BRANCH_CODE=TT.BRANCH_CODE SET " & _
" BRANCH.F1_COUNT=[TT].[F1]," & _
" BRANCH.F2_COUNT=[TT].[F2]," & _
" BRANCH.F3_COUNT=[TT].[F3]"
CURRENTDB.EXECUTE "DROP TABLE TT"

البته همیشه روش پیمایش رکوردها و اعمال هر شرط پیچیده با استفاده از رکوردست هم هست

ryonis
دوشنبه 08 شهریور 1395, 20:49 عصر
1- واقعاٌ ممنونم از پاسخگویی تون. جناب
mazoolagh (http://barnamenevis.org/member.php?9893-mazoolagh) شما همیشه راهگشای بسیاری از مشکلات قبلی ام تو VBA بودین. :تشویق:
2- دقیقاٌ در حال حاضر همین روش رو تو برنامه ام استفاده کرده ام. بیشتر نظرم روی همون روش رکوردست ها بود. البته به نظرت اگه همین روش کافیست و تاثیر منفی در برنامه ندارد(از نظر سرعت اجرا و حجم برنامه در دیتاهای تعداد بالا) که صرفنظر کنم.

mazoolagh
سه شنبه 09 شهریور 1395, 13:38 عصر
خوشحالم که تونستم کمک ناچیزی کرده باشم

در کل هر جا که امکانش باشه بکار بستن کوئری بمراتب بهتر از پیمایش در رکوردست هست هم از نظر سرعت هم بهینه بودن

hosseinwww
جمعه 12 شهریور 1395, 13:17 عصر
سلام کسی میتونه اینو انجام بده mazoolagh
سلام
یک نمونه برنامه انبارداری از آقای عطا امینی کابر همین سایت رو دراینجا گذاشتم با اجازه آقای امینی چندتا سوال داشتم اگه از عزیزان کسی میتونه تغییراتو روش انجام بده . رمز برای کاربر عطا امینـﮮ ™ : 7086
دوستانی که از 2007 و بالاتر استفاده می کنند منوهای برنامه در Add-Ins قابل دستیابی می باشد. بازدن کلید f11
1- در تب انبارداری-تعریف کالا دو فیلد (تکست باکس) دیگر اضافه شود یکی عمرانباری(مدت زمان نگهداری در انبار) و دیگری عمر خدمتی(مدت زمانی که یک جنس می تواند کار کند) که این دو فیلد وقتی کالای جدید تعریف می شود توسط کاربر وارد شود.به ماه باشد مثلا عمر انباری یک پیچ 120 ماه و عمر خدمتیش 80 ماه
2- در تب تولید/ورود کالا یک تکس باکس اضافه شود که تاریخ تولید کالا را بتوان وارد کرد (تاریخی که روی جنس نوشته میشود توسط کارخانه)
3- در تب گزارشات یه لیست تنظیم شود که تاریخ انقضا کالا را نشون دهد بدین صورت که تاریخ تولید را به عمر انباری اضافه کند و به صورت شمسی تاریخ انقضا را نشان بدهد.
4- اگر در تب ورود کالا یک جنس به تعداد ده عدد خواستیم وارد کنیم به طوری که این ده جنس ده سریال مختلف دارن اگر بخواهیم ده سریال را وارد کنیم چگونه وارد کنیم باید یک فیلد ساخته شود؟بعد ده تا را چگونه وارد کنیم.
عزیزان هرکسی میتونه تغییراتو انجام بده اصلاح شده رو بزاره تو سایت واسه استفاده همه ، خودم زیاد وارد نیستم لطفا خودتون کاملش کنید
با تشکر از تمامی دوستان
لینک دانلود برنامه اینجا گذاشتم
http://barnamenevis.org/attachment.p...8&d=1421185291 (http://barnamenevis.org/attachment.php?attachmentid=127548&d=1421185291)
http://barnamenevis.org/attachment.p...9&d=1421185303 (http://barnamenevis.org/attachment.php?attachmentid=127549&d=1421185303)