PDA

View Full Version : سورت مجدد رکوردهای جدول



mostafa_tak2000
سه شنبه 15 بهمن 1392, 10:51 صبح
باسلام به همه دوستان
من یک بانک از نوع access دارم که دارای یک فیلد از نوع integer هست و این فیلد فیلد کلید و همچنین بصورت اتوماتیک فیلد را مقدار دهی میکند یعنی خاصیت Identity specification آن فعال هست .
حال مشکل بنده این است که بعضی از رکوردهای حذف می شوند ولی این مقدار دهی بیشترین عدد را مقدار دهی میکند. برای مثال
مثلا اعداد داخل فیلد قبل زا حذف بصورت
1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-20 می باشد بعداز حذف بعضی رکوردهای محتویات فیلد بصورت زیر در میاید
1-2-4-5-6-7-9-10-13-14-15-16-18-19
حال اگر رکورد جدیدی تو بانک ثبت کنم مقدار آن 21 می شود
من میخوام کدی بنویسم که هر موقع کاربر اجرا کرد این فیلد کلید ID هست بصورت صعودی خود را مجددا از یک مقدار دهی کند تا رکورد آخر
با تشکر از دوستان

Majid.Stu66
سه شنبه 15 بهمن 1392, 13:49 عصر
با سلام
اگه مقصود شما اینه که از ID رکوردهای حذف شده دوباره استفاده کنید چیزی که به ذهن من می رسه اینه که برای جدول یک فیلد از نوع bit در نظر بگیرید که صفر بودنش به این معنا باشه که این رکورد حذف شده و یک بودنش به این معنا که رکورد حذف نشده . در ابتدا که جدول خالی از رکورد هستش در زمان درج رکورد این فیلد رو با یک مقدار دهی کنید برای رکوردها و در زمان حذف رکورد بجای اینکه از دستور Delete استفاده کنید از دستور Update استفاده کنید و مقدار این فیلد رو به صفر تغییر بدید و در زمان گزارش گیری رکوردهایی رو بازیابی کنید که این فیلد در آن ها مقدار یک رو داره و برای درج رکورد جدید ابتدا دستوری بنویسید که تمام رکوردهایی رو که این فیلد در آن ها مقدار صفر داره رو برگردونه اگه رکوردی برگشت داده شد از آی دی اولین رکورد به عنوان آی دی رکورد جدید استفاده کنید و اون رکورد رو با اطلاعات جدید Update کنید و اگر رکوردی برگشت داده نشد از دستور Insert برای درج رکورد استفاده کنید .
اگر این جدول با جداول دیگه ارتباط داشته باشه ، در زمان حذف باید اطلاعات جداول دیگه رو هم در نظر بگیرید.

اگرهم که میخواید شمارشگر رو reset کنید دنبال دستوری مشابه دستور SQL زیر باشید

DBCC CHECKIDENT (mytablename, RESEED, 0)

البته اگه جدول شامل رکورد باشه احتمالا با خطا مواجه شید
امیدوارم برداشتم از سوالتون درست بوده باشه :متفکر: