المساعدة - البحث - قائمة الأعضاء - التقويم
نسخة كاملة: دروس في ديلفي
برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة > منتديات لغات البرمجة العام > منتدى مبرمجي Borland Delphi
طلال بلال
السلام عليكم ورحمة الله وبركاته
سنقوم بهذا القسم بشرح بعض الدروس في ديلفي وسنركز على عدة أشياء منها
Master / detail , وعناصر تحكم ربط lookup , وحقول إرتباط داخل DBGrid , وغيرها إن شاء الله مع الأمثلة.

الدرس الأول :
شرح عملية master/detail أو بنى رئيسي / تفصيلي :



كثيراً ما نحتاج إلى ربط جداول لها علاقة واحد إلى كثير (one-to-many) أي لكل سجل في الجدول الرئيسي الكثير من السجلات في جدول ثانوي . ومثال على ذلك فاتورة وبنود الفاتورة , قائمة الزبائن وطلبات كل زبون.
وتدعم ديلفي دعماً صريحا ً بنى رئيسي \ تفصيلي (master/detail) بوجود الخاصية DataSource لإعداد مصدر بيانات رئيسي , وتستخدم هذه الخاصية في مجموعة بيانات تفصيلية للارتباط بالسجل الحالي في مجموعة البيانات الرئيسية , في تركيبة مع الخاصية master fields .


نبدأ بشرح العملية
أولا ً نقوم بعمل الجداول في قاعدة البيانات ولتكن Access
1- جدول الموردين four
2- جدول المنتجات Article
3- جدول الفواتير Statement
4- جدول تفصيل الفاتورة detailstat

ملاحظة: المفتاح الأساسي في جدول تفصيل الفاتورة وهو /رقم تفصيل الفاتورة /يجب أن يكون ترقيم تلقائي

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

إضغط لإظهار المرفق

ثانيا ً : نقوم بربط الجداول بديلفي
جدول الموردين في فورم
جدول المنتجات في فورم
جدول الفواتير وجدول تفصيل الفواتير في فورم موضحة في الصورة

إضغط لإظهار المرفق

ثالثا ً والأهم :
1- نضع جدول تفصيل الفاتورة ضمن Object Inspector أو نضغط على أيقونته المجودة على الفورم الأساسي رقم 1
2- من Master Source نحدد الجدول الأساسي وهو جدول الفواتير Statement
3- من Master Fields نضغط على المفتاح الموجود عليها . تظهر لنا شاشة الربط
4- نحدد الحقل No_Ststement الموجود في Detial Fields
5- نحدد الحقل No_Statement الموجود في Master Fields
6- نضغط على Add
7- نضغط على

إضغط لإظهار المرفق

ويمكننا أن نعمل Master/Detail أيضا ً بين الموردين والفواتير لمعرفة كل مورد ماله من فواتير . ولكن هنا نحن بحاجة إلى مصدر بيانات ثاني لجدول الفواتير /Statement /.
نقوم بتعريف جدول ٍStatement من جديد إلى الفورم الأساسي ونسميه اسم جديد ثم نقوم بعملية master/Detail بينه وبين جدول الموردين.

وهناك مثال في المرفق يوضح كلا الحالتين .

في الدرس الثاني سنقوم بشرح عناصر ارتباط lookup وسنتابع في المثال نفسه كيف سنتعامل مع اسم المورد واسم المنتج بدلا ً من الأرقام.

بالتوفيق إن شاء الله


أرجو أن أكون قد وفقت بالشرح
علي .ع
ممتاز اخ طلال موضوع جميل
وجهز نفسك اذا لانشاء شكل الفاتورة في مشروع تسيير المخازن
لكن بشكل مختلف
وفقنا الله واياكم
Swift
شرح ممتاز اخى طلال
ينقصه فقط البندين التالين :
ماهو تعريف (master/detail) ؟
متى سوف احتاج الى هذا الشرح ؟ بمعنى هستفاد امتى من الشرح هذا ؟ بمعنى ايه فايدة الشرح هذا ؟
طلال بلال
تعريف master/detail نستطيع أن نقول أخ سويفت إنها عملية ربط جدولين, جدول رئيسي بجدول تفصيلي .
استخداماتها:
قد ذكرت احد أهم أستخدلماتها وهي فاتورة وبنودها , قائمة الزبائن وطلبات كل زيون
سأشرح بالتفصيل:
لدينا جدول الفواتير والذي يحتوي على الحقول رقم الفاتورة - تاريخها- المورد- وملاحظات . وهذا لا يكفي لكي تكتمل الفاتورة فمازلنا بحاجة إلى بنود الفاتورة وهي اسم الصنف -الكمية-السعر- المجموع وهذه البنود لا نستطيع أن نوردها في جدول الفاتورة كون كل حقل مرتبط بالخانة رقم الفاتورة فإذا كان لدينا سبعة أصناف ضمن الفاتورة الواحدة فكيف سوف نكتبها ضمن الفاتورة.؟؟ فنقوم بعمل جدول تفصيلي حقوله هي اسم الصنف - الكمية - السعر -المجموع ونقوم بربطة بعملية master/detail مع جدول الفواتير

طريقة أخرى عن استخدامها
في المرفق يوجد جدول للموردين ويوجد جدول الفواتير , فإذا أردت أن تفرز فواتير كل مورد لوحدها ستحتاج إلى هذه العملية . والمثال موجود في المرفق
أيضا ً
في برنامج حسابي لإدارة منشأه : يمكننا استخدام هذه العملية مثلا في ,كشف حساب مدين أو كشف حساب دائن
تستطيع أن تفرز جميع دفعات الدائن مع تاريخها وما مجموع حسابه .
على سبيل المثال لا الحصر .
بالتوفيق.
Swift
الأن اكتملت الصورة

موفق اخى طلال فى شروحاتك
زكيري عبد العالي
السلام عليكم
اخوتي اجوا ان تستعمل زر الشكر بدا من وضع ردود كي تسبح الدروس متسلسة يلا انقطاع وسقوم بحذ ردي هذا بعد فترة شكلاا
sabrina_1603
السلام عليكم يا اخواني اشكرك اخ طلال على اطلالتك ،ادامها الله على فكرة انا مبتدئة جديدة في الدلفي ارجوا ان نستفيد اكثر وشكرا ادام الله عليك الصحة والعافية
طلال بلال
شكرا ً لك أختي الكريمة على مشاعرك
إننا هنا نقدم مالدينا ونستفاد من بعضنا
أتمنى أن تتابعي مشروع الأخ علي (مشروع تسيير مخازن بسيط) ففيه إفادة كبيرة
وسأقدم الدرس الثاني اليوم إن شاء الله
طلال بلال
السلام عليكم ورحمة الله وبركاته
سنبدأ اليوم بالدرس الثاني

الدرس الثاني : استخدام عناصر تحكم ربط lookup



كما تابعنا في الدرس السابق فإن مجموعة بيانات الفواتير تحتوي حقلا ُ يدل على رقم المورد , ولا يعتبر العمل مع رقم المورد الطريقة الأكثر طبيعية . حيث يفضل أغلب المستخدمين التعامل مع أسماء الموردين . نفس الأمر بالنسبة للمنتجات
ولذلك يمكننا استخدام / DBLookComboBox / الذي يمكن ربطه إلى مصدري بيانات في نفس الوقت يحتوي إحداها على البيانات والثاني على بيانات الإظهار .

ملاحظة : ( لا تنتقل هذه التقنية بشكل جيد إلى بنية عميل/ ملقم تتضمن جداول ربط كبيرة )

نقوم بشرح العملية
نحذف المكون DBEdit المربوط إلى رقم المورد في فورم الفواتير ونقوم باستبداله بمكون DBText الموجود في DataControls ونقوم بربطه إلى رقم المورد
DataSource ='DSStatement
DataField ='No_four

إضغط لإظهار المرفق

أيضا ً من DataControls نضيف المكونDBLookComboBox

إضغط لإظهار المرفق

لاحظ مصدري البيانات التي يتم الربط إليهما

إضغط لإظهار المرفق

الآن نقوم بالربط إلى مصدر البيانات الأول والذي هو جدول الفواتير
DataSource = 'DSStatement
DataField = 'No_Four

إضغط لإظهار المرفق

الأن نقوم بالربط إلى مصدر البيانات الثاني والذي هو جدول الموردين
ListSource = 'Tfour' - 1
ListField = 'Name_Four;No_four' -2
ملاحظة : من ListField تختار Name_Four ثم تضيف إليها No_Four يدويا ً أي بنفس الخانة تضع
;No_Four مباشرة بعد Name_four
3 - 'KeyField = 'No_Four
4 - 'DropDownWidth = '400 وذلك لتتضمن القائمة المنسدلة عدة أعمدة من البيانات ولكي تظهر رقم المورد مع اسم المورد

إضغط لإظهار المرفق

تصبح بالشكل التالي

إضغط لإظهار المرفق

ونفس الأمر بالنسبة للمكون DBLookupListBox

إضغط لإظهار المرفق

وهناك في المرفق مثال لكلا الحالتين

بالتوفيق إن شاء الله














لموشة الصحراء
السلام عليكم
بارك الله فيك أخي طلال على هذا الطرح الممتاز لهذه النقاط المهمة ونأما المضي قدما
وأريد طلب منك شيئ وهي تعديل المرفقات الى الاتيني لأن كل شيئ ظهر لي بـ؟؟؟؟؟؟؟؟؟
وشكرا على المجهود الذي بذلته من أجلنا
طلال بلال
هذه هي المرفقات من جديد
لموشة الصحراء
بارك الله فيك أخي طلال على هذا التحديث الذي نفعني كثيرا
وانه لموضوع شيق أخذ الكثير من وقتي لكي افهمه لأانه يتوجب معرفة القليل من المحاسبة
على كل أريد أن أسألك في نقطة أشرت اليها ولم تتطرق اليها أظن وهي كيفية جلب كل فاتورات المورد
اتخسل أن نعين موردا فتخرج كل أرقام الفاتورات التي أخذها منا منذ أن بدأ العمل معنا وعندما نضغط على رقم يخرج فحوى الفاتورة أي
تعين سلعها وكميتها ومجمولها
من هذا يمكن أن نعرف ما اشترى منا ذلك خلا لسنة مثلا
هذا ما لدي وشكرا جزيلا على طرحك المميز وننتظرك في الرد على استفساراتنا
وبارك الله فيك
fafe0
السلام عليكم ورحمة الله وبركاته.

بارك الله فيك أخي talal على هذا الشرح الرائع .

لكن عندي سؤال:
لدي DBGrid تعرض جدول الآباء مثلا، ومن ضمن الحقول هو حقل رقم الأب والذي هو المفتاح الأساسي للجدول، ولكني لا أريد عرض هذا الحقل ضمن الـ DBGrid ، كيف يمكنني عمل ذلك ؟
لموشة الصحراء
بعد اذنك يا أخي طلال أتقدم بالاجابة على سؤال الأخ ان سمحت وأترك التعقيب لك
اضغط مرتين يا أخي على DBGrid تخرج لك لائحة صغيرة اضغط بالزر الأيمن وتخرج لك قائمة منسدلة اختر منها الخيار : اضف جميع الحقول
وتخرج لك حقول الجدول احذف الذي أرته بعد الضغط عليه مرة واحدة وضغط زر الحذف من لوحة المفاتيح
والله أعلم
fafe0
شكراً جزيلااً وجزاك الله خيراً على الإجابة، بالفعل هذا ما كنت أريده.

ولكن لدي سؤال آخر : كيف أستطيع تغيير عناوين الأعمدة في الـ DBGrid ؟ مثلاً في جدول الآباء هناك الحقول : FatherID , FatherName, FatherAge الخ ...

أريد تغيير أسماء حقول هذا الجدول في الـ DBGrid لتصبح : رقم الأب، اسم الأب ، عمر الأب .
( ملاحظة: أعلم أنه في الاستعلام Query بالإمكان تغييرها عن طريق الـ SQL مثلا:
كود
    SELECT Fathers.FatherName as اسم الأب From Fathers

وشكراً مقدماً .
fafe0
السلام عليكم
لقد وجدت الإجابة والحمد لله.
شكراً لكم على كل حال.

الإجابة: الضغط على الـ DBGrid مرتين ثم اختيار ( إضافة جميع الحقول ) وبعد ذلك نستطيع حذف الحقل الذي لا نريد إظهاره، ونستطيع أن نغير عناوين الحقول وذلك باختيار الحقل بالماوس، ثم من قائمة الخصائص نختار Title ثم Caption ونضع الاسم الذي نريده للحقل.

السلام عليكم.
طلال بلال
السلام عليكم
بخصوص جوابك للأخ فهو جواب صحيح ويمكننا أيضا إضافة اليانات عن طريق الضغط على زر الشبكة الظاهر في مربع الحوارالذي يظهر بعد الضغط مرتين على dbgrid والخذف من أيقونة الحذف الظاهرة في نفس مربع الحوار

أما في خصوص النقطة التي أشرت إلى إنني لم أتطرق إليها , وهي جلب فواتير كل مورد
أختي الكريمة أنا قد ذكرتها ولم أنساها , فقد ذكرت إننا نستطيع أن نقوم بعملية master/detail بين الموردين وجدول الفواتير, ولكننا هنا بحاجة إلى مصدر بيانات ثاني لجدول الفواتير . فنقوم بإضافة AdoTable جديد ونقوم بعملية master/detail جديدة بينة وبين جدول الموردين بنفس الطريقة السابقة
إنتبهي إلى الصورة التالية

إضغط لإظهار المرفق

ثم إن الفورم Four Stat يمثل شرح هذه العملية . كل مورد وجميع أرقام فواتيرة في الأسفل
أما فيما يخص الضغط على رقم فاتورة لتعرفي محتواها فيمكننا القيام به بعدة طرق من بينها عملية master/detail ثانية
وهنا يجب أن تضيفي مصدر بيانات ثاني يمثل جدول تفصيل الفاتورة وتقومي بنفس العملية بينه وبين جدول الفواتير الثاني الموجود ضمن الفورم المذكورة Four Stat
لاحظي الصورة
وستجدينة في المرفق

إضغط لإظهار المرفق

وبالنسبة لتعيين سلعها ومجمولها طبعا ممكن
ولكن هنا أنا قمت بمثال بسيط لشرح عملية master/detail وطرق التعامل معها
ولكي لا يكون الشرح مكرر في المنتدى أتمنى أن تتابعي (مشروع تسيير مخازن للأخ علي ) فيه شرح لأمور مهمة جدا ً وهو مشروع مفتوح يستطيع الجميع المشاركة فيه والاستفادة منه .

بالتوفيق إن شاء الله





جيد أخ fefo0 حل صحيح
لموشة الصحراء
بارك الله فيك أخي على حسن معاملتك
حقيقة أفكار رائعة وأني قد اطلعت على موضوع الأخ علي وقد كنت فيه مشاركا فعالا
وفي الحقيقة أني بصدد جمع معلومات عن البيع والشراء والمعاملات التي يمكن أن تحصل فيسهل علينا برمجتها
وليكن في علمك اني لست مهتما بهذا الميدان وانما ارادة في اتقان البرمجة بشكل حسن
والسلام عليكم
طلال بلال
السلام عليكم ورحمة الله وبركاته
الدرس الثالث


سنقوم اليوم بالتعرف على كيفية وضع حقل lookup ضمن dbgrid

يمكن وضع حقل lookup بدلا من وضع المكون dblookupcombox .
يمكن تعريف هذا الحقل الذي يمكن عرضه مع قائمة ارتباط منبثقة داخل مكون dbgrid ولتخصيص الشبكة بارتباط مباشر يجب تعريف حقل ارتباط باستخدام المحرر Fields Editor .

سنقوم بالمثال على المرفق الأول, وعلى جدول الفواتير بالتحديد

في جدول تفصيل الفواتير يوجد حقل لتعريف المنتج وهو No_Article , سنقوم بإدراج حقل بإسم المنتج عوضا ًعنه

أولا: نفتح ال Field Editor الخاص بجدول تفصيل الفواتير (ditailsts )
نغير خاصية Visible التابعة لNo_Article إلى False
نختار New Field لإنشاء حقل الربط

إضغط لإظهار المرفق

من New Field نكتب إسم الحقل وليكن Articl
من Type نختار IBString

إضغط لإظهار المرفق


4- من Size نضع الرقم 30
5- نحدد Lookup
6- من Key Fields نختار No_Article
الآن سننتقل إلى مصدر البيانات الثاني

7- من Data Sate نختار الجدول الذي سيتم الربط معه وهو Article
8- من Lookup Kays نحدد المفتاح No_Article
9- من Result Field نحدد Name_Article وهو الذي سوف يظهر في الحقل
10- OK

إضغط لإظهار المرفق

الآن بقي أن نضيف الحقل إلى dbgrid
ننقر نقرا مزدوجا ً على DBgrid ثم على ننقر على Add All Fields ثم Yes

إضغط لإظهار المرفق

لتصبح بالشكل التالي

إضغط لإظهار المرفق

بالتوفيق إن شاء الله

download.gif














neo1115
إقتباس(fafe0 @ Oct 17 2008, 05:33 PM) *
شكراً جزيلااً وجزاك الله خيراً على الإجابة، بالفعل هذا ما كنت أريده.

وشكراً مقدماً .


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

والا يكون الشكر من خلال مشاركة او رد .....هذا رأي الشخصي

لقد قمت بشكر الاخت لموشة الصحراء عوضاً عنك .... sleep.gif
أرجو تثبيت الموضوع laugh.gif
طلال بلال
السلام عليكــم ورحمـة الله وبركاتــة

قبل أن نبدأ بموضوع جديد , هذا مرفق يحتوي على جميع التطبيقات السابقة

بالتوفيق إن شاء الله
هذه "نسخة - خفيفة" من محتويات الرئيسية للإستعراض الكامل مع المزيد من الصور والخيارات الرجاء إضغط هنا.
Invision Power Board © 2001-2009 Invision Power Services, Inc.