PDA

View Full Version : سوال: تغییر خصوصیت Indexed فیلد جدول از طریق کد نویسی



atf1379
شنبه 11 آذر 1402, 18:39 عصر
سلام
با چه کدی میتوان خصوصیت Indexed فیلدی از یک جدول تغییر داد(تصویر ضمیمه)
در ضمن فیلد مربوطه در حالت Primary Key نیست
ممنون

atf1379
شنبه 11 آذر 1402, 21:33 عصر
با کد زیر خصوصیت Required تغییر پیدا میکنه ولی اگه بجای Required کلمه indexed قرار بدهیم خطا صادر میشه


CurrentDb.TableDefs("NameTabel").Fields("NameField").Required = False

atf1379
یک شنبه 12 آذر 1402, 13:53 عصر
سه روزه برای حل این موضوع کلی در اینترنت جستجو کرده ا م ولی تا کنون به نتیجه نرسیده ا م

mazoolagh
یک شنبه 12 آذر 1402, 15:16 عصر
سلام و روز خوش

امتحان کنین و خبر بدین:

currentb.execute "DROP INDEX FieldName ON TableName

mazoolagh
یک شنبه 12 آذر 1402, 15:20 عصر
سه روزه برای حل این موضوع کلی در اینترنت جستجو کرده ا م ولی تا کنون به نتیجه نرسیده ا م

DROP statement (Microsoft Access SQL) (https://learn.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/drop-statement-microsoft-access-sql)

Sub DropX1()
Dim dbs As Database

' Modify this line to include the path to Northwind
' on your computer.
Set dbs = OpenDatabase("Northwind.mdb")

' Delete NewIndex from the Employees table.
dbs.Execute "DROP INDEX NewIndex ON Employees;"

dbs.Close

End Sub

atf1379
یک شنبه 12 آذر 1402, 19:22 عصر
امتحان کنین و خبر بدین:

currentb.execute "DROP INDEX FieldName ON TableName

سلام استاد!
عالی مثل همیشه:تشویق::تشویق::تشویق:
ممنونم

atf1379
دوشنبه 13 آذر 1402, 07:51 صبح
با سلام مجدد
به مورد عجیبی برخورد کردم
در فایل ضمیمه دو جدول وجود داره که در هرکدوم یک فیلد با نام و خصوصیات یکسان وجود داره ولی در فرم تغییر INDEX برای فیلد Table2صورت می گیره اما برای Table1 نه
البته ناگفته نمونه که جدول 1 رو از یک دیتابیس دیگه ایمپورت کرده ام

mazoolagh
دوشنبه 13 آذر 1402, 17:02 عصر
سلام دوباره و روز خوش

لینک مایکروسافت رو گذاشته بودم که بخونین!
در کد دوم که از همون آموزش خود مایکروسافت کپی گرفتم هم مشخص هست که باید اسم ایندکس رو در دستور DROP INDEX بیارین و نه اسم فیلد،
این دو تا الزاما با هم یکی نیستن : مثل زمانی که رابطه تعریف شده یا primary هست؛

برای همین هم پرسیدم خبر بدین.

شما اول باید اسم ایندکس رو بدونین.
از کد زیر میتونین اسم (و چند ویژگی دیگه) همه ایندکس های تعریف شده برای یک جدول رو پیدا کنین:
Sub ListAllIndexes(TableName As String)
Dim dbs As Database
Set dbs = CurrentDb
Dim ndx As Index
For Each ndx In dbs.TableDefs(TableName).Indexes
Debug.Print "FieldName=[" & ndx.Fields(0).Name & _
"] , IndexName=[" & ndx.Name & "]" & _
" , Foreign=" & ndx.Foreign & _
" , Primary=" & ndx.Primary & _
" , Required=" & ndx.Required & _
" , Unique=" & ndx.Unique & _
" , IgnoreNulls=" & ndx.IgnoreNulls & _
" , DistinctCount=" & ndx.DistinctCount
Next
Set dbs = Nothing
End Sub

به نتیجه کد برای جدول Orders از دیتابیس Northwind دقت کنین:

ListAllIndexes "Orders"

FieldName=[CustomerID] , IndexName=[CustomerID] , Foreign=False , Primary=False , Required=False , Unique=False , IgnoreNulls=False , DistinctCount=89
FieldName=[CustomerID] , IndexName=[CustomersOrders] , Foreign=True , Primary=False , Required=False , Unique=False , IgnoreNulls=False , DistinctCount=89
FieldName=[EmployeeID] , IndexName=[EmployeeID] , Foreign=False , Primary=False , Required=False , Unique=False , IgnoreNulls=False , DistinctCount=9
FieldName=[EmployeeID] , IndexName=[EmployeesOrders] , Foreign=True , Primary=False , Required=False , Unique=False , IgnoreNulls=False , DistinctCount=9
FieldName=[OrderDate] , IndexName=[OrderDate] , Foreign=False , Primary=False , Required=False , Unique=False , IgnoreNulls=False , DistinctCount=480
FieldName=[OrderID] , IndexName=[PrimaryKey] , Foreign=False , Primary=True , Required=True , Unique=True , IgnoreNulls=False , DistinctCount=830
FieldName=[ShippedDate] , IndexName=[ShippedDate] , Foreign=False , Primary=False , Required=False , Unique=False , IgnoreNulls=False , DistinctCount=388
FieldName=[ShipVia] , IndexName=[ShippersOrders] , Foreign=True , Primary=False , Required=False , Unique=False , IgnoreNulls=False , DistinctCount=3
FieldName=[ShipPostalCode] , IndexName=[ShipPostalCode] , Foreign=False , Primary=False , Required=False , Unique=False , IgnoreNulls=False , DistinctCount=85

همیجور که میبینین برای فیلدهایی مثل CustomerID و EmployeeID دو ایندکس داریم،
که دومی Foreign هست و اسمش رو از relation گرفته و نه فیلد.

اما در مورد جدول هایی که پیوست کردین:

ListAllIndexes "table1"
FieldName=[fcode] , IndexName=[FormalCode] , Foreign=False , Primary=False , Required=False , Unique=True , IgnoreNulls=False , DistinctCount=0


ListAllIndexes "table2"
FieldName=[fcode] , IndexName=[fcode] , Foreign=False , Primary=False , Required=False , Unique=True , IgnoreNulls=False , DistinctCount=0

که مشخص میکنه چرا کد شما برای table1 کار نمیکنه.

atf1379
دوشنبه 13 آذر 1402, 21:25 عصر
سلام
سپاسگزارم از راهنمائیتون استاد!
کاملاً متوجه شدم