ورود

View Full Version : ریست کردن فیلد AutoNumber یا همون ردیف



7th man
چهارشنبه 02 مرداد 1392, 14:19 عصر
سلام
فیلد ردیف که عدد هاش اتومات هست بر اثر پاک کردن بعضی رکورد ها اینجوری شده
1
2
6
9
.
.
.
چطور ریستش کنم؟

master13111
چهارشنبه 02 مرداد 1392, 15:35 عصر
نمیدونم منظورتون اینه که شماره ی مربوط به رکورد بعد عدد 3 باشه و به همین ترتیب جاهای خالی پر بشن و یا منظورتون اینه که همین شماره های رکوردهای موجود از 1 مجددن مرتب بشن اما در هر صورت بصورت اتونامبر امکان نداره.
اما میتونید فیلد رو به صورت نامبر دربیارید و با دستور Update شماره ها رو اصلاح کنید. اما دقت کنید که دیگه فیلدتون اتونامبر نمیشه.
البته اگه بگین چرا میخاین همچین کاری کنید شاید بزرگواران یه راه دیگه بهتون پیشنهاد بدن

Abbas Amiri
چهارشنبه 02 مرداد 1392, 19:12 عصر
سلام
فیلد ردیف که عدد هاش اتومات هست بر اثر پاک کردن بعضی رکورد ها اینجوری شده
1
2
6
9
.
.
.
چطور ریستش کنم؟

اگه فیلد اتونامبر رو در جدول حذف و آن را ذخیره کنید و بعد مجدد اضافه کنید و جدول رو باز کنید از یک تا n شماره گذاری میشه .

به تاپیک صفر كردن autonumber (http://barnamenevis.org/showthread.php?402706-%D8%B5%D9%81%D8%B1-%D9%83%D8%B1%D8%AF%D9%86-autonumber) مراجعه کنید

alirezabahrami
چهارشنبه 02 مرداد 1392, 21:58 عصر
سلام
فیلد ردیف که عدد هاش اتومات هست بر اثر پاک کردن بعضی رکورد ها اینجوری شده
1
2
6
9
.
.
.
چطور ریستش کنم؟
سلام
اگر هم نمیخواهید فیلد اتونامبر را از عدد صفر شروع کنید و ردیف های حذف شده بصورت مرتب سورت شود از کد زیر در رویداد کلیک یک کمند باتن استفاده کن!
یا علی


DoCmd.SetWarnings False
DoCmd.RunSQL "ALTER TABLE table1 DROP column ID"
DoCmd.RunSQL "ALTER TABLE table1 ADD column ID autoincrement"
DoCmd.SetWarnings True


در این کد فرض شده نام جدول شما table1 و نام فیلد اتونامبر id باشد.
توجه داشته باشید اگر از فیلد اتونامبر بعنوان پرایمری کی(primary key) استفاده شود با خطای اندیس مواجه میشوید .بنابراین اگر از فیلد اتونامبر صرفاً بعنوان ردیف استفاده می کنید و میخواهید ردیف های حذف شده بصورت مرتب سورت شود از کد فوق استفاده نمائید و فیلد اتونامبر را در حالت primary key قرار ندهید.

Abbas Amiri
پنج شنبه 03 مرداد 1392, 23:24 عصر
سلام

چند تا سئوال از شما دو استاد گرامی آقایان بهرامی و امیری دارم لطفا در صورت امکان پاسخ بفرمایید :

( ترجیحاً استاد بهرامی پاسخگو باشند چرا که ایشون کد درج کردند و آقای امیری لینک ، ولی در مجموع فرقی نمیکنه )

نوع داده AutoNumber چی هست ؟

کی و چرا به کار میره ؟

و اصولا مزیت و ایرادش در چه چیزی هست ؟

اگر این فیلد در یک Relation به کار برده شده باشه تکلیف چیه ؟

:.:.:.:.

جواب این سئوالها رو اگر لطف کردید و درج فرمودید ، اونوقت نگاهی به پاسخی که در خصوص ریست کردن Autonumber دادید داشته باشید ؟ ( مسئولیت پاسخ و یا لینک رو خود شما دوستان بپذیرید )



DoCmd.SetWarnings False
DoCmd.RunSQL "ALTER TABLE table1 DROP column ID"
DoCmd.RunSQL "ALTER TABLE table1 ADD column ID autoincrement"
DoCmd.SetWarnings True

نتیجه رو اعلام بفرمایید

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

موفق باشید


سلام

از حضور مجدد شما و همچنین تذکر به حای شما خوشحال هستم .

متاسفانه همانطور که متذکر شدید بعضی دوستان به فلسفه این نوع فیلدها اشرافی ندارند و استفاده بی مورد

از آن میکنند ، که احتمالا شایعترین آن بعنوان شماره ردیف می باشد .

در تاپیک رسیت شدن Autonumber در سال جدید (http://barnamenevis.org/showthread.php?405750-%D8%B1%D8%B3%DB%8C%D8%AA-%D8%B4%D8%AF%D9%86-Autonumber-%D8%AF%D8%B1-%D8%B3%D8%A7%D9%84-%D8%AC%D8%AF%DB%8C%D8%AF) اینجانب گوشزد کرده ام ولی حکایت همچنان باقیست .

Abbas Amiri
جمعه 04 مرداد 1392, 18:17 عصر
سلام

استفاده از بحث های شما مورد اقبال بسیاری از دوستان و کاربران فروم اکسس است .

امیدوارم حضور شما تداوم داشته باشد و در بحث های تخصصی از نظرات کارشناسی شما بیشتر بهره مند شویم .

در خصوص موضوع جامعیت داده ها گرچه بنا بر تعریف "جامعیت داده‌ها به معنی صحت، دقت و سازگاری داده‌های ذخیره شده در پایگاه داده‌ها در تمام لحظات است." ولی یکی از موارد آن ، بحث Entity integrity است که به مواردی مثل

Primary key, Foriegn key و انواع قیود می پردازد و دوست خوبمان جناب بهرامی که در موضوع اکسس تبحر خاصی دارند بدلیل ارتباط موضوع تاپیک با آن ، فقط به این قسمت اشاره داشتند .

با اینحال به عنوان دانش آموز خواهشمندم از انصراف خود ، انصراف دهید و بحث را باز کرده و موارد لازم را مرقوم نمایید .

با تشکر

Abbas Amiri
شنبه 05 مرداد 1392, 18:47 عصر
سلام

لینک زیر مربوط به ریست کردن فیلد اتونامبر و برخی ملاحظات آن:
http://support.microsoft.com/kb/812718

saeed1234n
شنبه 05 مرداد 1392, 21:37 عصر
ریست کردن فیلد Auto namber
با سلام
ضمن تسلیت ایام سوگواری :ناراحت:

جناب استاد امیری من فکر می کنم برای ما آماتورها مطلب بیان شده توسط استاد بهرامی در پست 4 خیلی راحتر ، سریعتر و ملموس تر است از مطلب عنوان شده در پست 9 .

Abbas Amiri
شنبه 05 مرداد 1392, 21:53 عصر
با سلام
ضمن تسلیت ایام سوگواری :ناراحت:

جناب استاد امیری من فکر می کنم برای ما آماتورها مطلب بیان شده توسط استاد بهرامی در پست 4 خیلی راحتر ، سریعتر و ملموس تر است از مطلب عنوان شده در پست 9 .

زمانی که شما فیلد اتونامبر ایجاد می کنید بسته به اینکه چه نامی برای آن انتخاب می کنید (بعضی نامها بصورت اتوماتیک ایندکس می شوند مثل ID,code) ویا پرایمری کی شوند، بصورت اتوماتیک خصوصیت ایندکس آنها ست میشود .

در اینحالت اگر شما اقدام به درج دستور DROP COLUMN برای آن فیلد کنید ، باعث بروز خطا می شود . بنابراین شما بایستی ابتدا یا با کد نویسی و یا دستی اقدام به حذف قیود مربوطه نمایید .

nazanin_90
شنبه 05 مرداد 1392, 23:21 عصر
سلام
اگر هم نمیخواهید فیلد اتونامبر را از عدد صفر شروع کنید و ردیف های حذف شده بصورت مرتب سورت شود از کد زیر در رویداد کلیک یک کمند باتن استفاده کن!
یا علی


DoCmd.SetWarnings False
DoCmd.RunSQL "ALTER TABLE table1 DROP column ID"
DoCmd.RunSQL "ALTER TABLE table1 ADD column ID autoincrement"
DoCmd.SetWarnings True


در این کد فرض شده نام جدول شما table1 و نام فیلد اتونامبر id باشد.
توجه داشته باشید اگر از فیلد اتونامبر بعنوان پرایمری کی(primary key) استفاده شود با خطای اندیس مواجه میشوید .بنابراین اگر از فیلد اتونامبر صرفاً بعنوان ردیف استفاده می کنید و میخواهید ردیف های حذف شده بصورت مرتب سورت شود از کد فوق استفاده نمائید و فیلد اتونامبر را در حالت primary key قرار ندهید.
سلام
اگر با تمام این توضیحات فلیلد اتونامبر در حالت primary key انتخاب شده باشد و در جدول از این فیلد فقط برای ردیف استفاده شود آیا با کد نویسی میتوان این فیلد را از حالت primary key خارج نمود تا برای ریست شدن آن با خطای اندیس مواجه نشویم؟
با تشکر

Abbas Amiri
یک شنبه 06 مرداد 1392, 00:09 صبح
اگر با تمام این توضیحات فلیلد اتونامبر در حالت primary key انتخاب شده باشد و در جدول از این فیلد فقط برای ردیف استفاده شود آیا با کد نویسی میتوان این فیلد را از حالت primary key خارج نمود تا برای ریست شدن آن با خطای اندیس مواجه نشویم؟زمانی که شما فیلدی را PK قرار میدهید همزمان ایندکس آنرا هم اضافه می کنید . پس باید هم Primary key و هم ایندکس مربوط به فیلدرا پاک کنید .
بصورت دیفالت نام ایندکس همان نام فیلد است مگر انکه آنها را با کدنویسی ایجاد کرده باشید و اسامی دیگری به آن داده باشید.
روال زیر نام جدول و لیست ایندکسهایی که باید حذف شوند را میگیرد و آنها را حذف می کند.



Public Sub DeleteIndexes(TableName As String, ParamArray IndexNames())
Dim tdf As TableDef, db As Database
Dim idx As Index, i As Integer
Dim num_indexes As Long
Set db = CurrentDb()
On Error GoTo ErrorHandler
Set tdf = db.TableDefs(TableName)
num_indexes = tdf.Indexes.Count
If num_indexes > 0 Then
For Each idx In tdf.Indexes
For i = 0 To UBound(IndexNames)
If idx.Name = IndexNames(i) Then db.Execute "DROP INDEX " & idx.Name & " ON " & TableName
Next
Next idx
End If
Exit Sub
ErrorHandler:
Debug.Print Err.Number & "-> " & Err.Description

End Sub


مثال زیر ایندکس فیلد ID و PrimaryKey آن را از جدول Table2 حذف می کند.


DeleteIndexes "Table2","ID","PrimaryKey"