PDA

View Full Version : فیلتر کردم فرم قبل از باز کردن آن



parsa70
جمعه 22 آذر 1398, 21:52 عصر
ا سلام و احترام
من یک فرم و ساب فرم دارم که کار جستجوی لحظه ای انجام میده میخواستم ببینم میتونم یکی از ردیف های اون فرم جستجو رو قبل از وارد شدن به فرم از طریق یک تکست باکس بیرونش که سه وضعیت انجام شد، جهت اطلاع و در دست اقدام داره رو بزنم وقتی که وارد فرم می‌شم یکی از این موارد فیلتر بشه و بعدش بشه جستجو کرد؟؟
فایل رو ضمیمه کردم
151119ب
با سپاس

mazoolagh
شنبه 23 آذر 1398, 10:32 صبح
برنامه شما رو ندیدم ولی اگر با docmd.openform فرم رو باز میکنین:
1- هم میتونین برای رکوردست فرم شرط where تعیین کنین
2- هم میتونین filter مشخص کنین
3- هم میتونین یک عبارت string به نام openargs فرم pass کنین (این چیزی هست که باید استفاده کنین)

در فرم میتونین openargs رو بخونین و هر کاری که میخواین باهاش انجام بدین!

استفاده از global variable یا tempvars هم که همیشه هست.

parsa70
شنبه 23 آذر 1398, 11:09 صبح
برنامه شما رو ندیدم ولی اگر با docmd.openform فرم رو باز میکنین:
1- هم میتونین برای رکوردست فرم شرط where تعیین کنین
2- هم میتونین filter مشخص کنین
3- هم میتونین یک عبارت string به نام openargs فرم pass کنین (این چیزی هست که باید استفاده کنین)

در فرم میتونین openargs رو بخونین و هر کاری که میخواین باهاش انجام بدین!

استفاده از global variable یا tempvars هم که همیشه هست.
سلام

ممنون از پاسختون من اینجوری فرم رو باز کردم
docmd.openform
متاسفانه مبتدی هستم این مواردی که گفتید رو جایی هست که بتونم به صورت رون ببینم و یاد بگیرم؟
سپاس فراوان

mazoolagh
دوشنبه 25 آذر 1398, 13:27 عصر
مطمئنم که تمام این موارد قبلا بحث شده و نمونه و احتمالا آموزش هم هست براش!

با این وجود یک نمونه پیوست میکنم که همه مواردی رو که گفته شد یکجا داشته باشه.

mazoolagh
دوشنبه 25 آذر 1398, 13:31 عصر
فرم start سه بخش مجزا داره که هر کدوم برای نشون دادن یک مورد هست:

1- باز کردن فرم customers و انتخاب کشور بعنوان شرط WHERE

151132

mazoolagh
دوشنبه 25 آذر 1398, 13:33 عصر
کد بخش 1

Private Sub B1_Click() ' WHERE
If Me.Country.Value = AnyItem Then
TempVars!Location = ""
DoCmd.OpenForm "Customers", , , , , acDialog
Else
TempVars!Location = " Country=" & Me.Country.Value
DoCmd.OpenForm "Customers", , , "Country='" & Me.Country.Value & "'", , acDialog
End If
End Sub

mazoolagh
دوشنبه 25 آذر 1398, 13:36 عصر
2- باز کردن فرم customers و انتخاب کوئری CustomersByCity بعنوان فیلتر:

151133

mazoolagh
دوشنبه 25 آذر 1398, 13:37 عصر
کد بخش 2

Private Sub B2_Click() ' FILTER
If Me.City.Value = AnyItem Then
TempVars!Location = ""
DoCmd.OpenForm "Customers", , , , , acDialog
Else
TempVars!Location = " City=" & Me.City.Value
DoCmd.OpenForm "Customers", , "CustomersByCity", , , acDialog
End If
End Sub

mazoolagh
دوشنبه 25 آذر 1398, 13:40 عصر
دقت کنید که با توجه به انتخاب کشور یا شهر caption فرم customers متناسب با اون تغییر میکنه

اینکار با تعیین TempVars!Location در فرم start و خوندن اون در form open فرم customers انجام میشه:

Private Sub Form_Open(Cancel As Integer)
Me.Caption = "Customers " & TempVars!Location
Me.InsideHeight = Me.Section(acHeader).Height + Me.Section(acDetail).Height * 10
End Sub

mazoolagh
دوشنبه 25 آذر 1398, 13:42 عصر
3- چهار تکسباکس داریم که مقادیر هر یک رو به یک روش به فرمی به نام Form1 میفرستیم:

151134

mazoolagh
دوشنبه 25 آذر 1398, 13:44 عصر
کد بخش 3

Private Sub B3_Click() ' OpenArgs
TempVars!Text2 = Nz(Me.TB2.Value, "")
Text3 = Nz(Me.TB3.Value, "")
DoCmd.OpenForm "Form1", , , , , acDialog, Nz(Me.TB1.Value, "")
End Sub

mazoolagh
دوشنبه 25 آذر 1398, 13:45 عصر
کد form open فرم form1 برای خوندن مقادیر:

Private Sub Form_Open(Cancel As Integer)
Me.TB1.Value = Me.OpenArgs
Me.TB2.Value = TempVars!Text2
Me.TB3.Value = Text3
If CurrentProject.AllForms("Start").IsLoaded Then
Me.TB4.Value = Forms!Start!TB4.Value
End If
End Sub

mazoolagh
دوشنبه 25 آذر 1398, 13:49 عصر
Option Compare Database
Option Explicit
Private Sub B1_Click() ' WHERE
If Me.Country.Value = AnyItem Then
TempVars!Location = ""
DoCmd.OpenForm "Customers", , , , , acDialog
Else
TempVars!Location = " Country=" & Me.Country.Value
DoCmd.OpenForm "Customers", , , "Country='" & Me.Country.Value & "'", , acDialog
End If
End Sub
Private Sub B2_Click() ' FILTER
If Me.City.Value = AnyItem Then
TempVars!Location = ""
DoCmd.OpenForm "Customers", , , , , acDialog
Else
TempVars!Location = " City=" & Me.City.Value
DoCmd.OpenForm "Customers", , "CustomersByCity", , , acDialog
End If
End Sub
Private Sub B3_Click() ' OpenArgs
TempVars!Text2 = Nz(Me.TB2.Value, "")
Text3 = Nz(Me.TB3.Value, "")
DoCmd.OpenForm "Form1", , , , , acDialog, Nz(Me.TB1.Value, "")
End Sub
Private Sub City_AfterUpdate()
Me.City.Value = Nz(Me.City.Value, AnyItem)
End Sub
Private Sub Country_AfterUpdate()
Me.Country.Value = Nz(Me.Country.Value, AnyItem)
End Sub
Private Sub Country_NotInList(NewData As String, Response As Integer)
Me.Country.Value = Me.Country.ItemData(0)
Response = acDataErrContinue
End Sub
Private Sub City_NotInList(NewData As String, Response As Integer)
Me.City.Value = Me.City.ItemData(0)
Response = acDataErrContinue
End Sub
Private Sub Form_Open(Cancel As Integer)
TempVars.Add "Location", ""
TempVars.Add "Text2", ""
Me.Country.Value = AnyItem
Me.City.Value = AnyItem
End Sub
Private Sub Form_Close()
TempVars.RemoveAll
End Sub

mazoolagh
دوشنبه 25 آذر 1398, 13:53 عصر
متغیرهای global باید در یک ماجول جدا تعریف بشن (نه ماجول فرم یا ریپورت)

برای همین برای نگهداری مقدار تکسباکس TB3 یک متغیر public در یک ماجول جدا (module1) تعریف شده:

Option Compare Database
Option Explicit
Public Text3 As String
Public Const AnyItem As String = "------"

mazoolagh
دوشنبه 25 آذر 1398, 13:54 عصر
برنامه پیوست :

linktaz
دوشنبه 25 آذر 1398, 16:02 عصر
ا سلام و احترام
من یک فرم و ساب فرم دارم که کار جستجوی لحظه ای انجام میده میخواستم ببینم میتونم یکی از ردیف های اون فرم جستجو رو قبل از وارد شدن به فرم از طریق یک تکست باکس بیرونش که سه وضعیت انجام شد، جهت اطلاع و در دست اقدام داره رو بزنم وقتی که وارد فرم می‌شم یکی از این موارد فیلتر بشه و بعدش بشه جستجو کرد؟؟
فایل رو ضمیمه کردم
151119ب
با سپاس

151136

سلام
پیوست رو بررسی نمائید

parsa70
دوشنبه 25 آذر 1398, 23:41 عصر
سلام دست هر دو شما بزرگوار درد نکنه.

parsa70
چهارشنبه 27 آذر 1398, 12:56 عصر
سلام
برای ریپورت ها چطوری باید اینکارو کرد؟؟ یعنی یک فیلد که چنتا گذینه رو داره فیلتر کنیم؟
سپاس

mazoolagh
پنج شنبه 28 آذر 1398, 13:39 عصر
در این مورد تفاوتی در روش کار بین فرم و ریپورت نیست