# Native Code > برنامه نویسی در 6 VB > مطالب مرتبط با بانکهای اطلاعاتی در VB6 > سوال: سوالي در مورد Auto Number در پايگاه داده اكسس؟

## alifatehi

سلام

پايگاه دادهاي دارم كه اتو نامبر جدول آن از 1 شروع نميشه.

پايگاه داده اي در محيط اكسس طراحي كردم بعد مقاديري را داخل جداول قرار دادم براي تست پايگاه داده حالا كه تست تمام شده  و اطلاعات داخل فيلدها رو پاك كردم تمام ركورد ها

حالا كه مي خوام اطلاعات جديدي رو وارد كنم از Auto Number از انتهاي آن ركوردي كه گفتم پاك كردم شروع و از يك شروع نمي شود مشكل كجاست.

مثال : آخرين شماره كه قبل داشته عدد 7 است و بعد از پاك كردن تمام اطلاعات جداول . با وارد كردن اطلاعات جديد به جاي عدد 1 عدد 8 رو نشان مي دهد.
باتشكر

----------


## xxxxx_xxxxx

نوع فیلدو عوض کنید جدول رو save کنید . بعد دوباره نوع فیلدرو به Auto Number تغییر دهید

----------


## majjjj

وقتی یک فیلد با data type خودکار رو تغییر بدین این مشکل براتون پیش میاد بنابراین اگه میخواهی رکورد هاتون قابلیت حذف داشته باشن از این نمونه فیلد استفاده نکنید

----------


## maryamb

می تونید اون فیلد رو پاک کنید و از نو بسازید تا دوباره از یک شروع بشه.
ولی به قول دوستمون راه بهتر اینه که دستی و از داخل برنامه هر بار یکی به فیلدتون اضافه کنید و اونو از نوع اتو نامبر در نظر نگیرید

----------


## alifatehi

> نوع فیلدو عوض کنید جدول رو save کنید . بعد دوباره نوع فیلدرو به Auto Number تغییر دهید



پيغام خطا مي ده چون RelationShips ايراد مي گيره.

----------


## alifatehi

> می تونید اون فیلد رو پاک کنید و از نو بسازید تا دوباره از یک شروع بشه.
> ولی به قول دوستمون راه بهتر اینه که دستی و از داخل برنامه هر بار یکی به فیلدتون اضافه کنید و اونو از نوع اتو نامبر در نظر نگیرید



دوست عزيز پروژه هاي زيادي ديدم كه از اتونامبر استفاده مي كردند و مشكلي هم نداشتند هم خوب ويرايش مي شدند و هم خوب آپديت پس مي بينيد را ه حلي دارد

----------


## alifatehi

اصلا يادم رفته بود مشكل رو با پشتيباني ماكروسافت در ميان بزارم اين راه حل را ماكروسافت پيشنهاد داده است.

پيشنهاد ماكروسافت

 
راه حل ديگه داخل همين انجمن است.

كه توسط اقاي مهدي قرباني ارائه شده است.

لينك تاپيك

----------


## arkia

یعنی میشه توی برنامه شماره اتوماتیک رو ریست کرد همچنان که بقیه فیلد ها سر جاشونن؟

----------


## vbhamed

سلام
به نظر من از فيلد AutoNumber براي شناسايي ركورد فقط استفاده كنيد نه استفاده به عنوان يك فيلد واقعي
در اينصورت مهم نيست از چند شروع بشه

----------


## babak_delphi

این احتمال وجود نداره که با زیاد شدن تعداد رکوردها این فیلد با مشکل مواجه بشه؟
طور دیگه مطرح می کنم : فیلد AutoNumber تا چند رکورد قابل افزایشه؟

----------


## xxxxx_xxxxx

> این احتمال وجود نداره که با زیاد شدن تعداد رکوردها این فیلد با مشکل مواجه بشه؟
> طور دیگه مطرح می کنم : فیلد AutoNumber تا چند رکورد قابل افزایشه؟


خير؛ فيلد AutoNumber از نوع Long Integer هست. (ماكزيمم يك عدد 10 رقمي)

----------


## mpmsoft

دوست عزيز فيلد Auto Number در صورتي که رکوردي در تيبل نباشد بعد از Compact کردن مجدد از 1 شروع مي شه

ولي فرض کنيد که يک تيبل داريد که مقدار آي دي اون از 30 شروع شده و حالا اون رکورد رو که آي ديش 30 هست رو به يک تيبل خالي که از  1 شروع مي شه انتقال بديد مجدد از 30 شروع مي شه

----------


## Ali0541

ببخشيد كه تاپيك قديمي رو فعال كردم منم يه همچين مشكلي دارم 
آيا دوستان راه حل تازه اي دارند؟
ممنون :لبخند گشاده!:  :لبخند گشاده!:  :لبخند گشاده!:

----------


## ali2449

با سلام خدمت دوستان عزيز
من فايلي را طراحي كرده و يكي از فيلد هاي آن را تو اتونامبر قراردادم ولي بعد از ثبت تعدادي از ركورد ها از اتو نامبر بصورت رديفي خارج ميشود مثلا وقتي در ركورد 80  با رديف و اتو نامبر 80 هستم و ميخواهم ركورد 81 رو وارد كنم اتو نامبرم 83 رو نشون ميده
ميخواستم اگه امكان داره دوستان در اين امر راهنماييم كنند كه چيكار كنم لازم به توضيح ميدونم كه بكم رديف رو حذف كردم و رديف جديدي را وارد كردم id  را حذف كردم و دوباره ايجاد كردم ركود جديد را در رديف يك نشون نداد و در آخرين ركورد نمايش داد

----------


## vbhamed

سلام
کار AutoNumber همینه که تضمین کنه Id تکراری ایجاد نشه حتی اگر Id حذف شده باشه
در مورد حذف فیلد Id هم بازم سیستم کارش رو درست انجام داده چون رکورد شما آخرین رکورد درج شده در جدول بوده

شما بهتره بگین هدفتون از انجام این کارها چیه تا برای اون بشه راهی ارائه کرد

----------


## میلاد علوی

چون دیدم کسی جواب دوستان رو بلد نبود تاپیک رو بالا آوردم 
راه حل اینکه Auto Number  رو ریست کنید اینه که از بقیه ستون هاتون در صورتی که بهشون نیاز دارید کپی بگیرید مثلا توی اکسل بعد همه داده های داخل تیبل رو حذف کنید از منوی آپشن اکسس گزینه Compact & Repair رو بزنید 
و تمام اوتونامبر شما ریست شده  :چشمک:

----------


## vbhamed

سلام
با حذف فیلد از جدول و ایجاد مجدد اون هم می‌تونید اینکار رو انجام بدید

----------


## Kybord

سلام
ببخشید برای بنده مشکلی پیش اومده امیدوارم تجربه شماکمک حالم باشه <3
بنده در طول برنامه نویسی برای یک برنامه حسابداری به یک مشکل سخت گرفتار شده ام
در بانک اطلاعاتی " اکسس - acces " فیلد کلید را فیل " آیدی - ID "قرار دادم
بعد از اجرا برنامه و تست به این مشکل برخردم وقتی مثلا ده محصول با شناسه مختلف ثبت میکنم مثلا از شناسه شماره یک تا ده
وقتی شماره هشت را پاک کنم بر روی ذخیره کلیک کنم فیلد حذف میشود ولی در ثبت فیلد جدید شماره شناسه از شماره یازده شروع میشود

خیلی مشغولم کرده این کد

میخواستم بدونم راه حل بهتری هست ؟
یا کدی هست بتونم بنویسم برنامه بره تو اکسس و گزینه commpact & repair رو بزنه بعد هر حذف ؟؟

لطفا کمکم کنید واقعا دردسر ساز شده برام

j.behzadii@gmail.com

اگه ممکنه اینجا جواب بدید یا به ایمیلم پیام بدهید ممنون <3

----------


## vbhamed

> سلام
> ببخشید برای بنده مشکلی پیش اومده امیدوارم تجربه شماکمک حالم باشه <3
> بنده در طول برنامه نویسی برای یک برنامه حسابداری به یک مشکل سخت گرفتار شده ام
> در بانک اطلاعاتی " اکسس - acces " فیلد کلید را فیل " آیدی - ID "قرار دادم
> بعد از اجرا برنامه و تست به این مشکل برخردم وقتی مثلا ده محصول با شناسه مختلف ثبت میکنم مثلا از شناسه شماره یک تا ده
> وقتی شماره هشت را پاک کنم بر روی ذخیره کلیک کنم فیلد حذف میشود ولی در ثبت فیلد جدید شماره شناسه از شماره یازده شروع میشود
> 
> خیلی مشغولم کرده این کد
> 
> ...


سلام
خب این نشون میده شما مفهوم فیلد کلید رو کامل درک نکردید
اون داره دقیقا کار درست رو انجام میده، اینکار باعث میشه تضمین بشه هیچ موقع داده های تکراری به وجود نمیان
فرض کنید شما از فیلد کلید به عنوان شماره فاکتور استفاده کردید
به یک نفر فاکتور دادید، فاکتورش رو بعدا حذف کردید و به یک نفر دیگه فاکتور دادید طبق همون شماره کلید قبلی، حالا بعد از مدتی هر دو نفر مراجعه میکنن برای حسابرسی و هر دو میگن شماره فاکتور ما مثلا 100 هستش
اینجا تداخل پیش میاد و اصلا کلید نباید اونکارو انجام بده که شماره حذف شده رو دوباره به شما بده

اول اینکه شما از فیلد کلید فقط به عنوان کلید رکورد و ارتباط با جدول دیگه استفاده کنید نه فیلد اطلاعاتی مثل شماره فاکتور یا ...
اگر مثلا نیاز به فیلد شماره فاکتور دارید باید یک فیلد دیگه بزارید و برای اینکه هر بار بدونید چه شماره فاکتوری استفاده کنید میتونید با تابع Max بیشترین مقدار شماره فاکتور داخل جدول رو بگیرید و یکی بهش اضافه کنید

هر چند در این حالت هم اگر چند تا فاکتور آخر حذف بشن باز شماره تکراری پیش میاد ولی برای این هم باید فکری کنید مثلا آخرین شماره فاکتور رو در جایی دیگه ذخیره کنید که با حذف اون فاکتور هم شماره بمونه یعنی کاری که همون فیلد کلید انجام می‌داد، شاید بگین خب اینطوری که همون مشکل اولیه من ایجاد شد، بله درسته اما اون مشکل نیست، اون تضمینی برای ایجاد داده های غیر تکراری است و اصلا هیچ لزومی هم نداره فاکتورها همیشه پشت سر هم باشه شماره هاشون، در صورت نیاز باید برای خودتون شماره ردیف تعیین کنید

----------


## hassan_ml75

دوست عزیز اگه میخوای از اتو نامبر به عنوان کلید استفاده بکنی از کد زیر استفاده بکن من خودم استفاده میکنم هیچ مشکلی ندارم باهاش.
 T1.Text = Adodc2.Recordset.RecordCount + Val(1)
این روشو من تو چند تا از برنامه هام استفاده کردم نتیجه گرفتم حتما به دردت میخوره. :قلب:

----------


## vbhamed

> دوست عزیز اگه میخوای از اتو نامبر به عنوان کلید استفاده بکنی از کد زیر استفاده بکن من خودم استفاده میکنم هیچ مشکلی ندارم باهاش.
>  T1.Text = Adodc2.Recordset.RecordCount + Val(1)
> این روشو من تو چند تا از برنامه هام استفاده کردم نتیجه گرفتم حتما به دردت میخوره.


با این روش اگر رکورهای قبلی پاک بشه رکورد تکراری ایجاد میشه اونم به مرور زیاد میشه

----------

