نمایش نتایج 1 تا 4 از 4

نام تاپیک: تشخیص و جلوگیری از ورود رکورد تکراری در فرم bound (با استفاده از رخداد before update)

  1. #1
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    73
    پست
    3,684

    تشخیص و جلوگیری از ورود رکورد تکراری در فرم bound (با استفاده از رخداد before update)

    تاپیک های مرتبط:
    آموزش: تشخیص و جلوگیری از ورود رکورد تکراری (با استفاده از data-macro در جدول) (barnamenevis.org)
    آموزش: تشخیص و جلوگیری از ورود رکورد تکراری (با استفاده از تعریف unique constraint در جدول) (barnamenevis.org)
    آموزش: جلوگیری از ورود داده تکراری در اکسس + نمایش پیغام خطا (barnamenevis.org)


    جدول نمونه زیر رو در نظر بگیرین:

    1.png

    میخواهیم که جلوی ثبت رکورد تکراری بر اساس سه فیلد FirstName, LastName, DepartmentID رو بگیریم - به فیلدهای JobID و BirthDate کاری نداریم.
    آخرین ویرایش به وسیله mazoolagh : چهارشنبه 18 مهر 1403 در 19:24 عصر

  2. #2
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    73
    پست
    3,684

    نقل قول: تشخیص و جلوگیری از ورود رکورد تکراری در فرم bound (با استفاده از رخداد before update)

    گام اول این هست که ببینیم چنین رکوردی داریم یا نه،
    و بعد با یک پیغام مناسب به کاربر خبر بدیم.


    برای جستجو کافی هست از متد findfirst رکوردست استفاده کنیم که به مراتب از dlookup سریعتر هست.
    ولی دامنه جستجو رو به همه رکوردها به جز رکورد فعلی محدود میکنیم.
    همچنین به روال منطقی بجای رکوردست فرم از recordsetclone اون استفاده میکنیم.


    Option Compare Database
    Option Explicit

    Const WHR = "[ID]<> @ID AND [FirstName]=""@FN"" AND LastName=""@LN"" AND [DepartmentID]=@DID"

    Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim Criteria As String
    Criteria = Replace(WHR, "@ID", Me.ID)
    Criteria = Replace(Criteria, "@FN", Me.FirstName)
    Criteria = Replace(Criteria, "@LN", Me.LastName)
    Criteria = Replace(Criteria, "@DID", Me.DepartmentID)

    With Me.RecordsetClone
    .FindFirst Criteria
    If Not .NoMatch Then
    Cancel = True
    If MsgBox( _
    Prompt:="ID=" & !ID & vbCrLf & _
    "First Name=" & !FirstName & vbCrLf & _
    "Last Name=" & !LastName & vbCrLf & _
    "Birth Date=" & !BirthDate & vbCrLf & _
    "Department=" & DLookup("Department", "Departments", "DepartmentID=" & !DepartmentID) & vbCrLf & _
    "Job Title=" & DLookup("JobTitle", "JobTitles", "JobID=" & !JobID) & vbCrLf & vbCrLf & _
    "Drop Changes ?", _
    Buttons:=vbExclamation + vbYesNo, _
    Title:="Duplicate Record") = vbYes Then
    Me.Undo
    End If
    End If
    End With
    End Sub

  3. #3
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    73
    پست
    3,684

    نقل قول: تشخیص و جلوگیری از ورود رکورد تکراری در فرم bound (با استفاده از رخداد before update)

    تست در ویرایش رکورد:

    2.png

    تست در ثبت رکورد جدید:

    3.png

  4. #4
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    73
    پست
    3,684

    نقل قول: تشخیص و جلوگیری از ورود رکورد تکراری در فرم bound (با استفاده از رخداد before update)

    1- در اینجا برای سادگی فقط کدها مورد نیاز همین بحث آمده،
    در یک برنامه عملی باید form validation رو دقیق پیاده کنین - یک آموزش همراه با کد نمونه رو در تاپیک زیر میتونین ببینین (پست شماره 14 و به بعد):
    مبتدی: راهنمایی در نوشتن مسیج باکس (barnamenevis.org)

    2- در اینجا فرض شده که رکوردست فرم همه رکوردهای جدول رو در بر میگیره،
    اگر اینجور نیست باید به جای recordsetclone ، یک رکوردست دیگه روی کل جدول استفاده کنین.

    3- این روش جلوی ورود تکراری از فرم دیگه یا اجرای کوئری یا مستقیم از طریق جدول رو نمیگیره.
    هر چند که به طور منطقی در یک برنامه درست کاربر مطلقا هیچ دسترسی مستقیم به جدول ها نداره،
    ولی باید در هر فرمی که دیتا این جدول رو میتونه تغییر بده همین روش پیاده بشه،
    و همچنین برای آپدیت از طریق کوئری ها این روش جوابگو نیست و باید در سطح خود جدول پیاده بشه،
    که این رو در تاپیک دیگه ای میگم.

    برنامه پیوست:
    فایل های ضمیمه فایل های ضمیمه

تاپیک های مشابه

  1. تشخیص رکوردی که insert یا update شده،در trigger؟!
    نوشته شده توسط بمب منطقی در بخش T-SQL
    پاسخ: 6
    آخرین پست: یک شنبه 10 اردیبهشت 1391, 10:32 صبح
  2. سوال: تشخیص زمان Insert یا Update کردن داده ها در بانک
    نوشته شده توسط mmk1234 در بخش C#‎‎
    پاسخ: 3
    آخرین پست: یک شنبه 06 تیر 1389, 17:37 عصر
  3. تشخیص حالت Insert یا Update با فشار کلید
    نوشته شده توسط Developer Programmer در بخش دسترسی به داده ها (ADO.Net و LINQ و ...)
    پاسخ: 2
    آخرین پست: چهارشنبه 20 خرداد 1388, 19:27 عصر
  4. استفاده از دستور Update حالت DBDirectMethod برای Update یک DataSet بر روی دیتابیس
    نوشته شده توسط Ghalandari در بخش دسترسی به داده ها (ADO.Net و LINQ و ...)
    پاسخ: 1
    آخرین پست: چهارشنبه 29 آبان 1387, 09:19 صبح
  5. استفاده از event کنترلهایی که زمان اجرا Bound شده اند
    نوشته شده توسط یاسر بیرقی در بخش VB.NET
    پاسخ: 1
    آخرین پست: سه شنبه 17 بهمن 1385, 18:30 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •