اذهب الي المحتوي
أوفيسنا

استخراج المفتاح الأساسي لجدول


الردود الموصى بها

السلام عليكم

نستطيع من خلال الكود استخراج أسماء الجداول و العلاقات الموجود بينها و حتى حقول الربط

و أيضا نستطيع استخراج أسماء الحقول و نوعها و طولها.

السؤال: ما هي طريقة إستخراج المفتاح الأساسي لجدول.

  • Like 1
رابط هذا التعليق
شارك

For i = 0 To CurrentDb.TableDefs("table1").Indexes.Count - 1
If CurrentDb.TableDefs("table1").Indexes(i).Primary Then
MsgBox CurrentDb.TableDefs("table1").Indexes(i).Fields(0).Name
End If
next i

تحياتي استاذ صالح

تم تعديل بواسطه رمهان
  • Like 2
  • Thanks 1
رابط هذا التعليق
شارك

6 ساعات مضت, صالح حمادي said:

السلام عليكم

نستطيع من خلال الكود استخراج أسماء الجداول و العلاقات الموجود بينها و حتى حقول الربط

و أيضا نستطيع استخراج أسماء الحقول و نوعها و طولها.

السؤال: ما هي طريقة إستخراج المفتاح الأساسي لجدول.

يا سلام لو تتكرم علينا بمثال جميل زيك كده 

وياسلام تضيف كود استاذى الجليل ومعلمى القدير الاستاذ @رمهان

:yes:

رابط هذا التعليق
شارك

الان, رمهان said:

For i = 0 To CurrentDb.TableDefs("table1").Indexes.Count - 1 If CurrentDb.TableDefs("table1").Indexes(i).Primary Then MsgBox CurrentDb.TableDefs("table1").Indexes(i).Fields(0).Name End If next i

ممتاز أستاذ رمهان الكود يعمل بشكل جيد شكرا جزيلا

 

رابط هذا التعليق
شارك

الان, ابا جودى said:

يا سلام لو تتكرم علينا بمثال جميل زيك كده

هذا مثال لاستخراج اسم الجدول و حقوله ونوع كل حقل :

Dim dbs, tdf As TableDef, name_field As Field
Dim i As Integer
Set dbs = CurrentDb
For Each tdf In dbs.TableDefs
   If Left(tdf.Name, 4) <> "msys" Then
   'استخراج اسماء الحقول
      For Each name_field In tdf.Fields
          MsgBox tdf.Name & "=" & name_field.Name & " - " & name_field.Type & "...." & name_field.Size
      Next name_field     
   End If
Next tdf
Set dbs = Nothing

 

  • Thanks 1
رابط هذا التعليق
شارك

 

الان, صالح حمادي said:

هذا مثال لاستخراج اسم الجدول و حقوله ونوع كل حقل :


Dim dbs, tdf As TableDef, name_field As Field
Dim i As Integer
Set dbs = CurrentDb
For Each tdf In dbs.TableDefs
   If Left(tdf.Name, 4) <> "msys" Then
   'استخراج اسماء الحقول
      For Each name_field In tdf.Fields
          MsgBox tdf.Name & "=" & name_field.Name & " - " & name_field.Type & "...." & name_field.Size
      Next name_field     
   End If
Next tdf
Set dbs = Nothing

 

c - 12....0

اسف جدا ولكن ما هى مدلولات الارقام هذه
هل تدل على نوع الحقل ؟

 

tblName=c - 12....0

رابط هذا التعليق
شارك

21 دقائق مضت, صالح حمادي said:

ممتاز أستاذ رمهان الكود يعمل بشكل جيد شكرا جزيلا

 

العفو استاذنا

3 دقائق مضت, ابا جودى said:

 

c - 12....0

اسف جدا ولكن ما هى مدلولات الارقام هذه
هل تدل على نوع الحقل ؟

 

tblName=c - 12....0

من ويت جبت هذه الارقام اباجودي ؟؟؟ ليست بكود الاستاذ صالح

رابط هذا التعليق
شارك

الان, صالح حمادي said:

هذا مثال لاستخراج اسم الجدول و حقوله ونوع كل حقل :


Dim dbs, tdf As TableDef, name_field As Field
Dim i As Integer
Set dbs = CurrentDb
For Each tdf In dbs.TableDefs
   If Left(tdf.Name, 4) <> "msys" Then
   'استخراج اسماء الحقول
      For Each name_field In tdf.Fields
          MsgBox tdf.Name & "=" & name_field.Name & " - " & name_field.Type & "...." & name_field.Size
      Next name_field     
   End If
Next tdf
Set dbs = Nothing

 

وضعت الكود خلف زر امر :blink:

get data of tbl in db.accdb

رابط هذا التعليق
شارك

اهاه 

اللي هي النوع والحجم

type وهي تعود بارقام نوع البيانات وتقدر تبحث في مصادر الاكسس عن مدلول كل رقم مانوعه

وللحصول على اسم النوع وتريح نفسك 

MsgBox tdf.Name & "=" & name_field.Name & " - " & TypeName(name_field.Type) & "...." & name_field.Size

size حجم الحقل

بالتوفيق

 

  • Like 1
رابط هذا التعليق
شارك

11 ساعات مضت, صالح حمادي said:

السؤال: ما هي طريقة إستخراج المفتاح الأساسي لجدول.

السلام عليكم

مشاركة مع احبتي 

MsgBox CurrentDb.TableDefs("yourtable").Indexes("PrimaryKey").Fields(0).Name

 

  • Like 1
رابط هذا التعليق
شارك

في ٢٥‏/٤‏/٢٠١٩ at 12:21, ابوخليل said:

السلام عليكم

مشاركة مع احبتي 


MsgBox CurrentDb.TableDefs("yourtable").Indexes("PrimaryKey").Fields(0).Name

 

لانه يفترض ان المفتاح موجود ومش كدا بس برضه يشترط ان اسمه primarykey  وهذا يحدث نادرا فليس دائما يوجد مفتاح اساسي وباسم primarykey

تحياتي

  • Like 1
رابط هذا التعليق
شارك

 ما فهمت !! ليش اجرب على جدول بدون مفتاح 

والطلب هو استخراج او ارجاع اسم مفتاح رئيسي موجود داخل جدول 

واذا الجدول ما فيه مفتاح من وين يبي يجيبه ؟

اكيد سيرجع خطأ ، ونحن يمكننا التعامل معه من اقصر الطرق 

 On Error GoTo PrimErr:
 MsgBox CurrentDb.TableDefs("tbl1").Indexes("PrimaryKey").Fields(0).Name
PriErr:
    Exit Sub
PrimErr:
    MsgBox "لا يوجد مفتاح أساسي للجدول"
    Resume PriErr

عندها يمكن ان نضيف استفسار وسطرا اذا نرغب باضافة المفتاح

هذا الذي عندي .. بارك الله فيك

 

 

  • Like 1
رابط هذا التعليق
شارك

الان, ابوخليل said:

مشاركة مع احبتي 


MsgBox CurrentDb.TableDefs("yourtable").Indexes("PrimaryKey").Fields(0).Name

جزاك الله خيرا أستاذنا الغالي

36 دقائق مضت, رمهان said:

type وهي تعود بارقام نوع البيانات وتقدر تبحث في مصادر الاكسس عن مدلول كل رقم مانوعه

وللحصول على اسم النوع وتريح نفسك 


MsgBox tdf.Name & "=" & name_field.Name & " - " & TypeName(name_field.Type) & "...." & name_field.Size

size حجم الحقل

نعم type تعود برقم يدل على نوع معين و شكرا أستاذ رمهان على إضافة الدالة TypeName

  • Like 1
رابط هذا التعليق
شارك

17 ساعات مضت, رمهان said:

لانه يفترض ان المفتاح موجود ومش كدا بس برضه يشترط ان اسمه primarykey  وهذا يحدث نادرا فليس دائما يوجد مفتاح اساسي وباسم primarykey

تحياتي

@ابوخليل

اهملت النقطة الثانية 

جرب على جدول ليس اسم المفتاح الاساسي primarykey

رابط هذا التعليق
شارك

حبيبنا ،،، هذا هو الاسم الافتراضي الذي يدرجه أكسس عندما ننقر على المفتاح لاختياره في الجدول

وطبيعي لن يعمل او بالاصح لن يجده لو ان احدا اجتهد ودخل الى الفهارس وغير الاسم 

وما دمت اخوي الغالي بهذه الدقة في اختياراتك وطرحك للحلول ، فالكود الذي تفضلت به أنا وانت كلها قاصرة

فلو فرضنا وجود اكثر من مفتاح في الجدول فلن يرجع الا باسم واحد فقط  

وقد وجدت حلا  شاملا  يستخرج جميع مفاتيح الجدول ان وجدت 

Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim ix As DAO.Index
Dim fld As DAO.Field
Dim strFields As String
Set db = CurrentDb
Set tdf = db.TableDefs("tbl1")
For Each ix In tdf.Indexes
If ix.Primary Then
For Each fld In ix.Fields
strFields = strFields & "," & fld.Name
Next fld
Exit For
End If
Next ix
If Len(strFields) > 0 Then strFields = Mid$(strFields, 2)
MsgBox strFields

 

  • Like 2
رابط هذا التعليق
شارك

الان, صلاح بلعلا said:

هل يمكن التواصل معكم لبعض الاستفسارات

أخي صلاح مرحبا بك في المنتدى

إن كان لديك أي سؤال فقم بفتح موضوع جديد و سوف تجد من يجيبك إن شاء الله

 

رابط هذا التعليق
شارك

في ٢٦‏/٤‏/٢٠١٩ at 09:52, ابوخليل said:

فلو فرضنا وجود اكثر من مفتاح في الجدول فلن يرجع الا باسم واحد فقط  


Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim ix As DAO.Index
Dim fld As DAO.Field
Dim strFields As String
Set db = CurrentDb
Set tdf = db.TableDefs("tbl1")
For Each ix In tdf.Indexes
If ix.Primary Then
For Each fld In ix.Fields
strFields = strFields & "," & fld.Name
Next fld
Exit For
End If
Next ix
If Len(strFields) > 0 Then strFields = Mid$(strFields, 2)
MsgBox strFields

@ابوخليل

ممكن تشرح وجود اكثر من مفتاح ؟

لانه حسب علمي لايمكن ان يكون هناك اكثر من مفتاح واحد في الجدول؟

مشكور

 

رابط هذا التعليق
شارك

الان, رمهان said:

لانه حسب علمي لايمكن ان يكون هناك اكثر من مفتاح واحد في الجدول؟

يمكن إضافة أكثر من مفتاح واحد في الجدول لاحظ هذه الصورة:

4.jpg.cf05ef4e2a219c49b2de86722261ed5a.jpg

  • Thanks 1
رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information