PDA

View Full Version : حذف فیلد primary key



hamid-nice
سه شنبه 14 آبان 1392, 07:12 صبح
با سلام
یک جدول به نام Table1 دارم که فیلدی به نام ID داره که از نوع Autonumber هست میخوام این فیلد را به وسیله کدنویسی از جدول حذف کنم از دستور زیر استفاده می کنم ولی پیغام می ده که تا Index داره نمی شه
strSQL = "Alter Table Table1 drop Column ID "
CurrentDb.Execute strSQL

چه راهی برای حذف این فیلد هست ؟ ( آیا باتغییر در دستور فوق می شه) یا ...
باتشکر

mmbguide
سه شنبه 14 آبان 1392, 17:35 عصر
سلام

تا حالا با SQL فیلدی رو از جدول حذف نکردم اما شاید این فیلد با جدول دیگه ای Relation داشته باشه. البته نمیدونم که باعث بروز خطا میشه یا نه که اگه اینطور باشه ابتدا باید Relation رو حذف کنی بعد فیلد مورد نظر رو حذف کنی

Abbas Amiri
سه شنبه 14 آبان 1392, 17:36 عصر
با سلام
یک جدول به نام Table1 دارم که فیلدی به نام ID داره که از نوع Autonumber هست میخوام این فیلد را به وسیله کدنویسی از جدول حذف کنم از دستور زیر استفاده می کنم ولی پیغام می ده که تا Index داره نمی شه
strSQL = "Alter Table Table1 drop Column ID "
CurrentDb.Execute strSQL

چه راهی برای حذف این فیلد هست ؟ ( آیا باتغییر در دستور فوق می شه) یا ...
باتشکر

مطابق مثال زیر عمل کنید:
currentdb.TableDefs ("Table1").Indexes.Delete ("PrimaryKey")
currentdb.TableDefs ("Table1").Indexes.Delete ("ID")
currentdb.Execute "ALTER TABLE Table1 DROP COLUMN ID"

hamid-nice
سه شنبه 14 آبان 1392, 20:45 عصر
مطابق مثال زیر عمل کنید:
currentdb.TableDefs ("Table1").Indexes.Delete ("PrimaryKey")
currentdb.TableDefs ("Table1").Indexes.Delete ("ID")
currentdb.Execute "ALTER TABLE Table1 DROP COLUMN ID"


با سلام
متاسفانه پیغام خطای زیر را روی خط 1 میدهد :
Item not find in this collection
با تشکر

Abbas Amiri
سه شنبه 14 آبان 1392, 22:22 عصر
با سلام
متاسفانه پیغام خطای زیر را روی خط 1 میدهد :
Item not find in this collection
با تشکر
در ابتدای کد ها عبارت On Error Resume Next رو تایپ کنید

hamid-nice
سه شنبه 14 آبان 1392, 22:45 عصر
با سلام
1-درست شد اما معنی پیغامی که میداد چی هست؟
2-این وقتی درست عمل می کنه که دستی از محیط Design view جدول فیلد ID را به صورت autonumber و primary Key درآورده باشم ولی وقتی با کد زیر این کار را می کنم کد شما دیگه کار نمی کنه
strSQL = "Alter Table Table1 Add Column ID AutoIncrement"
CurrentDb.Execute strSQL
strSQL = "ALTER TABLE Table1 ADD PRIMARY KEY (ID)"
CurrentDb.Execute strSQL
آیا برای ساختن فیلد ID را به صورت autonumber و primary Key باید از کد دیگه ای استفاده کنم یا ... ؟
با تشکر

Abbas Amiri
سه شنبه 14 آبان 1392, 23:11 عصر
با سلام
1-درست شد اما معنی پیغامی که میداد چی هست؟
2-این وقتی درست عمل می کنه که دستی از محیط Design view جدول فیلد ID را به صورت autonumber و primary Key درآورده باشم ولی وقتی با کد زیر این کار را می کنم کد شما دیگه کار نمی کنه
strSQL = "Alter Table Table1 Add Column ID AutoIncrement"
CurrentDb.Execute strSQL
strSQL = "ALTER TABLE Table1 ADD PRIMARY KEY (ID)"
CurrentDb.Execute strSQL
آیا برای ساختن فیلد ID را به صورت autonumber و primary Key باید از کد دیگه ای استفاده کنم یا ... ؟
با تشکر

از روال DeletePkField استفاده کنید:

Sub DeletePkField(tdf As String, fld As String)
On Error Resume Next
Dim pkName As String
pkName = GetPKName(tdf, "Index")
CurrentDb.TableDefs(tdf).Indexes.Delete (pkName)
CurrentDb.TableDefs(tdf).Indexes.Delete (fld)
CurrentDb.Execute "ALTER TABLE " & tdf & " DROP COLUMN " & fld

End Sub

Function GetPKName(TableName As String, Optional FieldOrIndex As String = "Field") As String
Dim idx As DAO.Index, cnt As Integer
Dim db As DAO.Database, tdf As DAO.TableDef
Set db = CurrentDb
Set tdf = db.TableDefs(TableName)
GetPKName = "No Primary Key"
For cnt = 0 To tdf.Indexes.Count - 1
Set idx = tdf.Indexes(cnt)

If idx.Primary Then
If FieldOrIndex = "Field" Then
GetPKName = Mid(idx.Fields, 2)
Else
GetPKName = idx.Name
End If
Exit For
End If
Next cnt
Set db = Nothing
Set tdf = Nothing
Set idx = Nothing
End Function