nabeel
سه شنبه 13 بهمن 1388, 15:39 عصر
ضمن سلام
چندين باره هستش كه سئوالي مبني بر اجازه ذخيره سازي يك ركورد تنها پس از تاييد ، پرسيده ميشه كه راه حلهاي ارائه شده اگر نگيم اشتباه وليكن يا دشوار ( در جايي كه نيازي نيست ) و يا ناقص هستند به طور مثال به دو نمونه از توصيه ها اشاره ميكنم :
توصيه يك :
فرم به صورت Unbound طراحي بشه و احتمالاً از طريق ADO و يا DAO اين كار به انجام برسه .
نيازي به اعمال اين روش پر دردسر نيست ، زمانتون رو صرف انجام اينكار نكنيد .
توصيه دو :
در رویداد on exit آخرین شی روی فرم نیز میشه .....
اين روش ناقصه ، الزامي نداره كه كاربر رويداد On Exit رو اون هم در داخل آخرين كنترل صادر كرده باشه
كاربر ممكنه تنها يك فيلد رو ويرايش كرده باشه و حالا بخواد به ركورد بعدي بره ، در اين حالت اين روش جوابگو نيست .
راه حل موثر ساده هستش :
هر ركورد ( به عنوان حامل كليه فيلدها ) رويدادي رو پشتيباني ميكنه با عنوان Befor Update كه رويداد مناسبي جهت به دام انداختن و رسيدن به هدف مورد نظره
اين رويداد با ايجاد و يا تغيير هر ركورد صادر ميشه و قبل از خروج به ركورد بعدي صادر شده و در همينجاست كه شما ميتونيد كد خودتون رو جاري كنيد ، به طور مثال اين كد رو مورد استفاده قرار بديد .
Private Sub Form_BeforeUpdate(Cancel As Integer)
If MsgBox("Do you want to save this record ?", vbQuestion + vbYesNo) = vbNo Then
Cancel = True
SendKeys "{ESC}"
End If
End Sub
بر اساس اين رويداد در صورت عدم تاييد رويداد ذخيره سازي از سوي كاربر توسط دستور Cancel = True عمليات ذخيره سازي ( ويا در اينجا همان Update ) لغو شده و توسط دستور تكميلي SendKeys اطلاعات به قبل از ايجاد و يا تغيير ، برگردانده ميشود .
دستور فوق ساده ترين ساختار اجرايي جهت انجام اين عمليات رو در برميگيره و فاقد پيچيدگي غير الزام آور دو فرآيند قبليه .
چندين باره هستش كه سئوالي مبني بر اجازه ذخيره سازي يك ركورد تنها پس از تاييد ، پرسيده ميشه كه راه حلهاي ارائه شده اگر نگيم اشتباه وليكن يا دشوار ( در جايي كه نيازي نيست ) و يا ناقص هستند به طور مثال به دو نمونه از توصيه ها اشاره ميكنم :
توصيه يك :
فرم به صورت Unbound طراحي بشه و احتمالاً از طريق ADO و يا DAO اين كار به انجام برسه .
نيازي به اعمال اين روش پر دردسر نيست ، زمانتون رو صرف انجام اينكار نكنيد .
توصيه دو :
در رویداد on exit آخرین شی روی فرم نیز میشه .....
اين روش ناقصه ، الزامي نداره كه كاربر رويداد On Exit رو اون هم در داخل آخرين كنترل صادر كرده باشه
كاربر ممكنه تنها يك فيلد رو ويرايش كرده باشه و حالا بخواد به ركورد بعدي بره ، در اين حالت اين روش جوابگو نيست .
راه حل موثر ساده هستش :
هر ركورد ( به عنوان حامل كليه فيلدها ) رويدادي رو پشتيباني ميكنه با عنوان Befor Update كه رويداد مناسبي جهت به دام انداختن و رسيدن به هدف مورد نظره
اين رويداد با ايجاد و يا تغيير هر ركورد صادر ميشه و قبل از خروج به ركورد بعدي صادر شده و در همينجاست كه شما ميتونيد كد خودتون رو جاري كنيد ، به طور مثال اين كد رو مورد استفاده قرار بديد .
Private Sub Form_BeforeUpdate(Cancel As Integer)
If MsgBox("Do you want to save this record ?", vbQuestion + vbYesNo) = vbNo Then
Cancel = True
SendKeys "{ESC}"
End If
End Sub
بر اساس اين رويداد در صورت عدم تاييد رويداد ذخيره سازي از سوي كاربر توسط دستور Cancel = True عمليات ذخيره سازي ( ويا در اينجا همان Update ) لغو شده و توسط دستور تكميلي SendKeys اطلاعات به قبل از ايجاد و يا تغيير ، برگردانده ميشود .
دستور فوق ساده ترين ساختار اجرايي جهت انجام اين عمليات رو در برميگيره و فاقد پيچيدگي غير الزام آور دو فرآيند قبليه .