PDA

View Full Version : مبتدی: استفاده از دو زیرفرم در یک فرم



m3343kh
دوشنبه 16 دی 1398, 20:48 عصر
با سلام خدمت دوستان و اساتید محترم
یک فرم دارم که دو زیرفرم در آن قرار دارد
هر دو زیرفرم شامل یک لیست می باشند که در ستون "کد" با هم مشترکند

میخواهم با کلیک بر روی هر ردیف در ساب فرم اول، ردیفهای مشترک در "کد" در ساب فرم دوم نمایش داده شوند.

با تشکر فراوان از پاسختان

m3343kh
سه شنبه 17 دی 1398, 20:56 عصر
کسی نظری ندارد؟ آیا؟

Mehr@ban
سه شنبه 17 دی 1398, 21:56 عصر
سلام

سعی کنید علاوه بر توضیحات واضح و شفاف، نمونه ای هم ارسال کنید تا مشکل یا سوالتون رو بتونید بهتر برسونید و البته بهتر و سریعتر هم راهنمایی بشید

m3343kh
سه شنبه 17 دی 1398, 23:07 عصر
نمونه و توضیحات خدمتتان ارسال گردید.
تشکر

m3343kh
چهارشنبه 18 دی 1398, 12:38 عصر
بین فیلدهای "کد" در هر دو جدول ارتباط برقرار است





یا چشم نمی‌بیند یا راه نمی‌داند

هر کاو به وجود خود دارد ز تو پروایی

Mehr@ban
چهارشنبه 18 دی 1398, 13:51 عصر
سلام

فرم Title_tbl رو بررسی کنید
صرفا با استفاده از بخش ویزارد درست شده و کدنویسی دستی نداشته

معنا و منظور از شعر رو هم متوجه نشدم :لبخند:

m3343kh
چهارشنبه 18 دی 1398, 19:40 عصر
ممنون
منظوری نبود

m3343kh
چهارشنبه 18 دی 1398, 19:44 عصر
ممنون از زحمتی که کشیدید ولی به سوالم جواب سوالم نبود

Mehr@ban
پنج شنبه 19 دی 1398, 10:38 صبح
ممنون از زحمتی که کشیدید ولی به سوالم جواب سوالم نبود

نمونه ای بود تا به عنوان الگو بتونید ازش استفاده کنید
بهرحال سعی میکنم نمونه ای که ارسال کردین رو اصلاح کنم

m3343kh
شنبه 21 دی 1398, 00:34 صبح
چیزی شبیه ارتباط بین یک کومبوباکس و ساب فرم، در یک فرم.

منتهی به جای "کمبوباکس" یک "ساب فرم" قرار دارد.

m3343kh
شنبه 21 دی 1398, 22:19 عصر
یکی یک راهنمایی کند لطفا

mazoolagh
سه شنبه 24 دی 1398, 11:46 صبح
خواسته شما با master/detail معمولی متفاوت هست و باید از رخداد form current استفاده کنین.
به این صورت که در رخداد form current فرم master، با توجه به کلیدی که رابطه بر اساس اون تعریف شده، recordsource فرم detail رو تعیین میکنید:
parent!SubForm_Deatil.form.recordsource="SELECT * FROM MasterTable WHERE KeyField=" & me.KeyField

نکاتی هم هست که باید بهش دقت کنین:
1- در فرم master و قبل از اینکه recordsource فرم detail رو set کنین، اول باید مطمئن بشین فرم detail حتما load شده باشه.
2- recordsource فرم detail رو نباید مستقیم به table/query منسوب کنین، باید خالی باشه تا با کد تعیین بشه.
3- باید کدهای مناسب برای کنترل مقادیر وقتی که در فرم Master رکورد جدید میسازین بنویسین (در نمونه پیوست این کدها نیست!)
4- همینجور در فرم Master باید کد مناسب برای ست کردن default value فیلد کلید (که رابطه بر اساس اون تعریف شده) در فرم detail دیده بشه (این کدها هم در نمونه پیوست نیست)

mazoolagh
سه شنبه 24 دی 1398, 11:58 صبح
در نمونه پیوست فرم Master ما categories نام داره،
اول یک متغیر تعریف میکنیم که برای چک کردن load شدن فرم details (به نام products) از اون استفاده میکنیم:

Private Sub Form_Load()
TempVars.Add "Products_IsLoaded", False
End Sub

حالا میتونیم کد مناسب رو بنویسیم:
Private Sub Form_Current()
If Not TempVars("Products_IsLoaded") Or IsNull(Me.CategoryID) Then Exit Sub
Parent!Subform_Products.Form.RecordSource = "SELECT * FROM Products WHERE CategoryID=" & Me.CategoryID
End Sub

mazoolagh
سه شنبه 24 دی 1398, 12:03 عصر
در رخداد form load فرم details (همون products) ، متغیری رو که تعریف کرده بودیم به نشانه Load شدن فرم مقدار دهی میکنیم
و همینجور recordsource اولیه رو ست میکنیم:

Private Sub Form_Load()
TempVars("Products_IsLoaded") = True
Me.RecordSource = "SELECT * FROM Products WHERE CategoryID=" & Me.Parent!SubForm_Categories!CategoryID
End Sub

mazoolagh
سه شنبه 24 دی 1398, 12:08 عصر
و فراموش نمیکنیم که هنگام بستن فرم اصلی (به اسم main) ، متغیری رو که تعریف کرده بودیم پاک کنیم:

Private Sub Form_Close()
TempVars.Remove ("Products_IsLoaded")
End Sub

mazoolagh
سه شنبه 24 دی 1398, 12:08 عصر
نتیجه کار:
151252

mazoolagh
سه شنبه 24 دی 1398, 12:11 عصر
برنامه نمونه:

m3343kh
سه شنبه 24 دی 1398, 18:11 عصر
بسیار سپاس گذارم دوست عزیز

تشکر فراوان

متشکرم