View Full Version : سوال: جلوگیری از ورود رکورد تکراری در جدول
moradi.j
پنج شنبه 12 مهر 1403, 12:09 عصر
با سلام
بنده یک فایل اکسس دارم و در جدول invoicetable1 دو فیلد (شماره فاکتور و نام شرکت/موسسه) که موقع ورود رکورد جدید می خوام این دو فیلد بررسی بشود و رکورد تکراری با اطلاعات این دو فیلد وارد نشود البته یک دستور روی افتر اپدیت شماره فاکتور گذاشتم اما درست کار نمیکنه
متاسفانه فایل اپلود نشد
https://drive.google.com/file/d/1ZpPGsCDvn22dVzwJFd5ToG61wPeipiqR/view?usp=drive_link لینک دانلود
ممنون میشم کمکم کنید.
سپاس
mazoolagh
پنج شنبه 12 مهر 1403, 18:05 عصر
سلام و روز خوش
من فایل شما رو ندیدم،
ولی بهتر هست ساختار جدول و کد رو همینجا بگذارین،
و مشخص کنین فرم شما bound هست یا unbound ؟
شاید اصلا نیازی به پیوست کل برنامه نباشه.
و این که رخداد before update/before insert رو استفاده کنین.
moradi.j
شنبه 14 مهر 1403, 07:45 صبح
سلام
بنده این کد رو در افتر اپدیت فیلد شماره فاکتور گذاشتم
بله فرم باند شده است
Private Sub invoice_no_AfterUpdate()
Dim Newbook, Newf_name As String
Dim myCriteria As Strin
Newf_name = Me.company_name.Value
Newbook = Me.invoice_no.Value
myCriteria = "[ invoice_no] = " & "'" & Newbook & "' and [company_name] = " & "'" & Newf_name & "'"
If Me.invoice_no = DLookup("[invoice_no]", "invoicetable1", myCriteria) Then
MsgBox "اين فاکتور با شماره " & " " & Newbook & " " & "با نام شرکت/موسسه " & Newf_name _
& vbCr & "در حال حاضر در پايگاه داده ثبت شده است " & vbCr & "لطفا دوباره بررسي نماييد.", vbInformation, "اطلاعات تکراري"
Me.Undo
End If
End Sub
moustafa
شنبه 14 مهر 1403, 13:20 عصر
درخداد before update/before insert باید قرار بدین
If IsNull(Duplicate) Then
Else
MsgBox " اين شماره صورت وضعيت قبلا وارد شده است ."
Cancel = True
End If
mazoolagh
شنبه 14 مهر 1403, 13:42 عصر
بله فرم باند شده است
Private Sub invoice_no_AfterUpdate()
Dim Newbook, Newf_name As String
Dim myCriteria As Strin
Newf_name = Me.company_name.Value
Newbook = Me.invoice_no.Value
myCriteria = "[ invoice_no] = " & "'" & Newbook & "' and [company_name] = " & "'" & Newf_name & "'"
If Me.invoice_no = DLookup("[invoice_no]", "invoicetable1", myCriteria) Then
MsgBox "اين فاکتور با شماره " & " " & Newbook & " " & "با نام شرکت/موسسه " & Newf_name _
& vbCr & "در حال حاضر در پايگاه داده ثبت شده است " & vbCr & "لطفا دوباره بررسي نماييد.", vbInformation, "اطلاعات تکراري"
Me.Undo
End If
End Sub
سلام دوباره
باید در beforeupdate باشه؛
و بجای undo کردن فرم، cancel رو برابر true بذارین.
روش دیگه تعریف constraint روی فیلدهایی هست که باید یکتا باشن،
و کپچر کردن خطا در فرم.
و همچنین میتونین از datamacro هم استفاده کنین.
این تاپیک رو هم بخونین:
آموزش: جلوگیری از ورود داده تکراری در اکسس + نمایش پیغام خطا (barnamenevis.org) (https://barnamenevis.org/showthread.php?413205-%D8%AC%D9%84%D9%88%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A7%D8%B2-%D9%88%D8%B1%D9%88%D8%AF-%D8%AF%D8%A7%D8%AF%D9%87-%D8%AA%DA%A9%D8%B1%D8%A7%D8%B1%DB%8C-%D8%AF%D8%B1-%D8%A7%DA%A9%D8%B3%D8%B3-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D9%BE%DB%8C%D8%BA%D8%A7%D9%85-%D8%AE%D8%B7%D8%A7)
moradi.j
سه شنبه 17 مهر 1403, 07:41 صبح
با سلام و تشکر فراوان از اینکه وقتتون رو در اختیار بنده قرار دادید
متاسفانه کد رو جایگذاری کردم اما خروجی نداد
ممنون میشم روی فایل واسم انجام بدید و فایل رو بارگذاری کنید
بازم سپاس فراوان
moradi.j
سه شنبه 17 مهر 1403, 16:43 عصر
سلام
فایل پروژه
eb_1345
سه شنبه 17 مهر 1403, 21:21 عصر
با سلام و تشکر فراوان از اینکه وقتتون رو در اختیار بنده قرار دادید
متاسفانه کد رو جایگذاری کردم اما خروجی نداد
ممنون میشم روی فایل واسم انجام بدید و فایل رو بارگذاری کنید
بازم سپاس فراوان
سلام
کدهای زیر رو هم امتحان کن !
Private Sub invoice_no_AfterUpdate()
If Not IsNull(invoice_no) And Not IsNull(company_name) Then
If DCount("*", "invoicetable1", "invoice_no='" & invoice_no & "' and company_name=" & Me.company_name.Column(0) & "") > 0 Then
MsgBox "اين فاکتور با شماره " & " " & invoice_no & " " & "با نام شرکت/موسسه " & Me.company_name.Column(1) _
& vbCr & "در حال حاضر در پايگاه داده ثبت شده است " & vbCr & "! لطفا دوباره بررسي نماييد", vbInformation, "اطلاعات تکراري"
Me.Undo
End If
End If
End Sub
ضمناً با توجه به اینکه شرط باید برای هر دو فیلد invoice_no و company_name برقرار باشه این کد ها باید در رویداد AfterUpdate هر دو فیلد باید وارد بشه ( در یکی وارد بشه در دیگری فراخوانی بشه)
mazoolagh
چهارشنبه 18 مهر 1403, 10:14 صبح
با توجه به اینکه شرط باید برای هر دو فیلد invoice_no و company_name برقرار باشه این کد ها باید در رویداد AfterUpdate هر دو فیلد باید وارد بشه ( در یکی وارد بشه در دیگری فراخوانی بشه)
سلام جناب بهرامی و روز شما خوش
نیازی نیست،
و کلا این چک جاش همون before update بهتره،
و undo فرم هم باید از کاربر پرسیده بشه - گاهی کافی هست یک ویرایش جزئی انجام بده و اینجوری همه رکورد رو باید دوباره تایپ کنه.
moradi.j
چهارشنبه 18 مهر 1403, 14:24 عصر
سلام
متاسفانه اکی نبود و خروجی نداد:ناراحت::ناراحت:
mazoolagh
چهارشنبه 18 مهر 1403, 15:30 عصر
سلام
متاسفانه اکی نبود و خروجی نداد:ناراحت::ناراحت:
سلام دوباره و روز خوش
از تاپیک های زیر ایده بگیرین و روی برنامه خودتون پیاده کنین:
آموزش: تشخیص و جلوگیری از ورود رکورد تکراری در فرم bound (با استفاده از رخداد before update) (barnamenevis.org) (https://barnamenevis.org/showthread.php?589738-%D8%AA%D8%B4%D8%AE%DB%8C%D8%B5-%D9%88-%D8%AC%D9%84%D9%88%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A7%D8%B2-%D9%88%D8%B1%D9%88%D8%AF-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF-%D8%AA%DA%A9%D8%B1%D8%A7%D8%B1%DB%8C-%D8%AF%D8%B1-%D9%81%D8%B1%D9%85-bound-(%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%B1%D8%AE%D8%AF%D8%A7%D8%AF-before-update))
آموزش: تشخیص و جلوگیری از ورود رکورد تکراری (با استفاده از تعریف unique constraint در جدول) (barnamenevis.org) (https://barnamenevis.org/showthread.php?589739-%D8%AA%D8%B4%D8%AE%DB%8C%D8%B5-%D9%88-%D8%AC%D9%84%D9%88%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A7%D8%B2-%D9%88%D8%B1%D9%88%D8%AF-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF-%D8%AA%DA%A9%D8%B1%D8%A7%D8%B1%DB%8C-(%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AA%D8%B9%D8%B1%DB%8C%D9%81-unique-constraint-%D8%AF%D8%B1-%D8%AC%D8%AF%D9%88%D9%84))
آموزش: تشخیص و جلوگیری از ورود رکورد تکراری (با استفاده از data-macro در جدول) (barnamenevis.org) (https://barnamenevis.org/showthread.php?589743-%D8%AA%D8%B4%D8%AE%DB%8C%D8%B5-%D9%88-%D8%AC%D9%84%D9%88%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A7%D8%B2-%D9%88%D8%B1%D9%88%D8%AF-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF-%D8%AA%DA%A9%D8%B1%D8%A7%D8%B1%DB%8C-(%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-data-macro-%D8%AF%D8%B1-%D8%AC%D8%AF%D9%88%D9%84))
eb_1345
پنج شنبه 19 مهر 1403, 12:49 عصر
سلام جناب بهرامی و روز شما خوش
نیازی نیست،
و کلا این چک جاش همون before update بهتره،
و undo فرم هم باید از کاربر پرسیده بشه - گاهی کافی هست یک ویرایش جزئی انجام بده و اینجوری همه رکورد رو باید دوباره تایپ کنه.
عرض سلام متقابل خدمت جناب مازولاق عزیز !
فرمایش شما کاملاً صحیحه ؛ ولی در اینجا با توجه به اینکه استارتر محترم در نمونه ای که ضمیمه کرده ان کدها رو در رویداد AfterUpdate فیلد مربوطه بکار برده ان به همین خاطر خروجی کدها رو در رویداد before update امتحان نکردم
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.