PDA

View Full Version : جلوگیری از ثبت اطلاعات تکراری در دیتابیس



jaboli
شنبه 03 مرداد 1394, 19:25 عصر
سلام من میخوام موقع ثبت کاربر جدید بر اساس کد ملی چک کنه اگه کاربر قبلا تو سایت بوده پیغام خطا بده
من اومدم در dataset یک کوئری جدید با این دستور ساختم


SELECT COUNT(*) FROM Sabt WHERE (codemelli=@codemelli)

بعد اومدم قبل دستور ثبت کاربر این دستور رو گذاشتم ولی همش پیغام خطا رو چاپ میکنه


DataSet1TableAdapters.SabtTableAdapter check = new DataSet1TableAdapters.SabtTableAdapter();
int tedad;
tedad = (int)check.CheckKarbar(codemelitxt.Text);
if (tedad == 1)
{
DataSet1TableAdapters.SabtTableAdapter bimar = new DataSet1TableAdapters.SabtTableAdapter();
bimar.SabtBimar(nametxt.Text, agetxt.Text, shomarebimetxt.Text, tavalodtxt.Text, nobimaritxt.Text, codemelitxt.Text, Convert.ToInt32(mydate), nobimecomobox.Text);
label4.Text = "مشخصات بیمار با موفقیت ثبت شد";
}
else
MessageBox.Show("مشخصات این بیمار قبلا در سیستم ثبت شده است.");

محمد رضا فاتحی
شنبه 03 مرداد 1394, 19:36 عصر
چون قبل از ثبت بررسی می کنید معلومه خطا میده چون توی ددیتابیس ثبت نشده باید tedad برابر صفر باشه تا ثبت انجام بشه

abdullah20
شنبه 03 مرداد 1394, 20:11 عصر
کد ملی را کلید اصلی کنید و راحت و حرفه ای با مدیریت خطا چک کنید و دیگه لازم نیست اول چک کنید بیمار موجوده یا نه

jaboli
شنبه 03 مرداد 1394, 22:17 عصر
چون قبل از ثبت بررسی می کنید معلومه خطا میده چون توی ددیتابیس ثبت نشده باید tedad برابر صفر باشه تا ثبت انجام بشه
بله مشکل همین بود
حالا من اگه بخوام با دوتا فیلد شرط رو انجام بدم چی؟!
یعنی هم مثلا کد ملی رو چک کنه و هم شماره بیمه رو و اگه جفتش باهم تکراری نبود اونوقت خیره کنه
تو شرط کوئری چی اضافه کنم؟

محمد رضا فاتحی
یک شنبه 04 مرداد 1394, 07:36 صبح
ببین این کوئری کارت رو راه میندازه
SELECT COUNT(*) FROM Sabt WHERE (codemelli=@codemelli OR codebimar=@code)

zayens
یک شنبه 04 مرداد 1394, 13:18 عصر
ببین این کوئری کارت رو راه میندازه
SELECT COUNT(*) FROM Sabt WHERE (codemelli=@codemelli OR codebimar=@code)

گفته جفتش با هم تکراری نباشه
پس بجای OR باید AND گذاشته بشه

ولی این جور کارا در اصل اصولی نیست کاری که
abdullah20 (http://barnamenevis.org/member.php?190756-abdullah20)
گفته انجام بدید

محمد رضا فاتحی
یک شنبه 04 مرداد 1394, 13:22 عصر
در مورد غیر اصولی بودنش بحثی نیست...اما منظور رو بد متوجه شدید... اگه and بزارید میگه تعداد ردیف هایی رو برگردونه که هم کد ملیش برابر یه عددی باشه و هم کد بیمار در صورتی که ممکنه این اتفاق نیوفته...
یه کد بیمار برای یه بیمار دیگه ثبت شده باشه و کد ملی برای یه بیمار دیگه...
هم باید کد ملی جستجو بشه هم کد بیمار... با and جواب نمیگیرید دوست عزیز

zayens
یک شنبه 04 مرداد 1394, 14:51 عصر
در مورد غیر اصولی بودنش بحثی نیست...اما منظور رو بد متوجه شدید... اگه and بزارید میگه تعداد ردیف هایی رو برگردونه که هم کد ملیش برابر یه عددی باشه و هم کد بیمار در صورتی که ممکنه این اتفاق نیوفته...
یه کد بیمار برای یه بیمار دیگه ثبت شده باشه و کد ملی برای یه بیمار دیگه...
هم باید کد ملی جستجو بشه هم کد بیمار... با and جواب نمیگیرید دوست عزیز

ببین دوست عزیز این درخواست مطرح شده ایشونه



حالا من اگه بخوام با دوتا فیلد شرط رو انجام بدم چی؟!
یعنی هم مثلا کد ملی رو چک کنه و هم شماره بیمه روو اگه جفتش باهم تکراری نبود اونوقت ذخیره کنه


پس باید AND گذاشت

علت دوم :
یک نفر با یک کد ملی میتونه چند کد بیمار داشته باشه بدلیل اینکه اون شخص میتونه در بخشهای مختلف پرونده های مختلف داشته باشه
مثلا اینکه یک نفر با یک کد ملی معمولا یک کد بیمار در دندانپزشکی و یک کد بیمار دیگر در بخش مثلا چشم پزشکی داره
لذا در صورت استفاده از OR در صورتیکه آن شخص در بخش اول(دندانپزشکی) ثبت نام کرده باشه امکان ثبت نام در بخشهای دیگه رو نداره!

محمد رضا فاتحی
یک شنبه 04 مرداد 1394, 15:40 عصر
لذا در صورت استفاده از OR در صورتیکه آن شخص در بخش اول(دندانپزشکی) ثبت نام کرده باشه امکان ثبت نام در بخشهای دیگه رو نداره!

خوب شما فرض کن:
بیمار 1 : کد 10 کد ملی 1111111111
بیمار 2 : کد 11 کد ملی 2222222222

حالا می خوایم تو یه بخش این اطلاعات ثبت بشه
بیمار 3 : کد 10 کد ملی 2222222222
این باید خطا بده یانه؟؟؟؟؟؟؟
با And شما می تونی کوئری بگیری؟؟؟؟!!!!!!!!!!!!!!

zayens
یک شنبه 04 مرداد 1394, 16:00 عصر
خوب شما فرض کن:
بیمار 1 : کد 10 کد ملی 1111111111
بیمار 2 : کد 11 کد ملی 2222222222

حالا می خوایم تو یه بخش این اطلاعات ثبت بشه
بیمار 3 : کد 10 کد ملی 2222222222
این باید خطا بده یانه؟؟؟؟؟؟؟
با And شما می تونی کوئری بگیری؟؟؟؟!!!!!!!!!!!!!!

ببینید نظر من و شما توی جواب که دخیل نباید باشه!
ما باید دقیقا به اونچه که پرسشگر سوال میکنه جواب بدیم و راهنماییش کنیم
که توی پست قبلی با پر رنگ کردن حرفای jaboli (http://barnamenevis.org/member.php?294337-jaboli) فرضیات ایشون را مشخص کردم و واضح جواب دادم


بیمار 3 : کد 10 کد ملی 2222222222
این باید خطا بده یانه؟؟؟؟؟؟؟


پس بسته به سیاست سوال کننده خیر نباید خطا بده ولی با فرضیات و نظر شما چرا باید OR گذاشت و حتی 4 تا چیز بهتر هم میشه گذاشت!

محمد رضا فاتحی
یک شنبه 04 مرداد 1394, 16:03 عصر
این طور که معلومه باید منتظر نظر استارتر موند!!:لبخند::لبخند::لبخند: