PDA

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



hadi vafaii
شنبه 21 شهریور 1394, 21:09 عصر
سلام دوستان عزیز و گرامی
من یه برنامه دارم می نویسم و یه کمکی میخواستم از دوستان اگه امکانش هست راهنمایی کنین
تو این برنامه یه فیلد هست که شماره پرونده توش ثبت میشه که این شماره پرونده نباید تکراری باشه میدونم اگه کلید اصلی قرار بدم تکراری نمیشه اما مشکل من اینه که این شماره از الحاق تاریخ مراجعه و یک عدد از یک الی آخر هست و تاریخ رو میتونم بیارم اما اینکه شماره رو از یک تا هرچندتا رو چجوری چک کنه که تا این شماره تکراری نباشه رو نمی دونم چیکار کنم دیتابیس هم اکسس هست
پیشاپیش از کمکاتون تشکر میکنم

mmbguide
شنبه 21 شهریور 1394, 22:33 عصر
سلام

اگر جداسازی این دو بخش از شماره پرونده در حین بررسی برات دشواره پیشنهاد میکنم یک فیلد تاریخ و یک فیلد عدد بسازید و در زمان نمایش و گزارش گیری براحتی میتونید مقدار این دو فیلد رو کنار هم بگذارید. و جستجوی این عدد جهت تکراری بودن راحت انجام میشه. کار دوم اینه که یک فیلد محاسباتی اضافه کنید که بصورت خودکار مقدار تاریخ و عدد رو با هر کاراکتر اضافه ای که بخواهید براتون پُر میکنه یا خودتون با کد نویسی مقدار این فیلد را هم پُر کنید

nunegandom
شنبه 21 شهریور 1394, 23:56 عصر
در ضمن فیلد هایی که قراره مدام بررسی شوند رو Index براشون بذار تا سرعت فوقالعاده بره بالا

hadi vafaii
یک شنبه 22 شهریور 1394, 00:07 صبح
سلام

اگر جداسازی این دو بخش از شماره پرونده در حین بررسی برات دشواره پیشنهاد میکنم یک فیلد تاریخ و یک فیلد عدد بسازید و در زمان نمایش و گزارش گیری براحتی میتونید مقدار این دو فیلد رو کنار هم بگذارید. و جستجوی این عدد جهت تکراری بودن راحت انجام میشه. کار دوم اینه که یک فیلد محاسباتی اضافه کنید که بصورت خودکار مقدار تاریخ و عدد رو با هر کاراکتر اضافه ای که بخواهید براتون پُر میکنه یا خودتون با کد نویسی مقدار این فیلد را هم پُر کنید
شرمنده احتمالا منظورمو درست بیان نکردم ببینین یک تکست باکس دارم که توش باید یه شماره پرونده که این شماره پرونده از دو رشته که یکی تاریخ مراجعه و دومی عددی از یک تا بینهایته تشکیل شده و نباید این شماره پرونده تکراری باشه تاریخ رو که میتونم بدست بیارم اما کدی که یک عدد بصورت ترتیبی بهم بده رو نمیتونم ایجاد کنم در واقع عددی که بجز تاریخ مراجعه بهم داره میده ردیف مراجعه کننده هستش در ضمن این تکست باکس بصورت اتومات پر میشه یعنی تاریخ سیستم و عدد ایجاد شده رو میگیره و بهم میچسبونه و یک عدد ایجاد میکنه
مثلا یک عدد به شکل زیر بهم بده
13940624123
که عدد 13940624 تاریخ مراجعه هست و123 یعنی نفر 123 بوده که تو اون تاریخ مراجعه کرده

nunegandom
یک شنبه 22 شهریور 1394, 01:06 صبح
چیزی ک به ذهن من میخوره اینه که یه فیلدی ی جا داشته باشی مثلا یک جدول تک فیلد که یک رکورد داشته باشه و اون تغییر کنه با ازای هرکس که ثبت نام میکنه!
بعدشم هر وقت خواستی صفرش کن!

hadi vafaii
یک شنبه 22 شهریور 1394, 01:30 صبح
من یه راه دیگه به ذهنم رسیده اما باز مشکل دارم اونم اینه که میخوام بزرگترین عدد موجود تو بانک رو بدست بیارم و هشت کارکتر توش پیش برم و از کارکتر 8 به بعد هر عددی که موند رو یهش یک واحد اضافه کنم و اون عدد حاصل رو با تاریخ امروز جمع کنم اما اینکه چجوری بزرگترین عدد رو بدست بیارم توش موندم سرچ هم کردم اما چیزی عاید نشد

nunegandom
یک شنبه 22 شهریور 1394, 03:10 صبح
تا اونجا که من میدونم این کار هزینه بره از لحاظ SQL حالا خود دانید
اگه این کارو هم کردید روش یه index بذارین

nunegandom
یک شنبه 22 شهریور 1394, 03:11 صبح
درواقع شما با این کارتون میگید sql تمام رکورد ها رو بگرده و با هم مقایسه کنه
ماله من میگه رکورد رو تغییر بده همین :)

mmbguide
یک شنبه 22 شهریور 1394, 09:50 صبح
شما فرمودید:


تکست باکس بصورت اتومات پر میشه یعنی تاریخ سیستم و عدد ایجاد شده

خب این عدد چطور ایجاد میشه؟ یعنی چطور میفهمه که باید عدد 123 رو نشون بده؟ شما گفتید فیلد شماره پرونده (تاریخ و عدد ترتیبی) با هم هستند

hadi vafaii
یک شنبه 22 شهریور 1394, 11:00 صبح
این عدد باید اینجوری ایجاد شه که سیستم بیاد و دیتابیس رو سرچ کنه و ببینه مراجعه کننده ای که امروز اومده نفر 123 هست یا 124 یا هر چندم که اونو بیاره با تاریخ همون روز تلفیق کنه و تاریخ و ردیف طرف مساوی بشه با مثلا 13940622123

mmbguide
یک شنبه 22 شهریور 1394, 20:06 عصر
پیشنهاد من اینه که بهتره شما از دوتا فیلد استفاده کنید که یکی عدد ترتیبی مورد نظر شماست و دیگری هم عدد تاریخ مورد نظر. حالا قبل از اینکه شماره پرونده رو ثبت کنید و بدونید که بزرگترین شماره مربوط به تاریخ مذکرو چند است بهترین راه اینه که از دستورMax که شرطش تاریخ مورد نظر است بزرگترین عدد رو پیدا کنید.

Select Max(ID) As Expr1 WHERE Date = @txtDate

حالا اگه عددی پیدا نکنه مقدار null رو برمیگردونه و شما میتونید با بررسی مقدار برگشتی مقدار مورد نظر را وارد کنید.