PDA

View Full Version : سوال: فیلدی در سابفرم



michkadol
پنج شنبه 06 مرداد 1390, 12:40 عصر
با سلام
در نمونه پیوستی
با توجه به اینکه فرم به صورت Unbound است چکار کنم تا وقتی فرم هدایا باز میشود سابفرم هدایا کد پرسنلی را از از فرم VorodRefahi بگیرد و لیست هدایای قبلی کارمند را نمایش دهد؟

mazoolagh
پنج شنبه 06 مرداد 1390, 14:13 عصر
شما همیشه میتونین وقتی یک فرم را با کد باز میکنین یک مقدار از نوع string رو بهش پاس کنین که این مقدار در فرم به نام OPENARGS قابل دسترسی هست:


DIM PERS_CODE AS STRING
PERS_CODE = ....
...
...
DOCMD.OPENFORM "FORM_NAME",,..., "PERS_CODE"



SUB FORM_OPEN(...)
DIM PERS_CODE AS STRING
PERS_CODE = ME.OPENARGS
...
END SUB


و البته شما همیشه میتونین از متغیرهای گلوبال هم استفاده کنین.

michkadol
شنبه 08 مرداد 1390, 07:40 صبح
شما همیشه میتونین وقتی یک فرم را با کد باز میکنین یک مقدار از نوع string رو بهش پاس کنین که این مقدار در فرم به نام OPENARGS قابل دسترسی هست:

1

DIM PERS_CODE AS STRING
PERS_CODE = ....
...
...
DOCMD.OPENFORM "FORM_NAME",,..., "PERS_CODE"


2

SUB FORM_OPEN(...)
DIM PERS_CODE AS STRING
PERS_CODE = ME.OPENARGS
...
END SUB

و البته شما همیشه میتونین از متغیرهای گلوبال هم استفاده کنین.

ببخشید هرکار کردم نتونستم منظورتون رو بفهمم میشه رو نمونه نشون بدین؟
متشکرم

mazoolagh
شنبه 08 مرداد 1390, 10:51 صبح
لطفا کلیه قسمت های اضافی برنامه هایی رو که برای دیباگ پیوست میکنین حذف یا غیر فعال کنین بخصوص hideshowaccess. همینطور مواردی از قبیل login و ...

چند راه حل دارین. یکی همون ارسال مقدار به فرم هنگام باز کردن اون با دستور. در فرم vorodrefahi دستور DOCMD.OPENFORM رو بصورت زیر اصلاح کنین:

Private Sub Command16_Click()
On Error GoTo Err_Command14_Click
If IsNull(CodePersonel) Then
MsgBox "˜Ï ÑÓäáí ÑÇ ÇäÊÎÇÈ äãÇííÏ", vbCritical + vbMsgBoxRight, "ÎØÇ"
Else
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "Hadaya"
stLinkCriteria = "[CodePersonel]=" & Me![CodePersonel]
DoCmd.OpenForm stDocName, , , stLinkCriteria, , , CSTR(Me.CodePersonel.Value)
'Forms!Hadaya!Combo65.Value = Me.CodePersonel.Value
Exit_Command14_Click:
Exit Sub
Err_Command14_Click:
MsgBox Err.Description
Resume Exit_Command14_Click
End If
End Sub



و در فرم HADAYA هم بصورت زیر اصلاح کنین:

Private Sub Form_Open(Cancel As Integer)
DoCmd.Restore
Me.CodePersonel.Value = Me.OpenArgs
...
...


فقط موردی هست: طراحی تون مسلما نیاز به بازنگری داره چون شما یکبار مقدار PERSCODE رو دارین در شرط WHERE انتخاب رکوردها استفاده میکنین و اگر در طراحی جداول و فرم ها دقت کنین بصورت خودکار باید هدایای کارمند انتخاب بشه و نیاز به کدنویسی اضافی ندارین.


راه حل دیگه ای که دارین این هست که چون وقتی فرم HADAYA باز میشه هنوز فرم VORODREFAHI باز هست و مقدار PERSCODE هم از یکی از کنترل های اون خونده میشه لازم نیست در VORODREFAHI کار خاصی انجام بدین و میتونین در HADAYA مستقیما مقدار PERSCODE رو از VORODREFAHI بخونین:

Private Sub Form_Open(Cancel As Integer)
DoCmd.Restore
Me.CodePersonel.Value = Forms!VORODREFAHI!CodePersonel
...
...




راه سوم هم که استفاده از متغیرهای گلوبال (PUBLIC) هست.
در یکی از ماژول ها (مثلا MODULE1) یک متغیر به صورت زیر تعریف میکنین:

PUBLIC GPERSCODE AS STRING

حالا در تمامی برنامه همیشه به این مقدار دسترسی دارین. در فرم VORODREFAHI:

...
GPERSCODE=CODEPERSONEL
DoCmd.OpenForm stDocName, , , stLinkCriteria
...

و در فرم HADAY :

...
ME.CODEPERSONEL=GPERSCODE
...

michkadol
یک شنبه 09 مرداد 1390, 14:07 عصر
سلام
mazoolagh جون دست گلت درد نکنه
مورد دوم خیلی به کارم اومد
یادداشتم ولی به فکرم خطور نکرده بود
لطف کردی ممنونتم

تازه میشه یه کار دیگه هم کرد
تو propertis سابفرم link master fileds رو برابر combo65 قرار داد