الرئيسية  +  لوحة التحكم  +  البحث  +  مركز تحميل الملفات +  للاعلان في الموسوعة التسجيل + مواضيع اليوم + المشاركات الجديدة الخروج

 
 

عزيزي العضو لا تتعب نفسك بوضع ردود الشكر على المواضيع لاننا سنقوم بحذف مثل هذه الردود تماما ولذلك يجب عليك وضع رد مناسب ومكمل للموضوع او لا تضع ردا نهائيا ... شكرا لتعاونكم


العودة   موسوعة الساحات الالكترونية > القـسـم التكنولوجــي و الإقتصادي > لغات برمجية

لغات برمجية الفيجوال بيسك , لغة السي , تقنية الدوت نت ,الأسيمبلي,تصميم المواقع

سارع الان بالاشتراك
اشترك الان في جروب شبكة النظم العربية واحصل على الفائدة

رد
 
أدوات الموضوع
  #1  
قديم 07 Aug 2005, 10:03 PM
احمد الملاح  ~{ من كتبة الموسوعة المعتمدين }~
تاريخ التسجيل: Mar 2005 الدولة: مصر المشاركات: 150

Arrow كيفية اضافة علاقات بين جداول قواعد بيانات ميكروسوفت اكسس برمجيا باستخدام فيجول بيسك


قمنا في درس سابق بانشاء جدول في قاعدة بيانات ميكروسوفت اكسس واسميناه "الطالب". في هذا الدرس سوف نقوم باضافة جدول الفصول. وبما ان الطالب قد يحضر عدة فصول فسوف نقوم بعمل علاقة بين هذا الجدول و جدول الطالب. ولان العلاقة هي علاقة "many to many" حيث ان الفصل الواحد قد يحضره عدة طلبة فلا بد من انشاء جدول آخر لتحديد فصول كل طالب و طلبة كل فصل.

الخطوات

اذا لتحقيق ذلك نقوم بانشاء جدولين :

الاول : جدول الفصل: و يحتوي هذا الجدول على البيانات التالية:

رقم الفصل : و هو من نوع رقم اتوماتيكي.

رقم الغرفة : و هو من نوع نص

اسم المادة : نص من 50 حرفا.

وقت الحضور: و هو من نوع وقت تاريخ.



الجدول الثاني : هو جدول العلاقة و سوف نسميه "فصل_طالب":

و سوف يحتوي على حقلين:

رقم الطالب: و هو من نوع رقم ولكنه في الواقع مفتاح اجنبي "foriegn Key" لجدول الطالب.

رقم الفصل: و هو من نوع رقم ولكنه في الواقع مفتاح اجنبي "foriegn Key" لجدول الفصل.

سوف نهدف من هذا الدرس ان تظهر لنا العلاقة كما في الشكل التالي

http://pentasys.homestead.com/files/asrar/relation2.jpg

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

و سوف نستعمل الاكواد التي قمنا بعملها اذا امكن من مبدأ عدم التكرار .

منطق الخطوات سبكون كالتالي:

اضف زرا جديدا للفورم
افتح الملف الذي تم انشاؤه مسبقا.
تأكد من عدم وجود جداول بنفس الاسم.
اضف الجداول الجديدة
اضف علاقة بين الجداول.
افتح الملف باستخدام ميكروسوفت للتأكد من وجود العلاقات.


1 اضافة زر جديد

اضف الى الفورم زرا و لنسمه" اضف الجداول" و اسمه btnNewTables كما في الصورة:

http://pentasys.homestead.com/files/...dNewTables.JPG

نبدأ الان بوضع الوظائف المساعدة .

2 افتح الملف الذي تم انشاؤه مسبقا.

بما اننا نريد فتح قاعدة بيانات قمنا بعملها مسبقا وليس عمل ملف جديد لذلك فقد قمت باضافة وظيفة جديدة باسم fnGetDBName وهي في الواقع نفس وظيفة fnGetNewDBName ولكن باستخدام showOpen بدلا من ShowSave كالتالي

Function fnGetDBName() As String

dbName = ""

CommonDialog1.CancelError = True

On Error GoTo ErrHandler2

With CommonDialog1 ' hmmmm I must have misunderstood how this works

' change title

On Error GoTo ErrHandler2

.DialogTitle = "Please Select the data************"

' make sure we ask before we overwrite

' file extenssions .Filter = "G. W Alfadhly Files (*.GWF)|*.GWF" .Flags = .Flags

' show the open dialog

.ShowOpen

' get the file name

If Err.Number <> cdlCancel

Then dbName = .FileName

End If

' make sure it is not empty

If Trim(dbName) <> "" Then

fnGetDBName = Trim(dbName)

Else fnGetDBName = ""

End If

End With

Exit Function

ErrHandler2:

fnGetDBName = ""

End Function



ملاحظة مهمة: قمت بخطأ في نقل الدرس الاول بان استخدمت امتداد FWF بدلا من GWF فالرجاء التأكد من انك قد صححت الخطأ اذا كنت قد عملت الدرس الاول قبل ان يقوم الاخوة المحررين في الموسوعة بتدارك الخطأ . حيث ان الخطأ قد يؤدي الى عدم ظهور الملف الذي قمت بعمله في الدرس الاول في قائمة الملفات حسب الفلتر الجديد.

التاكد من عدم وجود الجدول

حيث انني قمت بعمل هذا المشروع مرارا اردت ان اتأكد انني لم اقم باضافة الجداول مسبقا لذلك فقد اضفت الوظيفة التالية للتأكد من عدم وجود الجدول المزمع اضافته كالتالي:

'************************************************* ************

' Copy Rights

'Copyright © Ghazi H. Wadi. 2002-2003, All Rights Reserved '************************************************* ************ '************************************************* ************

' Find out if the table name exist in the data************ or not 'True = table with the same name was found '************************************************* ************

Function fnIsTableNameExist(dbsSrc As Data************, strTableName As String) As Boolean

Dim tdf As DAO.TableDef

'loop through all available tables and see if the name is the same as the one we are looking for

For Each tdf In dbs.TableDefs

'name found

If tdf.Name = strTableName Then GoTo FoundTableName

Next tdf

' the name was found then set the value of the function to the result

' Name not found

fnIsTableNameExist = False

Exit Function

FoundTableName:

fnIsTableNameExist = True

End Function



تستعمل الوظيفة كائنين هما كائن قاعدة البيانات التي سبق فتحها. والعنصر الاخر هو اسم الجدول المضاف. سوف يكون مردود الوظيفة بالموجب اذا كان الاسم موجودا وبالنفي اذا كان الاسم غير موجودا.

3 اضافة الجدولين الجديدين:

وظيفة عمل جدول الفصل و هي كالتالي مع الاهتمام بوضع رقم الفصل كمفتاح للجدول.

Function fnAddClassTable()

Set tdf = dbs.CreateTableDef("الفصل")

Dim idx As DAO.Index

Dim fldIndex As DAO.Field

With tdf

' Create fields and append them to the new TableDef

' object. This must be done before appending the

' TableDef object to the TableDefs collection of the

' new data************

.Fields.Append .CreateField("رقم الفصل", dbLong)

.Fields("رقم الفصل").Attributes = .Fields("رقم الفصل").Attributes + dbAutoIncrField

' المادة

.Fields.Append .CreateField("المادة", dbText, 255)

'وقت الحضور

.Fields.Append .CreateField("وقت الحضور", dbDate)

End With

' Create the index field

Set fldIndex = idx.CreateField("رقم الفصل", dbLong)

' this index has to be primary unique

idx.Primary = True

idx.Unique = True

' add it to the table default

idx.Fields.Append fldIndex

tdf.Indexes.Append idx

' Append TableDef object.

dbs.TableDefs.Append tdf

'Updates the objects in a collection to reflect the current data************'s schema.

dbs.TableDefs.*********************

End Function



وظيفة اضافة جدول الفصل_الطالب.

Function fnAddStudentClass()

Set tdf = dbs.CreateTableDef("الفصل_الطالب")

Dim idx As DAO.Index

Dim fldIndex As DAO.Field

With tdf

' Create fields and append them to the new TableDef

' object. This must be done before appending the

' TableDef object to the TableDefs collection of the

' new data************

.Fields.Append .CreateField("رقم الطالب", dbLong)

.Fields.Append .CreateField("رقم الفصل", dbLong)

End With

End Function


وظيفة اضافة العلاقة بين جدولين

وسوف تستقبل هذه الوظيفة االبرامترات التالية:

TableName اسم الجدول الذي نريد ربطه مع جدول الفصل_الطالب

ForeignKey وهو مفتاح الجدول الذي يراد ربطه مع جدول الفصل_الطالب

RelationName اسم العلاقة كنص

indexName الاسم المحلي للحقل في جدول الفصل_الطالب

Function NewRelation(TableName, ForeignKey, RelationName, indexName)

Dim MyDB As Data************

Dim MyField As Field

Dim MyRelation As Relation

Set MyDB = dbs

Set MyRelation = MyDB.CreateRelation(RelationName, TableName, _

"الفصل_الطالب", dbRelationDeleteCascade + _ dbRelationUpdateCascade)

'Create field in Fields collection of Relation object.

Set MyField = MyRelation.CreateField(indexName)

'Provide name of foreign key field.

MyField.ForeignName = ForeignKey

'Append field to Relation object and Relation object to data************.

MyRelation.Fields.Append MyField

'Append relation to relationship's collection

MyDB.Relations.Append MyRelation

' Set MyDB = Nothing

End Function





تعرضنا عزيز القارئ في هذا الدرس الى كيفية عمل علاقات بين الجداول في ميكروسوفت اكسس

اخوكم احمــــــــــــــ الملاح ــــــــــــــد

رد باقتباس
رد


الذين يشاهدون محتوى الموضوع الآن : 1 ( الأعضاء 0 والزوار 1)
 
أدوات الموضوع

 
الانتقال السريع إلى

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
علاقات إنسانية بحر الشوق موسوعة فتح الملفات 3 14 May 2005 12:04 AM
بائع شاي يحاول الانتحار والشرطة تقنعه بالعدول AL_Magro7 موسوعة التحليل الاخباري 6 26 Apr 2005 05:12 PM
تاريخ شركة ميكروسوفت العربي برامج الكمبيوتر 0 12 Sep 2003 03:09 PM


الساعة الآن: 05:40 AM.

Powered by vBulletin V3.6.9. Copyright ©2000 - 2008

دعم واستضافة شبكة النظم العربية