View Full Version : جلوگیری از ثبت کد تکراری
nima_8m
جمعه 29 آبان 1388, 03:31 صبح
باسلام
با چه کدی میشه در هنگام ثبت یک کد کالای جدید از ثبت تکراری جلوگیری کرد ؟
اگه پروژه لازم بود استفاده کنید؟
xxxxx_xxxxx
جمعه 29 آبان 1388, 03:57 صبح
سلام،
این کدهای دکمه ذخیره هست:
Private Sub btnSave_Click()
If txtCode.Text = "" Then MsgBox "˜Ï ˜ÇáÇ ÑÇ æÇÑÏ äãÇííÏ": Exit Sub
If txtName.Text = "" Then MsgBox "äÇã ˜ÇáÇ ÑÇ æÇÑÏ äãÇííÏ": Exit Sub
Dim rs As New ADODB.Recordset
If conn.state = 1 Then conn.Close
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\dbase\bank.mdb;Persist Security Info=False"
rs.Open "select * from anbar", conn, adOpenStatic, adLockOptimistic
rs.AddNew
rs("Code") = txtCode.Text
rs("Name") = txtName.Text
rs("Number") = txtTedad.Text
rs("Buy") = txtKharidFee.Text
rs("Frosh") = txtForoshFee.Text
rs("t") = txtComment.Text
rs("Date") = txtDate.Text
DoEvents
rs.Update
MsgBox "˜ÇáÇ ÌÏíÏ ÇÖÇÝå ÔÏ", vbInformation
Load_Vs
End Sub
که به این صورت تغییر بدید:
If txtCode.Text = "" Then MsgBox "˜Ï ˜ÇáÇ ÑÇ æÇÑÏ äãÇííÏ": Exit Sub
If txtName.Text = "" Then MsgBox "äÇã ˜ÇáÇ ÑÇ æÇÑÏ äãÇííÏ": Exit Sub
Dim rs As New ADODB.Recordset
If conn.state = 1 Then conn.Close
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\dbase\bank.mdb;Persist Security Info=False"
rs.Open "select * from anbar where Code='" & txtCode.Text & "'", conn, adOpenStatic, adLockOptimistic
If rs.RecordCount > 0 Then
MsgBox "کد تکراری"
rs.Close
Exit Sub
End If
rs.AddNew
rs("Code") = txtCode.Text
rs("Name") = txtName.Text
rs("Number") = txtTedad.Text
rs("Buy") = txtKharidFee.Text
rs("Frosh") = txtForoshFee.Text
rs("t") = txtComment.Text
rs("Date") = txtDate.Text
DoEvents
rs.Update
MsgBox "˜ÇáÇ ÌÏíÏ ÇÖÇÝå ÔÏ", vbInformation
Load_Vs
توضیح:
قبل از ایجاد رکورد جدید، یکبار کدی که کاربر وارد کرده رو تو جدول جستجو می کنیم. اگر جستجو نتیجه ای نداشت، (یعنی هیچ رکوردی پیدا نشد که فیلد کدش برابر با کدی که کاربر وارد کرده باشه) اونوقت AddNew انجام میشه. ولی اگر جستجو نتیجه ای داشت باید exit sub کنیم، تا عمل ثبت انجام نشه.
موفق باشید/
paysokhan
جمعه 29 آبان 1388, 15:48 عصر
قبل از ایجاد رکورد جدید، یکبار کدی که کاربر وارد کرده رو تو جدول جستجو می کنیم. اگر جستجو نتیجه ای نداشت، (یعنی هیچ رکوردی پیدا نشد که فیلد کدش برابر با کدی که کاربر وارد کرده باشه) اونوقت AddNew انجام میشه. ولی اگر جستجو نتیجه ای داشت باید exit sub کنیم، تا عمل ثبت انجام نشه.
این کار برای جدولی با 2000 رکورد معقولانه نیست
نظرت چیست؟
nima_8m
شنبه 30 آبان 1388, 01:18 صبح
قبل از ایجاد رکورد جدید، یکبار کدی که کاربر وارد کرده رو تو جدول جستجو می کنیم. اگر جستجو نتیجه ای نداشت، (یعنی هیچ رکوردی پیدا نشد که فیلد کدش برابر با کدی که کاربر وارد کرده باشه) اونوقت AddNew انجام میشه. ولی اگر جستجو نتیجه ای داشت باید exit sub کنیم، تا عمل ثبت انجام نشه.
موفق باشید/
باسلام و تشکر از جناب x
حرف دوست عزیز در پست دوم کاملا به جاست به نظر من باید از یک error handel استفاده کرد البته من به کار بردم ولی مشکلش اینجاست که بقیه فیلدها هم اگه تکراری باشن پیغام میده
به این کد توجه کنید؟
On Error GoTo ER
ER:
Adodc1.Refresh
MsgBox " Çã˜Çä ËÈÊ ÏÇÏå ʘÑÇÑí ÏÑ áíÓÊ æÌæÏ äÏÇÑÏ ", vbCritical, ""
Text1.SetFocus
کاملا عملیه ولی همانطور که گفتم مشکل داره
xxxxx_xxxxx
شنبه 30 آبان 1388, 09:07 صبح
این کار برای جدولی با 2000 رکورد معقولانه نیست
نظرت چیست؟
سلام،
اگر فیلد کد رو کلید اصلی(Primary key) جدول تعریف کنیم اونوقت اصلاً نیاز به هیچ جستجویی نیست و تکراری بودن یا نبودن کد توسط DBMS بررسی میشه و ما فقط با یک error handler وضعیت نهایی رو چک می کنیم.
به نظر من باید از یک error handel استفاده کرد البته من به کار بردم ولی مشکلش اینجاست که بقیه فیلدها هم اگه تکراری باشن پیغام میده
شما این کد رو کجا قرار دادید؟ آیا دستور جستجو رو تغییر دادید؟
nima_8m
شنبه 30 آبان 1388, 22:59 عصر
سلام
On Error GoTo ER
در ابتدای کد ثبت و
ER:
Adodc1.Refresh
MsgBox " Çã˜Çä ËÈÊ ÏÇÏå ʘÑÇÑí ÏÑ áíÓÊ æÌæÏ äÏÇÑÏ ", vbCritical, ""
Text1.SetFocus
در پایان کد ثبت.
xxxxx_xxxxx
شنبه 30 آبان 1388, 23:09 عصر
در حالت عادی مقادیر تکراری در یک جدول باعث بروز خطا نخواهند شد. پس شما نمی تونید با On Error تکراری بودن یا نبودن کد رو بررسی کنید. از طرفی با این دستوری که شما نوشتید هر خطایی که رخ دهد چه مرتبط با بانک باشد چه نباشد پیغامی که در آخر گذاشتید نمایش داده میشود.
مرتضی تقدمی
پنج شنبه 05 آذر 1388, 10:36 صبح
کار زیاد سختی نیست . اول کد رو بگیر بعد از اول جدول بانک اطلاعاتی تا آخرش یکی یکی همه کدها رو چک کن . اگه تکراری بود پیغام بده.
nima_8m
یک شنبه 08 آذر 1388, 17:51 عصر
کار زیاد سختی نیست . اول کد رو بگیر بعد از اول جدول بانک اطلاعاتی تا آخرش یکی یکی همه کدها رو چک کن . اگه تکراری بود پیغام بده.
پست شماره 3 رو بخون
vahid_visualbasic
یک شنبه 15 آذر 1388, 02:01 صبح
خصوصیت indexed جدول کد رو تو اکسس no duplicates قرار بده حالا میبینی وقتی کاربر کد تکراری وارد میکنه برنامه ارور میده میتونی یه On Error Resume Next بزاری بالای کد حالا وقتی کاربر کد تکراری وارد میکنه ارور هم نمیده میزنه کالا ثبت شد ولی اگه تکراری باشه ثبت نمیکنه اگه بخوای به کار ظرافت بیشتری بدی میتونی کد ارور ران تایم رو یادداشت کنی و یه دستور بنویسی که وقتی برنامه برابر این ارور شد پیغام بده کد تکراریست و برنامه بسته نشه.......
nima_8m
چهارشنبه 18 آذر 1388, 16:57 عصر
خصوصیت indexed جدول کد رو تو اکسس no duplicates قرار بده حالا میبینی وقتی کاربر کد تکراری وارد میکنه برنامه ارور میده میتونی یه On Error Resume Next بزاری بالای کد حالا وقتی کاربر کد تکراری وارد میکنه ارور هم نمیده میزنه کالا ثبت شد ولی اگه تکراری باشه ثبت نمیکنه اگه بخوای به کار ظرافت بیشتری بدی میتونی کد ارور ران تایم رو یادداشت کنی و یه دستور بنویسی که وقتی برنامه برابر این ارور شد پیغام بده کد تکراریست و برنامه بسته نشه.......
سلام و ممنون
میشه راجع به ارور ران تایم و نحوه نوشتن کد خطا بیشتر توضیح بدی.
vahid_visualbasic
چهارشنبه 18 آذر 1388, 20:53 عصر
سلام
خب این یکی از راه هاش بود در مورد برنامه شما میتونید از یه راه ساده تر استفاده کنید
دستور on error resume next میگه اگه تو یه دستور ارور بود برو به خط بعدی و اون رو اجرا کن شما اول کدت یه on error resume next بزار بعد بیا بعد از دستور یه پیغام بزار
msgbox"کدوارد شده تکراری است"حالا برنامه رو که اجرا میکنی کاربر میاد یه کد تکراری میده وی بی میاد ارور بده on errorresume next جلوی ارور رو میگیره میفرستتش به دستور بعدی دستور بعدی هم که یه msgbox هست که اجرا میشه و به کاربر میگه کد وارد شده تکراری است.....
اینترنتم دیال اپ هست وگرنه براتون فایل رو ضمیمه میکردم
HamedNet_ir
پنج شنبه 19 آذر 1388, 15:26 عصر
در حالت عادی مقادیر تکراری در یک جدول باعث بروز خطا نخواهند شد. پس شما نمی تونید با On Error تکراری بودن یا نبودن کد رو بررسی کنید. از طرفی با این دستوری که شما نوشتید هر خطایی که رخ دهد چه مرتبط با بانک باشد چه نباشد پیغامی که در آخر گذاشتید نمایش داده میشود.
دستور on error resume next میگه اگه تو یه دستور ارور بود برو به خط بعدی و اون رو اجرا کن
همانطور که نوشته اید در صورتی که on error goto err رو بزاریم و در آخر sub هم err : بزاریم ، چه دستوراتمون اررو داشته باشن چه نه ، باز هم err اجرا میشود.
برای رفع این مشکل چه کار باید کرد؟
xxxxx_xxxxx
پنج شنبه 19 آذر 1388, 18:51 عصر
همانطور که نوشته اید در صورتی که on error goto err رو بزاریم و در آخر sub هم err : بزاریم ، چه دستوراتمون اررو داشته باشن چه نه ، باز هم err اجرا میشود.
برای رفع این مشکل چه کار باید کرد؟
در آخر sub قبل از لیبلی که به آن پرش می کنید (err:) باید کنترل برنامه رو از sub خارج کنید. برای این کار در خط قبل از err: بنویسید exit sub
exit sub در شرایطی اجرا می شود که در طول sub هیچ error ی رخ نداده باشد.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.