PDA

View Full Version : سوال: کار با فیلد AutoNumber در اکسس



gohari244
چهارشنبه 06 بهمن 1389, 22:49 عصر
سلام دوستان
لطفاً یک کمک فوری برسانید
من دارم یه برنامه می نویسم توسط vb که از بانک اطلاعاتی اکسس استفاده کردم فیلد ردیف بر اساس autonumber قرار دادم اما وقتی رکوردی حذف میشه اکسس شماره ها رو تغییر نمیده یعنی حتی اگر همه رکوردها رو حذف کنم باز هم از همون شماره آخر شروع می کنه می خواستم بدونم راهی هست که مجددا رکورد ها رو از شماره 1 شماره گذاری کنه
با تشکر

ali190
پنج شنبه 07 بهمن 1389, 08:48 صبح
سلام
ديتابيست رو compact&repair كن
دكمه اش در خود اكسس موجوده ، فقط روش كليك كن
ياعلي

RESMAILY
پنج شنبه 07 بهمن 1389, 09:16 صبح
به نام خدا
با سلام هربار از كدهاي زير استفاده كنيد. اگر فيلد مزبور index تعريف شده بايد ابتدا آن را از حالت index خارج نموده و بعد از اجراي كد دوباره آن را تعريف كنيد. با كد البته.

DoCmd.SetWarnings False
DoCmd.RunSQL "ALTER TABLE MyTable DROP column id"
DoCmd.RunSQL "ALTER TABLE MyTable ADD column id autoincrement"
DoCmd.SetWarnings True

كه طبعا MyTable و id نام جدول و فيلد مربوطه هستند
برا يايندكس هم اين دوتابع يا شبيه به آن به درد مي خورد


Public Function CREAT_IDX(strTable As String, strField As String, Optional spwd As String, Optional strPath As String) As Boolean
If strPath = "" Then strPath = CurrentDb.Name
strFrom = strPath
Set dbx = OpenDatabase(strFrom, True, False, "; pwd=spwd")
Set tbl = dbx.TableDefs(strTable)
Set fld = tbl.Fields(strField)
Set idx = tbl.CreateIndex(strField & "idx")
Set fldx = idx.CreateField(strField)
idx.Fields.Append fldx
tbl.Indexes.Append idx
Set tbl = Nothing
Set dbx = Nothing
End Function

Public Function DEL_IDX(strTable As String, strField As String, Optional spwd As String, Optional strPath As String) As Boolean
If strPath = "" Then strPath = CurrentDb.Name
strFrom = strPath
Set dbx = OpenDatabase(strFrom, True, False, "; pwd=spwd")
Set tbl = dbx.TableDefs(strTable)
Set fld = tbl.Fields(strField)
Set idx = tbl.Indexes(strField & "idx")
Set fldx = idx.Fields(strField)
tbl.Indexes.Delete strField & "idx"
Set tbl = Nothing
Set dbx = Nothing
End Function

gohari244
پنج شنبه 07 بهمن 1389, 09:49 صبح
سلام
ديتابيست رو compact&repair كن
دكمه اش در خود اكسس موجوده ، فقط روش كليك كن
ياعلي

دوست عزیز ممنون ولی این کار به درد من نمی خوره چون من می خوام که از داخل ویژوال بیسیک این کار صورت بگیره
باز هم ممنون

gohari244
پنج شنبه 07 بهمن 1389, 09:51 صبح
به نام خدا
با سلام هربار از كدهاي زير استفاده كنيد. اگر فيلد مزبور index تعريف شده بايد ابتدا آن را از حالت index خارج نموده و بعد از اجراي كد دوباره آن را تعريف كنيد. با كد البته.

DoCmd.SetWarnings False
DoCmd.RunSQL "ALTER TABLE MyTable DROP column id"
DoCmd.RunSQL "ALTER TABLE MyTable ADD column id autoincrement"
DoCmd.SetWarnings True

كه طبعا MyTable و id نام جدول و فيلد مربوطه هستند
برا يايندكس هم اين دوتابع يا شبيه به آن به درد مي خورد


Public Function CREAT_IDX(strTable As String, strField As String, Optional spwd As String, Optional strPath As String) As Boolean
If strPath = "" Then strPath = CurrentDb.Name
strFrom = strPath
Set dbx = OpenDatabase(strFrom, True, False, "; pwd=spwd")
Set tbl = dbx.TableDefs(strTable)
Set fld = tbl.Fields(strField)
Set idx = tbl.CreateIndex(strField & "idx")
Set fldx = idx.CreateField(strField)
idx.Fields.Append fldx
tbl.Indexes.Append idx
Set tbl = Nothing
Set dbx = Nothing
End Function

Public Function DEL_IDX(strTable As String, strField As String, Optional spwd As String, Optional strPath As String) As Boolean
If strPath = "" Then strPath = CurrentDb.Name
strFrom = strPath
Set dbx = OpenDatabase(strFrom, True, False, "; pwd=spwd")
Set tbl = dbx.TableDefs(strTable)
Set fld = tbl.Fields(strField)
Set idx = tbl.Indexes(strField & "idx")
Set fldx = idx.Fields(strField)
tbl.Indexes.Delete strField & "idx"
Set tbl = Nothing
Set dbx = Nothing
End Function

متشکرم دوست عزیز
ولی من چیزی از اینا متوجه نمی شم
اگه می شه یه کم راحت تر توضیح بدید

RESMAILY
جمعه 08 بهمن 1389, 13:31 عصر
به نام خدا
با سلام. براي نتيجه اي كه شما مي خواهيد يكي از راه ها حذف و باز سازي فيلد اتونامبر است. (خودتان روي يك جدول بصورت دستي امتحان كنيد)
شما هر بار پس از فرمان حذف با دستوري كه در ابتدا نوشته شده فيلد اتونامبررا از جدول مربوطه حذف و مجددا ايجاد مي نماييد. به اين ترتيب شماره ها براساس تعداد جديد ركوردها بازسازي مي شوند. در موارديكه فيلد اتونامبر بصورت ايندكس تعريف شده باشند دستور مزبور اجرا نمي شود. پس اگر فيلدتان ايندكس شده است ابتدا با تابعي كه كد آن را گذاشته امDEL_IDX آن را از حالت ايندكس خارج كنيد. پس از اجراي كد و بازتوليد فيلد اتونامبرتان مجددا با تابع بعدي CREAT_IDXايندكس را برقرار نماييد.