PDA

View Full Version : چگونه از اجرای دوباره یک رویداد جلوگیری کنم؟



rainlover
شنبه 10 بهمن 1394, 13:29 عصر
دوستان سلام.
من در کدم تو رویداد BeforeUpdate کنترل کردم که اگر چنانچه کاربر مقدار یک فیلد خاص رو وارد نکرده بود ذخیره نشه و پیغام بده.
این هم کدم

Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim flag As Boolean
flag = false
If (IsNull(idNoeTazmin)) Then
MsgBox "A"
flag = False
End If
If (IsNull(idEllateTazmin)) Then
MsgBox "B", vbCritical
flag = True
End If
If (IsNull(Shomare)) Then
MsgBox "C", vbCritical
flag = True
End If
If (IsNull(Mablagh)) Then
MsgBox "D", vbCritical
flag = True
End If


Cancel = flag
End Sub

حالا مشکلی که دارم اینه که وقتی کاربر دکمه سیو رو فرم رو میزنه و این کد اجرا میشه یکی از مسیج ها نشون داده میشه بعد پیغام "No Current Record" میاد و بعد دوباره میاد تو همین رویداد و کاربر دوباره پیغامی که من نوشتم رو می بینه. یعنی کلا دوبار پیغام تکراری و یه بار هم اون پیغام انگلیسی رو نشون میده.
من تست کردم دیدم اگه مسیج رو کامنت کنم مشکلی پیش نمیاد و متد یه بار اجرا میشه. ولی اگه به خط مسیج برسه دوبار اجرا می کنه. علت چیه و راه حل چی
ضمنا من نمیخوام از تو جدول فیلد Required رو بذارم میخوام از فرم کنترلش کنم. ممنون

e601
شنبه 10 بهمن 1394, 15:21 عصر
سلام
این کدها ظاهرا مشکلی نداره. احتمالا مشکل در کدهای دکمۀ save شماست که این خطا رو ایجاد میکنه.
کدش رو قرار بدید تا یه نگاهی بندازیم...

rainlover
یک شنبه 11 بهمن 1394, 08:35 صبح
دکمه سیو همون دکمه سیو پیش فرض اکسسه. زیرش کدی من ننوشتم. من فعلا به جای مسیج باکس خطام رو با لیبل قرمز رنگ نشون میدم ولی این اصلا اون چیزی نیست که می خوام. چون بصورت دیتاشیت نمی تونه اون لیبل من رو نشون بده.
من کل سورسم رو میخواست بذارم ولی آپلود نشد گویا سایت مشکل داره.
جالبه که در حالت دیتاشیت پیغام رو یکبار نشون میده ولی در حالت فرم دو بار راستی من با ماکرو هم انجام دادم این ولیدیشن رو ولی باز دو بار اجرا می شد.
ممنون میشم که مشکل رو حل کنید
اگر حل شد که چه بهتر اما اگر حل نشد لطف کنید بگید من چطور تو رویداد BeforUpdate کنترل کنم که اگر فرم در حالت دیتاشیت باز شده از روش مسیج باکس و اگر در حالت فرم باز شده از روش لیبل استفاده کنم.ممنون

e601
یک شنبه 11 بهمن 1394, 10:10 صبح
ببینید کدی که در پست اول قرار دادید مشکلی نداره. به احتمال خیلی زیاد در یک ایونت دیگه (چه ایونت فرم چه ایونت کنترل های فرم) یه کدی وجود داره که خطای no current record میده. اگه نمونه بود بهتر میشد بررسی کرد که متاسفانه موفق به آپلود نشدید.
ولی اگر میخواید حالت فرم رو چک کنید و بر اساس اون نحوۀ پیام رسانی رو مشخص کنید میتونید از کد زیر استفاده کنید:

Select Case (Me.CurrentView)
Case 1
'code for form view...
Case 2
'code for data sheet view...
End Select

rainlover
یک شنبه 11 بهمن 1394, 14:37 عصر
ممنون از پاسخگویی و از اینکه با حوصله جواب دادید.
من هم حدس شما رو زدم واسه همین رفتم تو ایوینتای دیگه BreakPoint گذاشتم ولی اصلا تو اونا نرفت. به هر حال من مجبور شدم که برای حالت فرم از لیبل و برای حالت دیتاشیت از مسیج باکس استفاده کنم که اصلا دلچسبم نبود افزونگی کد. ممنون از شما دوست عزیز.