الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

دروس في ديلفي

بدأه طلال بلال في 9 أكتوبر 2008 · 34 رد · 13,151 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

سنقوم بهذا القسم بشرح بعض الدروس في ديلفي وسنركز على عدة أشياء منها

Master / detail , وعناصر تحكم ربط lookup , وحقول إرتباط داخل DBGrid , وغيرها إن شاء الله مع الأمثلة.

الدرس الأول :

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

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

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

نبدأ بشرح العملية

أولا ً نقوم بعمل الجداول في قاعدة البيانات ولتكن Access

1- جدول الموردين four

2- جدول المنتجات Article

3- جدول الفواتير Statement

4- جدول تفصيل الفاتورة detailstat

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

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

post-169385-1223505726_thumb.jpg

ثانيا ً : نقوم بربط الجداول بديلفي

جدول الموردين في فورم

جدول المنتجات في فورم

جدول الفواتير وجدول تفصيل الفواتير في فورم موضحة في الصورة

post-169385-1223506087_thumb.jpg

ثالثا ً والأهم :

1- نضع جدول تفصيل الفاتورة ضمن Object Inspector أو نضغط على أيقونته المجودة على الفورم الأساسي رقم 1

2- من Master Source نحدد الجدول الأساسي وهو جدول الفواتير Statement

3- من Master Fields نضغط على المفتاح الموجود عليها . تظهر لنا شاشة الربط

4- نحدد الحقل No_Ststement الموجود في Detial Fields

5- نحدد الحقل No_Statement الموجود في Master Fields

6- نضغط على Add

7- نضغط على

post-169385-1223506255_thumb.jpg

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

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

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

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

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

أرجو أن أكون قد وفقت بالشرح

arabteam.rar

#2

ممتاز اخ طلال موضوع جميل

وجهز نفسك اذا لانشاء شكل الفاتورة في مشروع تسيير المخازن

لكن بشكل مختلف

وفقنا الله واياكم

اللهم علمنا ما ينفعنا وانفعنا بما علمتنا وانفع الناس بنا واغفر لنا وارحمنا

#3

شرح ممتاز اخى طلال

ينقصه فقط البندين التالين :

ماهو تعريف (master/detail) ؟

متى سوف احتاج الى هذا الشرح ؟ بمعنى هستفاد امتى من الشرح هذا ؟ بمعنى ايه فايدة الشرح هذا ؟

Comming Soon

#4

تعريف master/detail نستطيع أن نقول أخ سويفت إنها عملية ربط جدولين, جدول رئيسي بجدول تفصيلي .

استخداماتها:

قد ذكرت احد أهم أستخدلماتها وهي فاتورة وبنودها , قائمة الزبائن وطلبات كل زيون

سأشرح بالتفصيل:

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

طريقة أخرى عن استخدامها

في المرفق يوجد جدول للموردين ويوجد جدول الفواتير , فإذا أردت أن تفرز فواتير كل مورد لوحدها ستحتاج إلى هذه العملية . والمثال موجود في المرفق

أيضا ً

في برنامج حسابي لإدارة منشأه : يمكننا استخدام هذه العملية مثلا في ,كشف حساب مدين أو كشف حساب دائن

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

على سبيل المثال لا الحصر .

بالتوفيق.

#5

الأن اكتملت الصورة

موفق اخى طلال فى شروحاتك

Comming Soon

#6

السلام عليكم

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

#7

السلام عليكم يا اخواني اشكرك اخ طلال على اطلالتك ،ادامها الله على فكرة انا مبتدئة جديدة في الدلفي ارجوا ان نستفيد اكثر وشكرا ادام الله عليك الصحة والعافية

اذا غامرت في شرف مروم فلا تقنع ما دون النجوم

#8

شكرا ً لك أختي الكريمة على مشاعرك

إننا هنا نقدم مالدينا ونستفاد من بعضنا

أتمنى أن تتابعي مشروع الأخ علي (مشروع تسيير مخازن بسيط) ففيه إفادة كبيرة

وسأقدم الدرس الثاني اليوم إن شاء الله

#9

السلام عليكم ورحمة الله وبركاته

سنبدأ اليوم بالدرس الثاني

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

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

ولذلك يمكننا استخدام / DBLookComboBox / الذي يمكن ربطه إلى مصدري بيانات في نفس الوقت يحتوي إحداها على البيانات والثاني على بيانات الإظهار .

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

نقوم بشرح العملية

نحذف المكون DBEdit المربوط إلى رقم المورد في فورم الفواتير ونقوم باستبداله بمكون DBText الموجود في DataControls ونقوم بربطه إلى رقم المورد

DataSource ='DSStatement

DataField ='No_four

post-169385-1223802310_thumb.jpg

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

post-169385-1223802394_thumb.jpg

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

post-169385-1223803287_thumb.jpg

الآن نقوم بالربط إلى مصدر البيانات الأول والذي هو جدول الفواتير

DataSource = 'DSStatement

DataField = 'No_Four

post-169385-1223804218_thumb.jpg

الأن نقوم بالربط إلى مصدر البيانات الثاني والذي هو جدول الموردين

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 وذلك لتتضمن القائمة المنسدلة عدة أعمدة من البيانات ولكي تظهر رقم المورد مع اسم المورد

post-169385-1223804992_thumb.jpg

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

post-169385-1223805930_thumb.jpg

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

post-169385-1223806083_thumb.jpg

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

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

arabteam1.rar

1
#10

السلام عليكم

بارك الله فيك أخي طلال على هذا الطرح الممتاز لهذه النقاط المهمة ونأما المضي قدما

وأريد طلب منك شيئ وهي تعديل المرفقات الى الاتيني لأن كل شيئ ظهر لي بـ؟؟؟؟؟؟؟؟؟

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

#12

بارك الله فيك أخي طلال على هذا التحديث الذي نفعني كثيرا

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

على كل أريد أن أسألك في نقطة أشرت اليها ولم تتطرق اليها أظن وهي كيفية جلب كل فاتورات المورد

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

تعين سلعها وكميتها ومجمولها

من هذا يمكن أن نعرف ما اشترى منا ذلك خلا لسنة مثلا

هذا ما لدي وشكرا جزيلا على طرحك المميز وننتظرك في الرد على استفساراتنا

وبارك الله فيك

#13

السلام عليكم ورحمة الله وبركاته.

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

لكن عندي سؤال:

لدي DBGrid تعرض جدول الآباء مثلا، ومن ضمن الحقول هو حقل رقم الأب والذي هو المفتاح الأساسي للجدول، ولكني لا أريد عرض هذا الحقل ضمن الـ DBGrid ، كيف يمكنني عمل ذلك ؟

#14

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

اضغط مرتين يا أخي على DBGrid تخرج لك لائحة صغيرة اضغط بالزر الأيمن وتخرج لك قائمة منسدلة اختر منها الخيار : اضف جميع الحقول

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

والله أعلم

#15

شكراً جزيلااً وجزاك الله خيراً على الإجابة، بالفعل هذا ما كنت أريده.

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

أريد تغيير أسماء حقول هذا الجدول في الـ DBGrid لتصبح : رقم الأب، اسم الأب ، عمر الأب .

( ملاحظة: أعلم أنه في الاستعلام Query بالإمكان تغييرها عن طريق الـ SQL مثلا:

	SELECT Fathers.FatherName as اسم الأب From Fathers

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

#16

السلام عليكم

لقد وجدت الإجابة والحمد لله.

شكراً لكم على كل حال.

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

السلام عليكم.

#17

السلام عليكم

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

أما في خصوص النقطة التي أشرت إلى إنني لم أتطرق إليها , وهي جلب فواتير كل مورد

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

إنتبهي إلى الصورة التالية

post-169385-1224250323_thumb.jpg

ثم إن الفورم Four Stat يمثل شرح هذه العملية . كل مورد وجميع أرقام فواتيرة في الأسفل

أما فيما يخص الضغط على رقم فاتورة لتعرفي محتواها فيمكننا القيام به بعدة طرق من بينها عملية master/detail ثانية

وهنا يجب أن تضيفي مصدر بيانات ثاني يمثل جدول تفصيل الفاتورة وتقومي بنفس العملية بينه وبين جدول الفواتير الثاني الموجود ضمن الفورم المذكورة Four Stat

لاحظي الصورة

وستجدينة في المرفق

post-169385-1224250398_thumb.jpg

وبالنسبة لتعيين سلعها ومجمولها طبعا ممكن

ولكن هنا أنا قمت بمثال بسيط لشرح عملية master/detail وطرق التعامل معها

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

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

جيد أخ fefo0 حل صحيح

arabteam1.rar

#18

بارك الله فيك أخي على حسن معاملتك

حقيقة أفكار رائعة وأني قد اطلعت على موضوع الأخ علي وقد كنت فيه مشاركا فعالا

وفي الحقيقة أني بصدد جمع معلومات عن البيع والشراء والمعاملات التي يمكن أن تحصل فيسهل علينا برمجتها

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

والسلام عليكم

#19

السلام عليكم ورحمة الله وبركاته

الدرس الثالث

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

يمكن وضع حقل lookup بدلا من وضع المكون dblookupcombox .

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

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

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

أولا: نفتح ال Field Editor الخاص بجدول تفصيل الفواتير (ditailsts )

نغير خاصية Visible التابعة لNo_Article إلى False

نختار New Field لإنشاء حقل الربط

post-169385-1224578708_thumb.jpg

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

من Type نختار IBString

post-169385-1224579033_thumb.jpg

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

post-169385-1224579148_thumb.jpg

الآن بقي أن نضيف الحقل إلى dbgrid

ننقر نقرا مزدوجا ً على DBgrid ثم على ننقر على Add All Fields ثم Yes

post-169385-1224579206_thumb.jpg

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

post-169385-1224579263_thumb.jpg

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

:download:

arabteam0.rar

#20
fafe0 كتب:
شكراً جزيلااً وجزاك الله خيراً على الإجابة، بالفعل هذا ما كنت أريده.

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

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

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

لقد قمت بشكر الاخت لموشة الصحراء عوضاً عنك .... -_-

أرجو تثبيت الموضوع :lol:

إجعل أدني طموحك أن تمسك النجوم ...حتي تصل الي ما تريد

#21

السلام عليكــم ورحمـة الله وبركاتــة

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

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

arabteam11.zip

#22

اخى العزيز طلال بلال

والحديث للاخوه الافاضل

انا كنت عامل برنامج بالفجول بيسك وهو اداره مخزون ينقصه الميزانيه

ويشمل على الاتى

العملاء - الموردين - مدفوع عملاء - مدفوع موردين - فواتير مشتريات - فواتير مبيعات

وعلى العموم سوف ارفق قاعده البيانات للاطلاع عليها وعمل برنامج ادارة المخزون بالدلفى

حيث اننى مبتدئ بالدلفى

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

تم انجاز الفورمات الاتيه بالمشروع

شاشه الباسورد وشاشه بيانات العملاء وشاشه فواتير العملاء

شاشه فواتير العملاء ينقصها الحفظ والحذف

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

سلامه بيومى

▲ -1
#23

هذا هو ماتم انجازه فى البرنامج علما بان قاعده البيانات بها كل الجداول المطلوبه

والمطلوب هو

برمجه حفظ الفاتوره وحذفها

علما بانك عندما طضغط اضافه فاتورة البرنامج يقوم بوضع رقم الفاتورة اوتوماتيكى

وبعدها تجد اسماء العملاء موجوده بالكومبو وتختار الاسم منه

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

وبعد ذلك

مطلوب عندما ادخل فى الجريد لكى اكتب رقم الصنف ويحضر بيانات الصنف فى الجريد مطلوب وضع كومبو يظهر فى الجريد فى خليه الوحده ويعبى الوحدات الخاصه بالنف من الجدول بتاع الاصناف الفرعيه لكى اختار انا وحده الصنف

#25
سلامه بيومى كتب:
علما بانك عندما طضغط اضافه فاتورة البرنامج يقوم بوضع رقم الفاتورة اوتوماتيكى

وعليكم السلام

اولا يجب ان لايكون رقم الفاتورة اوتوماتيكي لآن رقم الفاتورة يجب ان يكون مطابق لرقم الفاتورة الواردة من المورد . كي تستطيع البحث عنها مستقبللا

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

سأراقب المرفقات في وقت اخر لآنني مزدحم بالعمل الان

بالتوفيق اخي الكريم

مواضيع مشابهة