تشخیص و جلوگیری از ورود رکورد تکراری (با استفاده از تعریف unique constraint در جدول)
2 ضمیمه
نقل قول: تشخیص و جلوگیری از ورود رکورد تکراری (با استفاده از تعریف unique constraint در جدول)
برای تعریف یک constraint هم میتونیم از یکی راه های زیر بریم:
1- در محیط طراحی جدول بخش indexs رو باز میکنیم،
تعریف فعلی ایندکس های جدول به این شکل هست:
ضمیمه 156171
حالا یک constraint از نوع unique روی سه فیلد مورد نظر میسازیم:
ضمیمه 156172
و جدول رو save میکنیم.
2- یک کوئری data definition تعریف میکنیم:
ALTER TABLE Personnel
ADD CONSTRAINT unique_constraint UNIQUE (FirstName, LastName, DepartmentID)
3 ضمیمه
نقل قول: تشخیص و جلوگیری از ورود رکورد تکراری (با استفاده از تعریف unique constraint در جدول)
بعد از تعریف این constraint ،
دیگه هیچ راهی برای insert/update رکورد تکراری نیست: چه در فرم، چه جدول و چه از طریق کوئری.
در جدول:
ضمیمه 156173
از طریق UPDATE کوئری:
UPDATE Personnel
SET FirstName = "gina", LastName = "grimes", DepartmentID = 2
WHERE ID=5
ضمیمه 156174
از طریق INSERT کوئری:
INSERT INTO Personnel
(FirstName, LastName, DepartmentID, JobID, BirthDate)
VALUES ("gina", "grimes", 2, 5, #2024-10-09#)
ضمیمه 156175
1 ضمیمه
نقل قول: تشخیص و جلوگیری از ورود رکورد تکراری (با استفاده از تعریف unique constraint در جدول)
در فرم برای تشخیص رکورد تکراری از رخداد form error استفاده میکنیم:
Option Compare Database
Option Explicit
Private Sub Form_Error(DataErr As Integer, Response As Integer)
Select Case DataErr
Case 3022
If MsgBox( _
Prompt:="A record with same (FirstName, LastName, Department) exists!" _
& vbCrLf & vbCrLf & "Drop Changes ?", _
Buttons:=vbExclamation + vbYesNo, _
Title:="Duplicate Record") = vbYes Then
Me.Undo
End If
Response = acDataErrContinue
Case Else
Response = acDataErrDisplay
End Select
End Sub
ضمیمه 156176
1 ضمیمه
نقل قول: تشخیص و جلوگیری از ورود رکورد تکراری (با استفاده از تعریف unique constraint در جدول)
1- در اینجا برای سادگی فقط کدهای مورد نیاز همین بحث آمده،
در یک برنامه عملی باید form validation رو دقیق پیاده کنین - یک آموزش همراه با کد نمونه رو در تاپیک زیر میتونین ببینین (پست شماره 14 و به بعد):
مبتدی: راهنمایی در نوشتن مسیج باکس (barnamenevis.org)
2- این روش جلوی ورود تکراری در هر موقعیتی رو میگیره (فرم، اجرای کوئری یا مستقیم از طریق جدول).
هر چند که به طور منطقی در یک برنامه درست کاربر مطلقا هیچ دسترسی مستقیم به جدول ها نداره.
برنامه پیوست: