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

أي دعاية لموقع أو ايميل سيعرض صاحبه للتوقيف
إضافة على المسنجر للذين يواجهون صعوبة في التسجيل أو الدخول للمنتدى
msn : support@rehabmaroc.com

إضافة رد


قديم 06-24-2010, 07:17 PM   #31


موقوف

 
تاريخ التسجيل: May 2009
المشاركات: 2,959
افتراضي

أن إستحداث حقل اسمه SonItemNum طبعا خطأ لأن هذا لا يتبع قانون كيفية ربط علاقة (متعدد إلى متعدد).

طبعا مشكلتنا الان هي عدم القدرة على شراء صنف رقم 91 وهو المسطرة من نفس الطفل صاحب الرقم 120 مثلا. وهذا هو أجمل ما في العلاقة (متعدد إلى متعدد) والتي تتيح إنشاء جدول على شكل جسر أو تقاطع من خلال جدول جديد اسمه جدول التقاطع Junction Table، بعبارة أخرى لدينا جدول جديد نستطيع أن نفعل فيه ما نشاء.

مرة أخرى (من قال أن جدول التقاطع يقتصر على الحقلين الغريبين فقط) ؟؟؟؟!!!!

قانون: عند تشابه القيم والخصائص تتحول العملية برمتها إلى (مجرد عد) فقط.

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

أضف الحقل التالي إلى جدول التقاطع SonsItems:
Qty رقم
إحفظ الجدول

ما الذي حدث الآن... عند شراء أي طفل لأي صنف نضع كمية الشراء

قم بإضافة السجلات التالية إلى جدول التقاطع SonsItems:
110 90 3
110 91 2
110 92 7
110 95 5
110 99 9
120 93 6
120 99 2
130 90 2
130 94 2
130 97 4
170 92 12
حيث يمثل العمود الأخير الكمية المشتراة من كل صنف. إحفظ الجدول.

-------------

أين نحن الآن؟ وماذا إستفدنا حتى تاريخه؟

كل الموضوع يتعلق بتماسك وتكامل قواعد البيانات
النماذج والتقارير والمايكروز في الآكسس هي للعبث وإضاعة الوقت حتى لغة البرمجة المرتبطة فيها والتي تسمى VBA أو Access Code هي مجرد عبث وهي لغة مشوه جدا من لغة البرمجة VB
أن برامج قواعد البيانات المتقدمة (المعتمدة على خادم) Server مثل Oracle و MS SQL ليس فيها لا نماذج ولا تقارير ولا مايكروز ولا بهارات...!!!!

ان التماسك والتكامل يخضع إلى قوانين محكمة تساعد في إنشاء Skeleton او الهيكل العظمي او الخرساني لقاعدة البيانات بشكل صحيح.

أن عملية ربط الجداول (ليست نزهة) تتم في دقائق. والغريب أن معظم من قابلتهم في حياتي المهنية يصرفون 10% من وقتهم على بناء الجداول والإستعلامات و90% لألوان النماذج والتقارير وتحريكها وترقيصها وتدليعها وتسطيرها --- غريب !!

لقواعد بيانات من الوزن الثقيل والتي يمكن أن تباع في السوق يجب أن يحدث العكس 90% لتصميم الجداول والإستعلامات و10% للباقي من الزبرقة والبهارات والنماذج وغيره.

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

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



إن تصميم الجداول وربطها عملية في غاية التعقيد وقد عملت أكثر من تجربة في المحاضرات التي ألقيتها لأرى أن كل مجموعة تقوم بتصميم قاعدة البيانات بطريقة مختلفة وكلها صحيحة ولكن الفروق تكمن في سهولة حل عن آخر، وكلمة سهولة تعني سهولة في إدخال البيانات سهولة في إعادة فك وتركيب قاعدة البيانات سهولة في صيانة قاعدة البيانات وسجلاتها وحقولها.

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



كان الهدف هو الحصول على المبلغ الذي دفعه كل أب مقابل مشتريات إبنه ولأن جدول الأصناف فيه ItemCost كان بالضرورة وجود حقل يوضح الكمية Qty لضرب الكميتين والحصول على تكلفة الشراء.

صحيح أننا قمنا بعمل بعض الإستعلامات دون شرحها وهذا ما سنفعله الآن.

ماذا سنفعل؟

سنترك الجداول والروابط ونعود إليها فيما بعد... متى؟ بعد أن نتحدث على واحدة من أقدم لغات البرمجة في العالم... وهي لغة SQL.
الراسي غير متواجد حالياً   رد مع اقتباس

قديم 06-24-2010, 07:35 PM   #32


موقوف

 
تاريخ التسجيل: May 2009
المشاركات: 2,959
افتراضي

لنتفق قبل البداية،،،

SQL تعني Structured Query Language وهي لغة برمجة قواعد البيانات ولا علاقة لها ببرنامج شركة ميكروسوف Microsoft SQL Server هي مجرد لقافة من شركة ميكروسوفت لإستعارة الإسم.

إذا:
SQL هي لغة برمجة
MS SQL Server هو خادم متقدم لقواعد البيانات صمم من شركة إسمها ميكروسوفت وMS إختصار للكلمة Microsoft.

إتفقنا؟

لن أضيع وقتكم الثمين في تاريخ هذه اللغة وأين ولدت ومن أبوهما ومن هي عمتها، حيث يعج الإنترنت بهذه المعلومات ويمكنكم البحث عنها بسهولة وقرائتها وأنا أنصح بذلك متى تشاؤون.

دعك من حرف S وأرمي حرف L في سلة المهملات وركز كل التركيز على الحرف Q حيث أنه هو المفتاح السحري للعملية كلها.

Q = Query

Query تعني إستعلام إستفسار إستفهام إستنباط إستنبطاااح ---- وصلت الفكرة؟؟؟

السؤال البديهي والتقليدي هو ما الفرق بين الجدول والإستعلام؟

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

لا تمزح مع الجدول... الجدول لا يقبل المزاح ولا العبث ويغلب عليه التماسك والشدة والعبوس والتجهم.

الإستعلام (ولد صايع) على رأي الأخوة في مصر ... حبوب، لذيذ، يحب المزاح، سهل التعامل معه، يقبل كل أنواع المزاح والعبث ولكن إذا مزحت معه من (اليمين)، إذا مزحت معه من (اليسار) --- نسف قاعدة البيانات من جذورها. هل سمعت بمثل إتق شر الحليم اذا غضب --- هذا هو الإستعلام !!!

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

الجدول هو الإستعلام، والإستعلام هو الجدول !! مع مرونة عالية جدا جدا جدا في كيفية تشكيل الإستعلام.

SQL هي لغة تستخدم علم (المصفوفات) من الرياضيات للوصول إلى الحلول --- ولا يهمك حقيقة ماذا تستخدم ولكن للعلم بالشىء فقط لمحبي هذا العلم الرائع المسمى المصفوفات Matrices ومفردها مصفوفة Matrix.

الغريب في SQL أنها عميقة الجذور وفي غاية التعقيد الشديد جدا، ولكن الممتع في الموضوع أن كامل اللغة بكل أبعادها تتكون من أقل من 10 أوامر -- صدق أولا تصدق أو حتى أقل من 5 أوامر على ما أذكر !!!

قلنا أن SQL تمزح من الجهة اليمين --- وتغضب من الجهة اليسار، ما معنى هذا؟

هناك إستخدامين إثنين فقط للغة SQL واحد أسميه مزاح من اليمين والآخر مزاح من اليسار:

الإستخدام الأول (مزاح من اليمين): هو الحصول على البيانات بأي شكل وبأي كيفية
الإستخدام الثاني (مزاح من اليسار) : هو تحديث Skeleton او الهيكل الخرساني لقاعدة البيانات أي تغيير وتعديل الجداول والحقول والروابط ---- اااووو خطير جدا !!!

الآكسس (بغبائه) وليتبع قوانين شركة ميكروسوفت في وجود برامج سهلة تشعر مستخدميها بسهولة قواعد البيانات وضعت لك برامج صغيرة داخل الآكسس تساعدك على إنشاء الجداول، ووضعت صفحة تساعد على إنشاء العلاقات، ووضعت صفحة سهلة تساعدك على إنشاء الإستعلامات وهكذا ....

هذه البرامج الصغيره (في الحقيقة) مجرد واجهة بينك وبين SQL، الذي يقوم بالعمل كله من ألفه إلى يائه هو SQL

أشهر أوامر SQL هو الإمر (إختر) أو إنتقي SELECT
يحتاج شرح هذا الأمر عدة أيام وعدة محاضرات ولكنني سأضعك على الطريق الصحيح للتعلم ثم تنطلق أنت.

تركيب جملة SELECT يتكون من عشرات الأوامر الفرعية وأسهل شكل لها هو:

كلمة Select
بعدها فراغ أو مسافة
بعدها إسماء الحقول مع وجود فاصلة بعد كل إسم حقل
بعدها فراغ
بعدها كلمة From
بعدها إسم الجدول

تعال نأخذ مثالا وهو يوضح أيضا آلية عمل الآكسس..

إفتح إستعلام جديد في قاعدة بيانات Family
ستظهر لك نافذة تسألك عن الجداول التي تريد أن تستخدمها في الإستعلام

إضغط إغلاق Close بدون إختيار أي جدول...

الصفحة الآن بدون جداول...

من القائمة الرئيسية إختر (عرض) View ثم (عرض SQL) --- ماذا ترى؟
ترى جملة واحدة فقط وهي SELECT

إكتب الجملة التالية في السطر الأول
Select FatherName From Fathers

نفذ الإستعلام --- ماذا حدث؟؟

ليس هذا فقط،، بل من قائمة (عرض) View إختر (عرض التصميم) Design View،،، مممممممم...

ماذا ترى؟؟؟

مرحبا بك في عالم ال Select
الراسي غير متواجد حالياً   رد مع اقتباس

قديم 06-25-2010, 06:44 AM   #33


موقوف

 
تاريخ التسجيل: May 2009
المشاركات: 2,959
افتراضي



قلنا أن الأكسس ومثله MS SQL يساعدانك على إنشاء الجداول والإستعلامات من خلال برامج صغيرة --- نعم ركز --- فقط يساعدنك ولكن إنتبه مجرد مساعدة وليس حل كامل متكامل!!!

ماذا يعني هذا؟

يعني أنك لن تستطيع الفرار من SQL ولن تستطيع الهروب من تعلمها إلا إذا أردت أن تصمم قاعدة بيانات مبسطة لإستخدامك الشخصي.

إذا أرت أن تبيع قواعد بيانات
إذا أردت أن تكون ضمن فريق عمل لتصميم قواعد البيانات
إذا أردت أن تقبض نقود وتبيع للسوق
إذا أردت أن تكون محترفا

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

الجملة:
Select FatherName From Fathers

تخضع للتركيب Syntax الذي شرحناه.

كلمة Select
ثم فراغ
ثم أسم حقل واحد
ثم فراغ
ثم كلمة From
ثم فراغ
ثم إسم الجدول

ماذا إذا كنت أريد أكثر من حقل --- بسيطة بين الحقول ضع فاصلة مثل
Select FatherName, FatherNum From Fathers

مستر Codd يصر على تيمييز الحقول ويقول لنا حتى لا تتورطو فيما بعد في مشاكل كبيرة وكثيرة (قوموا بتمييز الحقول عن بعضها البعض) --- ماذا يعني هذا؟

إفترض أن لديك جدولين مختلفين وفي كل جدول منهما يوجد حقل إسمه FatherName هذا يخلق واحدة من أخطر مشاكل قواعد البيانات والذي يسمى Ambiguity ويعني الإلتباس والغموض. حيث لن تفهم SQL من أي جدول تريد بيانات الحقل FatherName

لتصحيح ما سبق ولتمييز الحقول نستخدم إسم الجدول قبل إسم الحقل وبالطبع يستحيل أن يكون هناك جدولان بنفس الإسم في نفس قاعدة البيانات --- لنصحح ونتبع شروط مستر Codd

Select Fathers.FatherName From Fathers
Select Fathers.FatherName, Fathers.FatherNum From Fathers

وضعنا إسم الجدول قبل كل حقل وبينهما نقطة.

إعكس الموضوع في الآكسس أو MS SQL قم بإنشاء إستعلام بالطريقة التقليدية، غفتح إستعلام جديد، نقر مزودج على جدول Fathers، إغلاق ثم نقر مزدوج على كل من الحقلين FatherName ثم FathersNum

قم بإستعراض جملة SQL من قائمة عرض View
سترى نفس الجملة السابقة --- طبعا دعك من الفاصلة المنقوطة في نهاية الجملة --- لا قيمة لها الآن

ماذا يعني هذا كله؟

يعني أننا نستطيع إستغلال طريقة الآكسس وكذلك MS SQL في إجراء الكثير من التجارب ومن ثم الإطلاع على جملة SQL وكيفية تركيبها

نترك قواعد البيانات كلها.

في علم البرمجة ثلاثة أنواع من العمليات:

Arithmetical Operations أو العمليات الحسابية وهي عمليات الضرب والقسمة والجمع والطرح والأسس والوغاريثمات والجذور والمثلثات والفراغية والجبر و..ز إلخ

Comparison Operators أو عمليات المقارنة مثل المساواة وعدم المساواة وأكبر من وأصغر من و...إلخ

Logical Operations أو العمليات المنطقية وهي "و" "أو" "لآ" AND, OR, NOT ... إلخ

نعود إلى قواعد البيانات وهي تستخدم كل ما سبق من العمليات.

طبق المثال التالي...
من خلال إستعلام أظهر كل الأباء من جدول الأباء وكل الأبناء من جدول الأبناء -- قمنا بهذا سابقا ولكن الآن أريد أن تشاهد جملة Select

SELECT Fathers.FatherNum, Fathers.FatherName, Sons.SonNum, Sons.SonName FROM Fathers INNER JOIN Sons ON Fathers.FatherNum = Sons.FatherNum

كل ما أريده منك هو التركيز على الجملة (Inner Join) من يتذكر --- من يكتب معنا، طبق النوعين الآخرين وشاهد تركيبة الجملة Right Join وكذلك Left Join

تذكر إنني أحاول أن أضعك على الطريق الصحيح ولا أحاول قطعا تدريس SQL والتي تحتاج إلى الكثير من الوقت والتمارين والتجارب والشرح المباشر.

جملة ORDER BY هي الجملة التي تساعد على ترتيب نتائج الإستعلام

إفتح نافذة استعلام جديد في وضع SQL واكتب الجملة التالية

Select FatherNum From Fathers Order By FatherNum

ماذا تعني؟؟

أظهر كافة بيانات الحقل FatherName من ترتيب أو فهرسة أو فرز (سمه ما شئت) تصاعدي من الأصغر إلى الأكبر ... عد إلى (عرض التصميم) وشاهد كيف تم إنشاء الإستعلام بالطريقة التقليدية.

كيف نستعرض السابق تنازليا

Select FatherNum From Fathers Order By FatherNum DESC

إنظر إلى الكلمة في النهاية Desc وهي إختصار ل Descending أي تنازلي -- طبق وجرب وشاهد وأكتب ملاحظاتك.

ماذا لو أردنا كافة الآباء الذين رقمهم أكبر من 5000؟

نستخدم خاصية الشرط WHERE أي عندما !!! ترجمها كيف تشاء !!

Select FatherNum From Fathers WHERE FatherNum>5000

لاحظ إستخدم أحد (عمليات المقارنة) -- نفذ --- طبق --- شاهد--- فكر --- أكتب --- لخص وإلا لن تفهم شيئا...

طبعا ستجد خطأ في الجملة السابقة ... لماذا؟ لأن رقم الأب (نص) **** و5000 رقم، نستخدم الدوال -- وهي جزء من قواعد البيانات في الآكسس أسمها VAL أي Value أو قيمة، في MS SQL نستخدم Cast أي التحويل.

صحح...
Select FatherNum From Fathers WHERE VAL(FatherNum>5000

ماذا لو أردنا أن نغير عنوان الحقل FatherName لأنه باللغة الإنجليزية ونحن نريده بالعربية

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

Select
FatherName
As
[إسم الأب]
From
Fathers
ASC

ASC إختصار Ascending أي ترتيب أسماء الآباء من الألف إلى الياء.

أريدك عزيزي القارىء أن تصرف وقتا لا يقل عن أسبوعين (فيما بعد طبعا) على ممارسة جملة SQL

كل ما فعلنا حتى الآن هو المزاح الذي يتقبله SQL منا دون المساس بتكامل وتماسك قاعدة البيانات.

النوع الثاني من المزاح ينقسم إلى شقين:

الأول: تعديل في البيانات داخل الجداول (في السجلات) -- وينبغي الحذر
الثاني: تعديل في الجداول والحقول والروابط بينها --- وهو الخطير -- وينبغي الحذر الشديد جدا

تعدل بيانات الجداول يتم من خلال:
إضافة سجلات جديدة
تعديل سجلات موجودة
حذف سجلات موجودة

تعالوا نستمتع بلغة SQL ونضيف سجلين جديدين لجدول الآباء نستخدم الأمر Insert أي أدخل ولا تنسى عزيزي القارىء نحن نتحدث عن SQL وهي نفسها بالظبط (تقريبا) في كافة برامج قواعد البيانات مثل الآكسس وMS SQL و Oracle وSysbase وغيرها.

يا جماعة -- يا أصحاب الموقع --- لدي مشكلة في التحول بين العربي والإنجليزي -- عموما أنا غشيم في طرق المنتديات سأحاول

Insert Into Fathers Values
)
1500
,
"سعيد خالد القرني"
,
39
(

نفذ الإسنعلام وتأكد من جدول الآباء أن الأب 1500 قد تم إضافته

ومعناها أدخل السجل التالي بالقيم الموجودة بين القوسين حسب ترتيب الحقول في الجدول...

تعال شاهد معي ضعف البرنامج المساعد في عملية إنشاء الإستعلامات،، إذا حاولت الآن إستعراض كيفية صنع هذا الإستعلام بالضغط على (عرض التصميم) لن تستطيع،،، لن يساعد الآكسس --- أنت الآن محترف !!!

تعالو نعديل عمر الأب 1500 من 39 سنة إلى 36 سنة بإستخدام لغة SQL
Update Fathers SET FatherAge = 36 WHERE VAL(FatherNum)=1500

نفذ الإستعلام وقم بالتأكد من أنه تم تعديل عمر الأب 1500 من جدول الآباء

تعال بنا نحذف الأب 1500
Delete From Fathers WHERE VAL(FatherNum)=1500

نفذ وتأكد...

واجب منزلي...

بإستخدام لغة SQL

أظهر بيانات الأباء الذين أرقامهم أقل أو تساوي 4000
أظهر بيانات الآبناء الذين أعمارهم اقل من 5 سنوات
أظهر بيانات الأصناف التي تكلفتها تقل عى 5 ريالات
إسأل نفسك خمسة أسئلة أخرى على الأقل ثم حلها بإستخدام لغة SQL
الراسي غير متواجد حالياً   رد مع اقتباس

قديم 06-25-2010, 07:04 AM   #34


موقوف

 
تاريخ التسجيل: May 2009
المشاركات: 2,959
افتراضي

نستكمل...


قاعدة أخرى من قواعد السيد Codd وتنص على أنه يمنع وضع أي عمليات حسابية في الجداول.

مرة أخرى --- لا يمكن مثلا في الجداول أن تضع تاريخ ميلاد الإبن ثم تضيف حقلا للعمر تقوم من خلال البرمجة بطرح تاريخ الولادة من التاريخ الحالي وثم التحويل للحصول على عمر الطفل.

عندما يقول Codd ممنوع فهو يقصد أنك تستطيع عمل هذا ولكنك لن تحصل على قاعدة بيانات متكاملة ومتماسكة.

كافة العمليات الحسابية تتم في الإستعلامات...

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

تعالو نرى كيف يتم هذا...

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

من جدول الآباء:
FatherNum
FatherName

من حدول الأبناء:
SonNum
SonName

نفذ هذا اٌستعلام --- ما هي النتيجة؟ من يقول لي ماذا تعني هذه النتيجة؟؟؟

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

لحساب كل ركز (كل) عملية شراء نضرب ItemCost في الكمية المشتراه Qty

في (عرض التصميم) للإستعلامات ستلاحظ أن السطر الأول هو Field أي الحقل ونحن ليس لدينا حقل نحن لدينا عملية حسابية

في عمود فارغ اكتب:
Qty*ItemsCost

لاحظ كيف يعدل الأكسس ...
نفذ الإستعلام،،، ماذا تعني نتيجة هذا الإستعلام؟؟؟ لن يجيب على هذه الأسئلة إلا الذين لديهم كل ما عملناه على ورق !!!

من قائمة (عرض) View إختر مجاميع Totals
ماذا تلاحظ ؟ نعم أتت خدمة جديدة (سطر جديد) عنوانه (إجمالي) وتحت كل حقل ظهرت جملة (تجميع حسب) Group By --- والمجاميع هي خاصية من أوامر لغة SQL وليس آكسس.

جملة Group By تحت FtherName تعني قم (ما اسطتعت) بتجميع الأباء المتشابهين أي لا تظهر الأب أكثر من مرة.

ولكن هناك Group BY او (تجميع حسب) تحت أسم الأب ورقم الإبن وإسم الإبن. وكذلك الحقل الحسابي..

بالمناسبة العملية الحسابية هي حقل ويسمى Calcualted Field أو الحقل الحسابي ومن هذا المنطلق لا نستخدم العمليات الحسابية في الجداول بل في الإستعلامات.

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

مرة أخرى...
نريد رقم الأب، إسم الأب، رقم الطفل، إسم الطفل، إجمالي تكلفة مشترياته...

أعلم أن العملية صعبة شرحا بالكتابة،
لنحاول وأنا تحت ضغط الوقت... حيث ما زال هناك الكثير لنتحدث عنه.

لنكمل الإستعلام ثم نعود مرة أخرى ونحاول الشرح بشكل أكثر تفصيلاً لأهمية هذا الدرس

إذا حاولت أن تقوم بالعملية (يدويا) فستلاحظ أنك ستضطر إلى إجراء عمليات حسابية جانبية لبعض الآباء --- لماذا؟ لأن (مثال) الطفل رقم 110 ملقوف قام بإجراء أكثر من عملية شراء لأصناف مختلفة --- صح؟

السؤال (ركــــــــــــــــــــــــــــز) إذا ضربنا الكمية في سعر الصنف نحصل على ... ماذا؟

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

الطفل الملقوف 110

قام بشراء 3 محايات بسعر المحاية 2 درهم الإجمالي 6 دراهم
قام بشراء 2 مسطرة بسعر المسطرة 4 دراهم الإجمالي 8 دراهم
قام بشراء 7 أقلام رصاص بسعر القلم 1 درهم الإجمالي 7 دراهم
قام بشراء 5 سبورات --- كمل للوصول للإجمالي
قام بشراء 9 دفاتر --- كمل للوصول للإجمالي

ولكن لحظة ............... توقف ---- ليس هذا هو المطلوب .....

المطلوب هو ما دفعه الأب ... أي اب الطفل 110 !!! ما هو؟ طبعا ليس عمليات الشراء الخمس بل هو ناتج مجموع العمليات الخمس كلها هو ما دفعه الأب لقاء مشتريات إبنه 110

أي هي ناتج جمع 6 و 8 و 7 و ... و...

لأن الحقل الحسابي الذي صنعناه هو عملية حسابية أريدك أن تختار من القائمة وتستبدل (تجميع حسب) ب Expression أي ناتج عملية حسابية.

إذا قمت بتنفيذ الإستعلام الآن ستحصل على خطأ لأن الآكسس وال MS SQL لن يستطيعوا عمل (تجميع) Group By للعمليات بدون إستخدام قانون آخر للسيد Codd وهو

Aggregate Functions اي دوال التجميع او دوال الاحصاء



الراسي غير متواجد حالياً   رد مع اقتباس

قديم 06-25-2010, 07:09 AM   #35


موقوف

 
تاريخ التسجيل: May 2009
المشاركات: 2,959
افتراضي

Aggregate Functions

لا تنس أن هذه الدوال خاصة بلغة SQL ولا علاقة لها بالآكسس ... من يقول لي ماذا يعني هذا؟ وما أهميته؟

كل المعادلات الحسابية موجودة في هذه الدوال ومن أشهرها...
ِAVG --- وهي المتوسط الحسابي وفي الرياضيات هو مجموع الأقيام مقسوما على عددها Average

Count --- وهو العدد أي عدد السجلات في جدول ما --- او عدد الأطفال الإناث مثلا

Max --- أكبر قيمة Maximum
Min --- أقل قيمة Minimum
Sum --- المجموع Summation
StdEv --- أي الإنحراف المعياري Standard Deviation الخاص بالإحصاء
وهكذا....

لحل الإستعلام الذي وقفنا عنده:
نضع الحقول الأربعة التالية في الإستعلام ونختار من قائمة عرض (مجاميع) Totals
FatherNum من جدول الآباء
FatherName من جدول الأباء
SonNum من جدول الأبناء
SonName من جدول الأبناء

كل الحقول السابقة --- نختار لها Group By أو تجميع حسب

ثم نضيف الحقل الحسابي التالي في العمود الخامس ونختار له Expression للكناية عن عملية حسابية
sum(Qty*ItemCost)
صححوا الأقواس

لاحظ أن إستخدام دالة Sum --- لن أجيب --- من يقول لماذا تم إستخدام دالة Sum؟ ما الفائدة منها؟

نفذ الإستعلام للحصول على ما طلبناه.

نوع آخر من الإستعلامات الهامة جدا ويسمى CrossTab Query وهو عبارة عن جدول وكلمة جدول تعني صفوف وأعمدة وعليه فإن هذا النوع من الإستعلامات فيه ثلاثة حقلين والثالث عملية حسابية، الحقل الأول هو صفوف الجدول، الحقل الثاني هو أعمدة الجدول، أما القيمة في تقاطع كل صف مع عمود.



نفذ الإستعلام التالي:

أضف جدولي الآباء والأبناء ثم إختر من قائمة (استعلام) Query --- إختر (إستعلام جدولي) CrossTab Query

اضف حقل FatherName من جدول الآباء --- الإجمالي (تجميع حسب) وجدولي (عنوان الصف)

اضف حقل SonName من جدول الأبناء--- الإجمالي (تجميع حسب) وجدولي (عنوان العمود)

أضف حقل SonNum من جدول الأبناء --- الإجمالي (Count) وجدولي (القيمة)

نفذ الإستعلام... من يشرح لي هذا الإستعلام الرائع؟؟؟!!!!

لا ينسى أحد منكم (رجاء لا أمراً) ان يصرف وقتا طويلا بل طويلا جدا في ممارسة الإستعلامات --- كل قواعد البيانات بعد تنظيم وإنشاء الجداول تعتمد على قوة ووضوح الإستعلامات.

وقبل الإستمرار في هذه السلسة من الدروس آمل من الجميع حل الواجب التالي لأتأكد أنك هناك من يذاكر ويحاول فعلياً.

في قائمة إستعلام -- (وهي أهم قائمة) يوجد الخيارات التالية:

إستعلام تحديد Select Query --- وقد قمنا بتطبيقه
إستعلام جدولي CrossTab Query --- وقد قمنا بتطبيقه في المثال السابق

إستعلام إنشاء جدول Make-Table Query --- من يشرح لي هذا؟
إستعلام تحديث Update Query --- من يشرح لي هذا؟
إستعلام إلحاق Append Query --- من يشرح لي هذا؟
إستعلام حذف Delete Query --- من يشرح لي هذا؟

خاص ب SQL أي خاص بلغة SQL وفيها ثلاثة أنواع من الإستعلامات:
توحيد Union
تمريري Pass-Through
تعريف بيانات Data Definition

من يشرح لي ماذا يحدث عندما نختار أي من الثلاثة السابقة؟ لماذ يحدث هذا؟
قد يسعفنا الوقت لشرحها بالتفصيل فيما بعد.

انتظر إجابات...
الراسي غير متواجد حالياً   رد مع اقتباس

قديم 06-26-2010, 07:28 AM   #36


موقوف

 
تاريخ التسجيل: May 2009
المشاركات: 2,959
افتراضي


قرر صاحب قاعدة البيانات أن يضيف جدولاً خاص بالزوجات !!!!

لاحظ أن كل أب يمكن أن يكون لديه أكثر من زوجة...كما أن صاحب قاعدة البيانات يريد حقل لجنسية الزوجة.

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

لا تنسوا أن قواعد البيانات تصمم من قبل فريق عمل...
الراسي غير متواجد حالياً   رد مع اقتباس

قديم 06-26-2010, 08:13 AM   #37


موقوف

 
تاريخ التسجيل: May 2009
المشاركات: 2,959
افتراضي


أضف جدول الزوجات Wives بالحقول التالية:
WifeNum نص 2 --- مفتاح أساسي
WifeName نص
WifeAge رقم
WifeNationality --- وهو موضوعنا الآن
FatherNum --- حقل غريب للربط

أضف الحقل التالي في جدول الأبناء:
SonSex --- وهو موضوعنا الآن

نعود للسيد Codd --- ماذا يقول؟ --- أحد القواعد والقوانين العامة ينص على:

تحييد اللغة !!!!!!!!!!

ماذا يعني تحييد اللغة --- يعني وببساطة شديدة عدم الإعتماد على (النصوص) في قاعدة البيانات، لماذا؟؟

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

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

نحمد الله أننا نتعامل مع جدول كله نساء الآن وبالتالي سيكون لدينا:
مغربية
عراقية
قطرية
مصرية
...

ولن يكون لدينا أبدا في هذا الجدول
مغربي
عراقي
قطري
مصري
...

إذا مشكلة التذكير والتأنيث وجمع المذكر المعفوس (عفوا، ترا أنا من أشد العشاق لللغة العربية) ولكنه مجرد مزاح فقط...

إنما لمشكلة ما زالت قائمة حتى مع كون الجدول بكامله يتعلق بنساء، ما هي المشكلة:
مغربية
مغربيه

لاحظ (الهاء) مقارنة مع (التاء المربوطة) --- في علم قواعد البيانات ما سبق جنسيتان مختلفتان... كيف نضمن مدخل البيانات؟ كيف نحل هذه المشكلة؟

إتصال هاتفي مع السيد Codd --- ساعدنا رجاء...

شكرا سيد Codd --- الحل هو بإستخدام الجداول المساعدة Help Tables

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

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

إما إدخال يدوي وتعديل 100 ألف سجل يدوياً وهذا قطعا إنتحار...
أو تصميم إستعلام Update لتحديث بيانات هذا الحقل وتغييره من (مغرربية) إلى (مغربية) ولكن لحظة...

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

اذا، كلا الحلين السابقين ( غير عملي ) وبالتالي لا مفر من إستخدام الجداول المساعدة Help Tables لعزل اللغة وتحيدها والمساهمة من البداية في إنشاء قاعدة بيانات متكاملة ومتماسكة.

إنشأ الجدول المساعد التالي:
NationalityNum نص 2 -- مفتاح رئيسي
Nationality نص

إحفظه بإسم Nationalities
أدخل البيانات التالية في جدول الجنسيات:

ماذا نفعل بعد هذا؟ صح !! نربط جدول الجنسيات بجدول الزوجات ولكن يتطلب الأمر أولا تعديل الحقل WifeNationality في جدول الزوجات.... ليصبح ماذا؟ من يجيب؟

أجب قبل القراءة....

نعدل الحقل WifeNationality إلى NationalityNum على هيئة نص وبطول 2 ليصبح حقلا غريبا.

إربط بين الحقلين NationalityNum بالسحب من جدول Nationalities إلى جدول Wives وضع علامة صح على المربعات الثلاثة... والعلاقة الآن واحد إلى متعدد.

أضف السجلات التالية في جدول الجنسيات:
01 مغربية
02 عراقية
03 قطرية
04 مصرية
05 إماراتية
06 يمنية
07 كويتية
08 عمانية
09 بحرينية
10 سورية

لاحظ أن التهجئة (الإملاء) للجنسيات غير مهم حاليا (تحييد اللغة) لأن الربط يتم مع رقم الجنسية وليس النص وهو الجنسية نفسها.

قم بربط جدول الآباء مع جدول الزوجات --- قطعا لن أشرح كيف تقوم بهذا !!!!!

ثم أضف السجلات التالية إلى جدول الزوجات Wives:
WifeNum WifeName WifeAge NationalityNum FatherNum
80 غادة سعيد آل محمد 42 02 4000
81 منى طلال خالد 22 10 4000
82 سارة خليل الدباغ 36 02 4000
83 مها عبد الرحمن الخليل 19 07 9000
84 سارة سعيد السالم 51 09 6000
88 عفاف محمد اليوسف 39 01 5000

واجب منزلي...

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

إسأل نفسك 100 سؤال وأجب عليها وإستمتع بقواعد البيانات. !!!
الراسي غير متواجد حالياً   رد مع اقتباس

قديم 06-26-2010, 10:42 AM   #38


موقوف

 
تاريخ التسجيل: May 2009
المشاركات: 2,959
افتراضي




وصلنا إلى حقل جنس الطفل وسمى هذا النوع من الحقول (الحقول ثنائية القيمة) أي لا يوجد إلا قيمتين إثنتين فقط:


إنثى

ذكر


وتستطيع عزيزي القارىء أن تطبق نفس الأسلوب الذي إتبعناه في حقل الجنسية في جدول الزوجات من حيث إنشاء جدول للجنس فيه حقلين رقم الجنس ونوعا الجنس وتربط مع جدول لأبناء بحقل غريب هو رقم الجنس. وهذا مجهد لسجلين فقط (لاحظ أن جدول الجنس سيحتوي على سجلين فقط) وبهذا تصبح عملية إنشاء جدول وربطه وما الى ذلك مجهدة نوعا ما (لسجلين فقط) !!!!


في الحقول ثنائية القيمة مثل:

ذكر - أنثى

ليل - نهار

فترة صباحية -- فترة مسائية


أو في حقول النفي والإثبات مثل:

متزوج -- غير متزوج

مدخن -- غير مدخن

عصبي -- غير عصبي

وهكذا...


فإننا نستخدم حقول من نوع Bit في MS SQL أو (نعم/لا) Yes/No في الآكسس.


ولكن الحقل في جدول الأبناء إسمه SonSex مثلا وبهذا تصبح الإجابة بنعم أو لا غير منطقية وعليه جرت العادة إلى تغيير طريقة تسمية الحقل إلى شيء أكثر دقة مثل أن يكون إسم الحقل Female وبهذا يصبح السؤال (انثى؟) وعندها تصبح الإجابة نعم أم لا.


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

Female=no

أي الجنس من غير الإناث.


نترك الآن قاعدة البيانات الخاصة بالعائلة ونقفل الآكسس أو أي برنامج قواعد بيانات آخر.


وعلى الورق فقط (كتابة فقط)

قل لي كيف نربط الجداول في قاعدة البيانات الخاصة بالمستوصف؟؟؟
الراسي غير متواجد حالياً   رد مع اقتباس

قديم 06-26-2010, 10:54 AM   #39


موقوف

 
تاريخ التسجيل: May 2009
المشاركات: 2,959
افتراضي


نعود إلى قاعدة بيانات المستوصف...



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

في جداول قاعدة البيانات الخاصة بالمستوصف لدينا مشكلة -- تعالوا نلخص هذه المشكلة:

بين العيادات والأطباء -- علاقة متعدد إلى متعدد حيث أن كل عيادة يدخلها أكثر من طبيب وكل طبيب يدخل أكثر من عيادة.

بين العيادات والمرضى -- علاقة متعدد إلى متعدد حيث ان كل عيادة يدخلها أكثر من مريض وكل مريض يزور أكثر من عيادة؟

بين الأطباء والمرضى -- علاقة متعدد إلى متعدد حيث أن كل طبيب يعالج أكثر من مريض وكل مريض يعالجه أكثر من طبيب.

بإختصار، العلاقات بين الجداول الثلاثة هي علاقة متعدد إلى متعدد، ماذا يعني هذا؟

يعني (حسب ما تعلمناه) إنشاء ثلاثة جداول على شكل Junction Tables جداول متقاطعة وهذا غير عملي وسيؤدي إلى قاعدة بيانات على شكل (سباجيتي) أي متداخلة بشكل خطير مما سيؤثر على التماسك والتكامل.

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

ما هو الحل إذا؟ -- إتصال دولي سريع مع السيد Codd --- الإجابة هي بإستخدام جداول الحركة Transaction Tables

معظم قواعد البيانات تستخدم جداول الحركة -- تعالو نعود إلى (المنطق) ولننسى قواعد البيانات لدقيقة:

لدينا مستوصف جديد (تم إفتتاحه منذ 5 دقائق) ولدينا جدول على الورق فيه بيانات الأطباء ولدينا جدول آخر على الورق فيه بيانات العيادات --- المستوصف جديد (أي لا يوجد مرضى)

نحن جميعا في قاعة الإستقبال مبتسمين --- ماذا ننتظر ؟؟؟

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

حتى لو دخل مريض (ولا يشكو من علة) فقط للإطلاع على جاهزية المستوصف وقام بفتح ملف (مجاني) لدينا في المستوصف ثم خرج --- ما الذي حصل؟

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

لنفترض أننا حصلنا على 1000 مريض كلهم ليسوا بحاجة إلى أي علاج سوى التأكد من جاهزية المستوصف وقامو بفتح ملفات مجانية لدينا، حتى الآن لا يوجد حركة في المستوصف....

نفس الوضع في حالة كون قاعدة البيانات لمحل شراء وبيع، جدول للأصناف وجدول للعملاء (فارغ) وجدول للبيع --- بدون دخول مشتري لن يكون هناك حركة !!

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

في المدرسة جدول للمدرسين وجدول للفصول وجدول للمواد بدون وجود طلبة مسجلين بمواد فلن يكون هناك حركة.

متى تبدأ الحركة ؟
متى تبدأ قاعدة البيانات في التفاعل والعمل ؟

من يجيب بعد هذه الإضاءة؟
الراسي غير متواجد حالياً   رد مع اقتباس

قديم 06-26-2010, 11:07 AM   #40


موقوف

 
تاريخ التسجيل: May 2009
المشاركات: 2,959
افتراضي



نعم جداول الحركة واحدة من ((((((((((((( أهـــــــــــــــــــــــــــــم ))))))))))))))))))
وأخطر الجداول في قواعد البيانات...

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

وجداول الحركة في أكثر من 90% من الحالات تكون عبارة عن جدول واحد فقط يقوم بربط معظم الجداول الأساسية --- مرة أخرى ليس شرطا !!!!!!!!

ولأن الحركة في قاعدة بيانات المستوصف هي ناتجة عن زيارة لمريض لطبيب في عيادة فإن جدول الحركة لدينا سنسميه جدول الزيارات.

ننشأ جدول جديد بإسم Visitors وفيه الحقول التالية: (على الورق) ...

رقم المريض -- حقل غريب يمثل المفتاح الأساسي من جدول المرضى
رقم الطبيب -- حقل غريب يمثل المفتاح الأساسي من جدول الأطباء
رقم العيادة -- حقل غريب يمثل المفتاح الأساسي من جدول العيادات

وحتى لا يزعل مستر Codd فنضيف مفتاح أساسي للجدول السابق وهو..
رقم الزيارة

حلاوة وروعة هذا الجدول الآن انه يعطينا الفرصة لإضافة أية معلومات عن ماذا حدث في العيادة بين الطبيب والمريض...

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

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

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

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

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

فقدنا جدول العيادات --- نلف وندور على العيادات مرة أخرى ونجري حصر لبيانات العيادات

فقدنا جدول المرضي --- لا بأس نحاول الإتصال بهم (أو ننتظر زيارتهم) ونعيد تجميع بياناتهم

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

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

الثمن المدفوع مقابل جدول الحركة (عندما يحتوي على بيانات مالية) أو معلومات ذات سرية قصوى يتوجب أن يقترن بجدول الرقابة Control Tables التي تقوم بمراقبة مدخلي البيانات.

مدخلو البيانات دائما محط شك وريبة من قبل مصمم قاعدة البيانات.

من يقول لي الآن كيف نربط الجداول الأربعة الموجودة في قاعدة بيانات المستوصف؟؟
الراسي غير متواجد حالياً   رد مع اقتباس
إضافة رد



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

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

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


الساعة الآن 10:18 AM.
 sitemap
سياسة الخصوصيه Privacy Policy
 
Powered by vBulletin


Copyright ©2000 - 2009, Jelsoft Enterprises
RehabMaroC.Com