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

الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة Microsoft DAO 3.6 object Library

اذهب الى الأسفل

الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة  Microsoft  DAO 3.6 object Library Empty الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة Microsoft DAO 3.6 object Library

مُساهمة من طرف أحمد مناع الأربعاء يناير 04, 2012 2:34 pm

بسم الله الرحمن الرحيم


أخوانى الكرام أهلا وسهلا بكم فى الجزء الثالث من دورس قواعد البيانات من دورة منتدى مصر التقنى لأحتراف الفجوال بيسك 6 ...تحدثنا فى الدرس السابق وهو الجزء الثانى من دروس قواعد البيانات عن الاداة Data Control و كيفية ربط قاعدة بيانات أكسس بها ...و قد قلنا أن هذه الاداة لا تقبل الا تنسيق 97 من نوع قاعدة بيانات أكسس ....

فى هذه الدرس أن شاء الله تعالى سنتحدث عن كيفية ربط قاعدة بيانات أكسس بأستخدام مكتبة (DAO) أو Microsoft DAO 3.6 object Library .. وطبعا تتميز هذه المكتبة أنك تستطيع أن تربطها بقاعدة بيانات أكسس من تنسيق 97 حتى 2005 بدون أى تحويل أو مشاكل ...وذلك عكس الاداة Data control التى لا تقبل الا تنسيق 97 و بالتالى فأن أى أحد يمتلك أكسس 2000 أو 2002 أو 2003 كان يجب علية أولا تحويل قاعدة البيانات الى تنسيق 97 حتى يتمكن من ربطا بالاداة .....


لكن مكتبة (DAO) تستطيع أن تربطها بقاعدة بيانات من تنسيق 97 حتى 2005 بدون تحويل قاعدة البيانات ...لكن السؤال الذى يطرح نفسة :


هل يمكن أستخدام قاعدة بيانات 2007 وربطها بالفجوال بيسك 6 ؟



الاجابة : نعم ويمكنك فعل ذلك بأحد الطريقتين الاتيتين :



الطريقة الاولى : هو أن تقوم بأنشاء قاعدة بيانات أكسس 2007 ثم بعد ذلك تحويلها الى تنسيق 2000 أو 2003 كما فى الصورة التالية :

الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة  Microsoft  DAO 3.6 object Library 446788148



أما الطريقة الثانية :وهى أستخدام قاعدة بيانات 2007 مباشرة دون تحويل و ربطها بالفجوال بيسك 6 عن طريق مكتبة (DAO) ...وسيتم شرح تلك الطريقة لكن بعد التعرف على تلك المكتبة بالتفصيل


المهم _ قم بأنشاء قاعدة بيانات من نوع أكسس سواء بنسخة 2007 ثم تحويلها الى تنسيق 2000 أو 2003 وليكن أسمها (db1)بها جدول واحد وهو جدول customer به أربع صفوف أو سجلات وهم على التوالى :رقم العميل (no),أسم العميل(name) , التليفون (tel), العنوان(adrs)....


ربط قاعدة بيانات أكسس بأستخدام مكتبة Microsoft DAO 3.6 object Library



بعد ما قمنا بتصميم و أنشاء قاعدة بيانات العملاء نقوم بفتح الفجوال بيسك 6 كمعتاد و أختيار مشروع قياسى ...ثم ضع على الفورم عدد 8 زر وعدد 4 أدادة عنوان label وعدد 4 صندوق نص textbox ثم قم بضط الخصائص كما فى الشكل التالى :






بعد ذلك سنقوم بربط قاعدة بيانات أكسس بأستخدام مكتبة Microsoft DAO 3.6 object Library و يتم ذلك عبر الخطوات التالية :



الخطوة الاولى : أستدعاء مكتبة Microsoft DAO 3.6 object Library



لبدء التعامل مع DAO لا بد من اضافة المكتبة الخاصة بالداو إلى المشروع الذي قمنا بانشاءه ، وذلك من قائمة Project اختر Refrence واختر المكتبة : Microsoft Dao 3.6 Object Library أو أي اصدار اقدم ، إلا أن 3.6 هو الاصدار المفضل ....كما فى الشكل التالى :

الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة  Microsoft  DAO 3.6 object Library 426884061



ثم أختر المكتبة ثم أضغط أوكية كما فى الشكل التالى :

الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة  Microsoft  DAO 3.6 object Library 643628869



الخطوة الثانية :كتابة الاكواد البرمجية



_ اولاً سنقوم بتعريف متغيرين ليقوم الأول بحمل قاعدة البيانات لكى نتصل بها من خلاله والاخر ليحمل الجدول لى نتصل به من خلاله ايضاً والمتغيرين على التوالى هما Db و Rs .



اذهب الى قسم التصريحات العامة (General) واكتب الكود التالى :


الكود:


Dim Db As Database
Dim Rs As Recordset




وبذلك قمنها بتعريف المتغيرين ليحمل Db القاعدة ويحمل Rs الجدول

خد بالك !

ليس بمجرد اننا عرفنا المتغير انه اتصل بالقاعدة ولكن الان هو يفهم ان وظيفته او نوعه DataBase اى قاعدة بيانات والاخر RecordSet اى جدول ولكن لا يعرف المتغير حتى الان مصدره ولا حتى مع من سيتصل


والان سنقوم بربط المتغيرين بالقاعدة والجدول :أكتب الكود التالى فى حدث Form_Load للفورم :


الكود:


Set Db = DBEngine.OpenDatabase(App.Path & "\db1.mdb")
Set Rs = Db.OpenRecordset("T1", 1)




شرح الكود السابق :



السطر الاول : أول جملة في الاجراء هي جملة الاسناد ولقد بدأناها بأمر الاسناد المعروف Set ثم وضعنا القيمة التي سنسند فيها و هيDb التي عرّفناها و قلنا سنسند فيها القاعدة الاصلية لكي لاتتغير قيمها اثناء المعالجة المؤقتة ثم كتبنا كلمة DBEngine و هي عبارة عن نوع قاعدة البيانات التي ستستخدمها و هذا هو محرك قاعدة البيانات من نوع Access ، بعد ذلك و ضعنا الامر الذي سيقوم بفتح قاعدة البيانات لكي تستطيع الوصول الى محتواها Opendatabase ، بعد ذلك وضعنا مسار قاعدة البيانات و لكي تتجنب مشكلة تغير المسار من جهاز لاخرنستخدم الدالة App.path اي مسار المحلد الذي يحتوي البرنامج و لاستخدام هذه الطريقة يجب ان تكون قاعدة البيانات في نفس مجلد البرنامج، ثم كتبنا اسم القاعدة و امتدادها



السطر الثانى :وضعنا جملة الربط للجدول و بدأنا بأمر الاسناد المعروف Set ثم اسم القيمة التي سنسند قيم الجدول فيها و هي التي عرفناها فيما قبل باسم Rs بعد ذلك نكتب اسم القاعدة المستعار الذي اسندنا القاعدة الاصلية فيه و هوDb ثم نكتب الامر الذي سيفتح لنا الجدول لكي نستطيع الوصول الى محتواه و هو Openrecordset بعد ذلك نكتب اسم الجدول الحقيقي بين علامتي تنصيص و نكتب نوع الرط وهو dbopentable ويمكنك التعبير عنه برقم (1)استخدم هذه الطريقة فقط و لا تسأل لماذا لانها من الاوامر الثابته و من انواع الربط و ستستطيع التفريق بين انواع الربط في المستقبل مع كثرة التمارين فلا تستعجل ، هكذا تكون قد قمت بربط قاعدة البيانات و الجدول بواسطة الكود ،،،، مبروك



ثانيا : أظهار البيانات الموجودة فى قاعدة البيانات



الان سنتعرف على كيفية اظهار بيانات قاعدة البيانات للمستخدم ...ولفعل ذلك سنقوم بعمل أجراء و ذلك من خلال الكود التالى :

الكود:
 



If Rs.RecordCount < 1 Then Exit Sub
Text1.Text = Rs!ID
Text2.Text = Rs!Name
Text3.Text = Rs!TEL
Text4.Text = Rs!ADRS



الان دعنا نلقي نظرة على اجراء اظهار البيانات بدأنا اولا بالتأكد اذا كان الجدول يحتوي على بيانات ام لا فإذا كان لا يحتوي فنخرج من الاجراء لكي لا يحدث مشاكل اثناء العرض



بعد ذلك نقوم بإظهار قيمة ما في الحقول في مربعات النص ، و لاحظ أننا استخدمنا علامة التعجب ! لكي تفصل بين اسم الجدول المستعار و اسم الحقل ، يجب أن تفرق بين اسم الدول او القاعدة المستعار و الاصلي و متى نستخدم كل منهما
و الان يجب أن نضيف امر استدعاء لإجراء العرض عند تحميل البرنامج فسيكون الامر في حدث التحميل هكذا :

الكود:
 



Private Sub Form_Load()
Set Db = DBEngine.OpenDatabase(App.Path & "\g1.mdb")
Set Rs = Db.OpenRecordset("T1", 1)
Call showdata
End Sub



ثالثا : العمليات الرئسية على سجلات قاعدة البيانات



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


1_3 : أوامر الاضافة و التعديل و الحذف :


  • أضافة سجل جديد
    الكود:
    Rs.AddNew
    Text1.Text = ""
    Text2.Text = ""
    Text3.Text = ""
    Text4.Text = ""
     

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


  • تعديل السجل الحالى ...
    الكود:
    Rs.Edit
  • حفظ البيانات فى قاعدة البيانات
    الكود:
    Rs!ID = Text1.Text
     Rs!Name = Text2.Text
     Rs!TEL = Text3.Text
     Rs!ADRS = Text4.Text
     
     Rs.Update

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




  • حذف سجل ...

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


Rs.Delete
 Rs.MoveNext
 If Rs.EOF Then Rs.MoveLast




2_3 : أوامر التنقل بين السجلات


  • الانتقال للسجل الاول ...
    الكود:
     Rs.MoveFirst
    Call showdata
  • الانتقال للسجل الاخير ...
    الكود:
    Rs.MoveLast
    Call showdata
  • الانتقال للسجل التالى ...
    الكود:
    Rs.MoveNext
    Call showdata
  • الانتقال للسجل السابق ...
    الكود:
     Rs.MovePrevious
    Call showdata

هذه كل اوامر التنقل التي تحتاجها ، لكن لم ننتهي بعد فستواجهك مشكلة ، فمثلا عندما تريد أن تنتقل للسجل التالي و انت في السجل الاخير طبعا لا يوجد سجل تالي لذلك سيتوقف البرنامج ، و نفس الشيء عند الانتقال للسجل السابق و انت في السجل الاول فلا يوجد سجل سابق فسيتوقف البرنامج ، لذلك سنقوم بإضافة جملة شرطية للتأكد اذا كان السجل الأخير او الاول حسب الحاله ثم نقوم بوضع امر Movefirst او movelast حيث ان هذين الامرين لا يتأثران سواء كان هناك سجل او لا و طريقة استخدامهم هكذا :

ملاحظة

نستخدم الدالة EOF لمعرفة اخر سجل في الجدول ، و نستخدم الدالة BOF لمعرفة اول سجل في الجدول


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

If Rs.EOF Then Rs.MoveLast




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

If Rs.BOF Then Rs.MoveFirst




لذلك سنضيف الجملتين السابقتين لكود الانتقال للتالي و الانتقال للسابق فييصبح كود الانتقال للتالي هكذا :

Private Sub cmd6_Click()
Rs.MoveNext
If Rs.EOF Then Rs.MoveLast
Call showdata
End Sub





وكود الانتقال للسابق هكذا :

Private Sub cmd7_Click()
Rs.MovePrevious
If Rs.BOF Then Rs.MoveFirst
Call showdata
End Sub

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 1108
النقاط : 202034
التقيم : 144
الدولة : مصر
الجنس : ذكر

https://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة  Microsoft  DAO 3.6 object Library Empty رد: الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة Microsoft DAO 3.6 object Library

مُساهمة من طرف eng_saba الأربعاء أكتوبر 03, 2012 6:52 pm

ما شاء الله وبارك الله فيكم
eng_saba
eng_saba
.
.

تاريخ التسجيل : 02/10/2012
المساهمات : 2
النقاط : 2
التقيم : 0
الدولة : العراق
الجنس : انثى

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة  Microsoft  DAO 3.6 object Library Empty رد: الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة Microsoft DAO 3.6 object Library

مُساهمة من طرف مدونة وليدوف التطويرية الثلاثاء ديسمبر 10, 2013 10:52 am


الصور غير صالحة ....اتمنى ان يتم تلقيح الدرس بصور جديدة ؟
مدونة وليدوف التطويرية
مدونة وليدوف التطويرية
...
...

تاريخ التسجيل : 22/11/2011
المساهمات : 32
النقاط : 48
التقيم : 4
الدولة : مصر
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة  Microsoft  DAO 3.6 object Library Empty رد: الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة Microsoft DAO 3.6 object Library

مُساهمة من طرف tonde الأربعاء ديسمبر 11, 2013 6:49 am

تسلم ايديك اخى اقسم بالله انت افدتنى لابعد حد جزاك الله عنى وعن كل الشباب الف خير
tonde
tonde
.
.

تاريخ التسجيل : 10/12/2013
المساهمات : 4
النقاط : 4
التقيم : 0
الدولة : السودان
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة  Microsoft  DAO 3.6 object Library Empty رد: الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة Microsoft DAO 3.6 object Library

مُساهمة من طرف tonde الأربعاء ديسمبر 11, 2013 6:50 am

انا مبتدئى اخى واتمنى تفيدنا بدروسك ومساهماتك
tonde
tonde
.
.

تاريخ التسجيل : 10/12/2013
المساهمات : 4
النقاط : 4
التقيم : 0
الدولة : السودان
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة  Microsoft  DAO 3.6 object Library Empty رد: الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة Microsoft DAO 3.6 object Library

مُساهمة من طرف salamfaraj2002 الأحد أغسطس 16, 2015 3:56 am

شكرا اخي
هل تسمح لي بتوضيح اللبس اللي عندي
انا متابعك درس وراء الثاني ولكني هنا فهمت ان اسم الجدول بالاكسس customer
ولكن عند ربطه بقاعدة البيانات بطريقة مكتبة DAO ارى انه ربط باسم |T1
هل يمكن  توضيح ذلك ... مع فائق احترامي وتقديري لمجهودكم العظيم
salamfaraj2002
salamfaraj2002
....
....

تاريخ التسجيل : 18/04/2015
المساهمات : 57
النقاط : 75
التقيم : 0
الدولة : ليبيا
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة  Microsoft  DAO 3.6 object Library Empty رد: الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة Microsoft DAO 3.6 object Library

مُساهمة من طرف salamfaraj2002 الأحد أغسطس 16, 2015 4:16 am

عذرا ... ولكن من شدة متابعتي  لاحظت تغيير في رقم العميل 
ففي المثال نرمز له no
وفي الكود لاحظته ID
فقط من باب استفادتي من دروسكم اخي احمد المناع، جزاكم الله خيرا
salamfaraj2002
salamfaraj2002
....
....

تاريخ التسجيل : 18/04/2015
المساهمات : 57
النقاط : 75
التقيم : 0
الدولة : ليبيا
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة  Microsoft  DAO 3.6 object Library Empty رد: الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة Microsoft DAO 3.6 object Library

مُساهمة من طرف salamfaraj2002 الأحد أغسطس 16, 2015 8:54 am

أما ان الدرس صعب
أو ان البرنامج السابق به اخطاء
salamfaraj2002
salamfaraj2002
....
....

تاريخ التسجيل : 18/04/2015
المساهمات : 57
النقاط : 75
التقيم : 0
الدولة : ليبيا
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة  Microsoft  DAO 3.6 object Library Empty رد: الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة Microsoft DAO 3.6 object Library

مُساهمة من طرف salamfaraj2002 الجمعة ديسمبر 04, 2015 4:40 am

وأخيرا اكتشفت الخطأ 
وقمت بإصلاحه والحمد لله

أخي أحمد مناع : أشكرك على هذه الدروس القيمة 
كنت اتمنى لو وضعت كود لعدد السجلات
شكرا وفي انتظارك
salamfaraj2002
salamfaraj2002
....
....

تاريخ التسجيل : 18/04/2015
المساهمات : 57
النقاط : 75
التقيم : 0
الدولة : ليبيا
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة  Microsoft  DAO 3.6 object Library Empty رد: الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة Microsoft DAO 3.6 object Library

مُساهمة من طرف salamfaraj2002 الجمعة ديسمبر 04, 2015 6:55 am

عذرا على المداخلة من جديد
لا أعرف كيف ارفق مشروعي
إني بحاجة الى كود حفظ combo box الذي وكذلك list box
باستخدام المكتبة Dao
Thanks
salamfaraj2002
salamfaraj2002
....
....

تاريخ التسجيل : 18/04/2015
المساهمات : 57
النقاط : 75
التقيم : 0
الدولة : ليبيا
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة  Microsoft  DAO 3.6 object Library Empty رد: الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة Microsoft DAO 3.6 object Library

مُساهمة من طرف salamfaraj2002 الجمعة ديسمبر 04, 2015 6:56 am

وكذلك أريد نقل بيانات سجل موطف إلى فورم اخر / كيف؟
salamfaraj2002
salamfaraj2002
....
....

تاريخ التسجيل : 18/04/2015
المساهمات : 57
النقاط : 75
التقيم : 0
الدولة : ليبيا
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة  Microsoft  DAO 3.6 object Library Empty رد: الدرس التاسع عشر ...قواعد البيانات / الجزء الثالث :ربط قاعدة بيانات أكسس بأستخدام مكتبة Microsoft DAO 3.6 object Library

مُساهمة من طرف Ahmad Mohasseb السبت يناير 29, 2022 2:06 am

شرح رائع ومبسط جدا 
سلمت يداك
Ahmad Mohasseb
Ahmad Mohasseb
.
.

تاريخ التسجيل : 29/01/2022
المساهمات : 2
النقاط : 2
التقيم : 0
الدولة : مصر
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى