PDA

View Full Version : سوال: سوال در مورد BeforeUpdate در اکسس



DT-832
پنج شنبه 13 شهریور 1399, 14:28 عصر
سلام، یک سئوال در اکسس دارم.
فیلم آموزشی آفیس باز درخصوص Me.Dirty دیدم ، سوال من این است که چطوری در موقع جابجایی رکورد می توانیم متوجه بشویم که کدام فیلد ها در این رکورد تغییرات داشته، بطور مثال اگر فرم ما 10 فیلد دارد و وقتی فیلد هایی با نام A یا C یا G تغییراتی داشته این رکورد باید در جدولی با نام TB_MyHistory نیز کپی شود ( بصورت جداگانه هر فیلد را در BeforeUpdate بررسی کردم و کپی را نیز انجام دادم ولی دنبال راهی هستم که بطور کلی در هنگام جابجایی رکورد اگر در فیلد های مورد نظر تغییراتی بود رویداد خاصی را انجام دهم، نه در هنگام جابجایی فیلد )

eb_1345
پنج شنبه 13 شهریور 1399, 21:06 عصر
سلام، یک سئوال در اکسس دارم.
فیلم آموزشی آفیس باز درخصوص Me.Dirty دیدم ، سوال من این است که چطوری در موقع جابجایی رکورد می توانیم متوجه بشویم که کدام فیلد ها در این رکورد تغییرات داشته، بطور مثال اگر فرم ما 10 فیلد دارد و وقتی فیلد هایی با نام A یا C یا G تغییراتی داشته این رکورد باید در جدولی با نام TB_MyHistory نیز کپی شود ( بصورت جداگانه هر فیلد را در BeforeUpdate بررسی کردم و کپی را نیز انجام دادم ولی دنبال راهی هستم که بطور کلی در هنگام جابجایی رکورد اگر در فیلد های مورد نظر تغییراتی بود رویداد خاصی را انجام دهم، نه در هنگام جابجایی فیلد )


سلام
برای اینکار باید در زمانی که هنوز تغییراتی بر روی رکوردها صورت نگردیده مقادیر قبل از تغییر در خصوصیت tag هر فیلد یا تکست باکس ذخیره شود مثلاً اینکار در زمان لود فرم انجام میشود . بعد از تغییرات مقدار فعلی فیلد با مقدار اولیه که در خصوصیت tag ذخیره شده مقایسه میشود ، اگر با هم تفاوت داشت مقدار آن فیلد کپی شود .
به کدهای زیر توجه بفرما !
ابتدا در رویداد Form_Load مقادیر هر فیلد در خصوصیت tag آن ذخیره میشود


Private Sub Form_Load()
Dim ctl As Control
For Each ctl In Me.Controls
If ctl.ControlType = acTextBox Then
If IsNull(ctl) Or ctl.Value = "" Then
ctl.Tag = ""
Else
ctl.Tag = ctl.Value
End If
End If
Next ctl
End Sub


در مرحله بعد در رویداد کلیک یک کمند باتن مقادیر قبلی ذخیره شده با مقادیر فعلی مقایسه میشود اگر با هم تفاوت داشت مقداد آن فیلد ها کپی شود



Private Sub Command4_Click()
Dim ctl As Control
For Each ctl In Me.Controls
If ctl.ControlType = acTextBox Then
If Len(ctl) > 0 And ctl.Value <> ctl.Tag Then
MsgBox ctl.Name
'copycode
ctl.Tag = ""
End If
End If
Next ctl
End Sub


بجای عبارت copycode کد کپی شدن رکورد را درج کن!
یا علی