• الإعلانات

    • فيصل الحربي

      تسجيل عضوية جديدة في المنتدى   01/31/2016

      السلام عليكم ورحمة الله وبركاته  عزيزي العضو الجديد :  حاليا رسالة الإيميل لتأكيد صحة إيميلكم تذهب للبريد العشوائي ( جاري حل المشكلة )  فإذا لم تجد رسالة التحقق من إيميلكم في صندوق الوارد لديكم إتجه للبريد العشوائي ( JUNK)  وقم بتفعيل إشتراككم من هناك   

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

Showing results for tags 'access control door'.

  • البحث بالتاقات

    اكتب الكلمات المفتاحيه بينها علامه الفاصله
  • البحث بكاتب الموضوع

تم إيجاد 174 نتيجة

  1.   الجيزة للبرمجيات و الانظمة المُدمجة   خبرة 14 عام في تصميم وتنفيذ برامج الكمبيوتر و الانظمة المُدمجة و الدوائر الإلكترونية. خدماتنا: ·         تصميم وتنفيذ وتطوير برامج الكمبيوتر Desktop Applications ·         تصميم وتنفيذ وتطوير قواعد البيانات Using MS SQL Server ·         تصميم وتنفيذ وتطوير الأنظمة المُدمجة  Using PIC Microcontrollers ·         تصميم وتنفيذ وتطوير الدوائر الالكترونية و دوائر التحكم Electronic Circuits   مميزات التعامل معنا: ·         دقة وسرعة التنفيذ. ·         أقل مدة تنفيذ للمشاريع. ·         خدمة مابعد البيع (دعم فني 24 ساعة 7 أيام بالاسبوع). ·         تطوير افكارك وطرح افكار وحلول جديدة خارج الصندوق. ·         استخدام احدث اساليب التكنولوجيا نظراً لاطلاعنا على كل ماهو جديد حول العالم. ·         كل هذا باقل سعر ممكن.   للإتصال: م/مصطفى عبد الظاهر موبيل: 00201005674650 بريد الكتروني: [email protected]         الموقع الالكتروني: www.gizacode.com https://www.facebook.com/GizaCode  
  2. برنامج ادارة المخازن Stock Control المخازن: 1- التحكم فى صنف او مجموعه اصناف (بالحذف او اضافه الاصناف الى مخزن اخر) 2- إمكانيه معرفه كل تفاصيل المخازن عن طريق شاشه واحده 3- رصد كميات اصناف المخازن فى بدايه الفتره 4- شاشه لمتابعه الفروع لمعرفه المبيعات والتحصيلات لكل فرع 5- تعديل اسعار البيع عن طريق ورقه اكسل 6- امكانيه ربط المخزن بمركز التكلفه (عند ربطها ببرنامج الحسابات العامه) 7- مراجعه الخزينه ( سيخبرك البرنامج برصيد الخزينه الحالى ويمكنك عرض حركه الخزينه ف اى فتره من مبيعات ومشتريات وصرف 8- هناك اكثر من طريقه لتقييم المخزون - الوارد اولا الصادر اولا - الوارد اخيرا صادر اولا - متوسط التكلفه  - التكلفه الثابته - التكلفه الحقيقيه (السيريال)  9- تعريف خصائص كل صنف (تاريخ الصلاحيه, بلد الانتاج, رقم القطعه). 10- يمكنك التحويل المباشر مكن مخزن لمخزن. 11- المخزون المستمر (يتم التقييم ومعرفه قيمة المخزون فى كل وقت,ويتم اضافه قيد محاسبى مع كل عمليه بيع او شراء او مرتجع ). 12- الجرد الذكى ( ادخاله ومقارنته مع جرد الحاسب ومعالجه الفروق). 13- رسوم بيانيه لتحليل النشاط التجارى. الأصناف: 1. إمكانيه انشاء الصنف بأكثر من وحده ( العدد , الكميه ). 2. وجود اكثرمن طريقه لحساب تكلفه الاصناف) الوارد اولا يصرف اولا – الوارد اخيرا يصرف اولا – متوسط مرجح – تكلفه فعليه – تكلفه ثابته) . 3. إمكانيه اعاده حساب تكلفه المبيعات فى أى وقت.(re-evaluation) 4. امكانيه عمل صلاحيه انتهاء للاصناف وتحديد معاد التنبيه قبل الانتهاء. 5. تحديد حسابات تكلفه وايراد ومخزون على مستوى الصنف او المجموعه 6. إمكانيه وجود أكثر من كود للصنف . 7. تحديد التفاصيل للأصناف (لون-حجم-مقاس-وصف تفصيلى) تفاصيل متغيره حسب النشاط 8. إمكانيه ربط الصنف بأكثر من مخزن 9. إمكانيه ربط الصنف بأكثر من سعر بيع مع إمكانيه تعديل سعر البيع فى الفاتوره 10. إمكانيه تحديد سعر ثابت للصنف (التعامل بقائمه اسعار مصانع – توكيلات ) مع اثبات نسب الخصم 11. إمكانيه تحديد الحد الأدنى لسعر البيع 12. نظام مصفوفه الاصناف يسهل تكويد اعداد كبيره جدا من الاصناف . 13. طباعه الملصقات التى تحتوى ع الباركود ( يحتوى ع معلومات كل صنف) 14. إمكانيه إستيراد الاصناف من ورقه اكسل بكافه تفاصيلها (اللون-الشكل-الكميه) 15. دليل اصناف : وجود دليل شجرى تفصيلى للبحث بجميع خصائص الصنف 16. إمكانيه دمج صنف أو أكثر فى حاله تكرار تكويد الصنف 17. جميع حركات الصنف (صادر –وارد-تسويه-مرتجع للمخزن-مرتجع للمورد– تحويلات بين المخازن ) 18. رسوم بيانيه لتحليل النشاط الاقتصادى 19. تعريف جميع انواع الحركات المخزنيه( مبيعات , مشتريات, مرتجعات). (الخصومات ): -عروض خصومات على مجموعات الاصناف وتحديد فتره و العملاء -عروض على مستوى الصنف (مبلغ- نسبه – كميه )وتحديد فتره -إمكانيه النسخ واللصق لعروض الاصناف -اختيار مجموعه معينه من العملاء لتطبيق الخصم -إمكانيه تطبيق الخصم النقدى على مستوى الصنف او الفاتوره مع التحكم فى نسب الخصم لكل مستخدم المجموعات : -شكل شجرى للمجموعات (عدد مستويات لا نهائى) -تكويد تلقائى و يدوى للمجموعات -إمكانيه نسخ خصائص والعروض من المجموعات الرئيسيه للمجموعات الفرعيه الباركود -طباعه الباركود بأكثر من شكل وحجم مختلف -إمكانيه طباعه مجموعه أصناف أو فاتوره نقاط البيع : - تعدد الدفع النقدى ( الفيزا, ماستر كارد, كاش) - إمكانيه إنشاء أكثر من نقطه بيع بصناديق فلوس مختلفه واكثر من نوع للفيزا - متابعه يوميات صناديق الفلوس وتحويلها اوتوماتكيا للخزينه - البيع بالجمله والقطاعى. - امكانية التعامل مع اكثر من عمله. العملاء والموردين - إمكانيه إنشاء مجموعات عملاء ومجموعات موردين - إمكانيه إنشاء حد مديونيه للعميل – حد طلب للمورد - تحديد فتره حد المديونيه - تحديد فتره حد الدين - ربط العميل بحساب ف شجره الحسابات - إمكانيه تحديد نوع السعر البيع للعميل(تخصيص نوع سعر للعميل) - إمكانيه إنشاء عرض سعر للعملاء- عرض طلب للمورد - تحويل عرض السعر لفاتوره او لاكثر من فاتوره - إمكانيه إنشاء إشعار خصم أو إضافه للعميل– او للمورد - التسديد الجزئى للفاتوره ( البيع بنظام القسط). - تحديد موعد سداد كل قسط والتنبيه بميعاد كل قسط - معرفه الربح من كل عميل ع حده ومقارنه بين ارباح العملاء. - فترت الاستحقاق ( متابعه تسديدات ومدفوعات مستحقه وفواتير بيع مسجله وشيكات ) الاعدادات والملحقات : - شاشه صلاحيات تفصيليه على جميع شاشات البرنامج - إمكانيه تسجيل اسم المشترى والبائع فى كل فاتوره صادر - نسخ (back up) لكافه البيانات المسجله. - اختيار الاشكال والالوان لكل من ( الفاتوره, النوافذ, الطباعه) - يمكن للمستخدم التنقل بين باقى المستخدمين اثناء تشغيل البرنامج بدون اغلاق وفتح البرنامج مره اخرى. تحديد الصلاحيات لكل مستخدم تحديد عمولات المندوبين حسب التاريخ والمبيعات التقارير : تقارير شاملة لكل حركة تمت على الصنف ( بيع - شراء - تحويل - مرتجع - .... ألخ ) والبحث يكون بالعديد من الطرق ( سريال - تاريخ محدد - مدة محددة - .... الخ ) كل هذا تجدونه فقط فى هدف للبرمجيات  يمكنكم التحميل أو الاطلاع على كافة برامجنا من خلال موقعنا http://accflex.com وفى حالة وجود سؤال او استفسار برجاء التواصل معنا عن طريق المحمول 1022226599(20+) - 1000754764(20+) او الايميل او شات الموقع الالكتروني.
  3. من فرج عن مسلم كربة

    كيف يمكننى وضع كود فى نموذج لتحريك الشاشة لمشاهدة صورة طويلة ( اطول من الشاشة) مثلا الصورة عبارة عن مستند نصى فيه 30 سطرا فسوف تظهر فى الشاشة فى النموذج 10 سطرا اريد الكود يحرك الشاشة لمشاهدة السطر العشرين فى الصورة
  4.   partie 1      انشاء الجداول www.youtube.com/watch?v=2pF59e8WhV4  partie 2       العلاقات بين الجداول www.youtube.com/watch?v=4ScDjP994yw
  5. كان لدى قاعدة بيانات تحتوى على اكثر من 2000 شخص لحضورحفل تخرج وكل شخص يتم تصويرة عند دخولة وفى نهاية الحفل يتم عمل عرض تقديمى باسم كل شخص وصورتة  مع كبر حجم البيانات وضيق الوقت كان يجب ان يوجد كود برمجي لاتمام هذه المهمة .المهمة الاولى هي ربط اسم كل شخص مع صورته (لن اعرضها فى هذا الموضوع)والثانية هى عمل عرض تقديمى POWERPOINT من خلال قاعدة بيانات الاكسيس وعرض صورة الشخص واسمة يبقى لدى ادراج بيانات اخرى فى مربع نص اسفل الاسم ولانى بعشق هذا المنتدى بحب اسجل فية كل ما اتوصل الية لتعم الفائدة على الجميع واليكم ما توصلت الية  يجب فك فولد 1 فى ال :C powerpoint.rar
  6. الاسلام عليكم لدي جدولين الاول بيانات عن سعر سهم في الدقيقه يتكون من ست أعمده التاريخ و الوقت وسعر الفتح و أعلي سعر و أقل سعر و سعر الأغلاق و الجدول الثاني يتكون من سبع أعمده التاريخ و ست أوقات مختلفه اقوم بعمل اربعه استعلامات للحصول علي سعر السهم في فتره محدده من الجدول الثاني موضح فيها التاريخ وسعر الفتح و أعلي سعر ووقت تحققه و أقل سعر ووقت تحققه و سعر الأغلاق ولكن يكون هذا في وقتين موختلفين في نفس اليوم المشكله التي تواجهني حين اوريد تحديد وقتين بين تاريخين مختلفين كماهو في الاستعلام FinalResult المرسل لكم لا اجد مشكله لو كان الوقتان في نفس التاريخالمشكلة التي أواجهها، عندما أريد  تحديد البيانات في فترة من الزمن بين يومين.على سبيل المثال: عندما كنت في حاجة لتحليل البيانات في فترة من الزمن بين 11:00 في 2016/02/17 و05:00 يوم 2016/02/18 Database1.zip
  7. السلام عليكم VB6 + Access ارغب فى البحث عن كلمة نصية بدلاله تاريخين فى قاعدة البيانات واظهار النتائج فى Datagrid   مرفق مثال لتوضيح المطلوب  Sampel.rar
  8. السلام عليكم VB6 + Access ارغب فى البحث عن كلمة نصية بدلاله تاريخين فى قاعدة البيانات واظهار النتائج فى Datagrid   مرفق مثال لتوضيح المطلوب  
  9. السلام عليكم عندما اقوم بحفظ التاريخ ...علي سبيل المثال بهذا الشكل 01/02/1436 03:26:53 ص   يـــــحتفظ في db access    بهذا الشكل                                                         01/02/1936 03:26:53 ص يتم الحفظ من خلال dateTimePicker كيف يمكن حل المشكله
  10. السلام عليكم هلى من الممكن ربط اليونكس من الشبكة IP 192.1.1.1 وأربطه بقاعدة بيانات أكسيس أو أوراكل أفادكم الله أفيدونا جربت برامج كتير بعضها نفع وينقصه العربى   أخيكم   محمد جلال  
  11. في هذه التجربة سنتعرف علىكيفية الاستفادة من أي جهاز ريموت كنترول لديك في المنزل وربطه مع المتحكم الصغير PIC 16F628a للتحكم بأي شيء تريد.  سنتعلم مبدء عمل الريموت في التجربة لنتيح لك المجال للانطلاق في التعامل مع أي ريموت يقع بين يديك.  يحتوي الفيديو على : الأدوات المستخدمة في التجربة وتوصيل الدائرة وعرض سريع لبعض البروتوكلات المستخدمة في المرسل ( الريموت كنترول ) وطريقة قراءة أي إشارة وإنشاء الكود لكل زر وإختبار الاوامر في النهاية مع شرح الكود المستخدم .  الكود المستخدم في التجربة :https://drive.google.com/file/d/0B3Bcsest6tm8QnpvT3FxZko1MUk وهنا نسخة معدلة تعديل بسيط في ترتيب مكان المتغيرات:https://drive.google.com/file/d/0B3Bcsest6tm8bldhOXQ4MWM4aDA  اترككم الان لتشاهدوا التجربة  
  12. ما بعد اكسيس ( Access )، بماذا تقترحون لتعلم برمجة لقواعد البيانات اقوى من اكسيس وتعمل بدونه ، وتكون اقوى واكثر استقرارا وامانا؟
  13. بسم الله الرحمن الرحيم السلام عليكم ورحمة الله تعالى وبركاته اخواني فى منتدى فريق البرمجة العربي اليوم عايزكم تساعدوني عايزة طريقة للتحكم بالبورتات (445,443,80,.....الخ ) كيف اقدر اقفل اي بورت انا عايز عن طريق السي شارب تحياتي
  14. ياجماعه انا كنت عاوز برنامج علي Access ويكون كامل وسهل او عندي برنامج كان موجود ع النتوده اللبنك بتاعه http://file.topmaxtech.net/do.php?id=5062 هو مشكله انه تجريبي هو كويس اوي لشغلي بس مشكله ان لما رصيد المنتجات تخلص مبيعرفنيش
  15. السلام عليكم أعزائي. طلب مني أحد العملاء برمجة موقع بـ ASP.NET وطلب أيضاً لوحة تحكم، وللأسف لا أعرف كيف أنشئ لوحة التحكم ولا أعرف الخطوات اللازمة لذلك. فمن فضلكم دلوني على الكيفية، وشكراً.
  16. السلام عليكم ورحمة الله وبركاته   اخواني كيف حالكم    واجهتني مشكلة في اثناء برمجة قاعدة بيانات بسيطة    المشكلة هي في عملية التعديل على الحقول المحفوظة سابقاً في قاعدة البيانات    الصورة توضح     اثناء عملية الاضافة وبالضغط على علامة + تضاف حقول جديدة واقوم بتعبئتها ثم حفظها عن طريق صورة القرص المرن (باللون الأزرق) تتم عملية الحفظ بنجاح في قاعدة البيانات ولا توجد أي مشاكل   ولكن في حالة اني اردت ان اعود واعدل هذه البيانات يتوقف البرنامج وتظهر الرسالة التالية      ...   يأخذني بعدها للكود    [       المشكلة الان في زر الحفظ حتى وان حذفت بعص الحقول Rows وقمت بالحفظ فتظهر نفس المشكلة   اظن ان المشكلة في اخر سطر برمجي ولكن لم اعرف اين الخطأ بالضبط    علماً انني استخدم التحكم في قاعدة البيانات بإستخدام ToolStripContainer   هل من يملك حل لهذه المشكلة؟     والسلام عليكم ورحمة الله وبركاته  
  17. السلام عليكم ورحمة الله   اخواني الاعزاء لدي قاعدة بيانات Access محمية بملف MDW - windows Work Group وفقدت كلمة المرور للأدمن   هل من طريقة لكسر الحماية او استرجاع كلمة المرور على الأقل   القاعدة اما صنعت على Office 2003 او Office 2000 XP لا اعرف بالضبط    الرجاء المساعدة لأنه بحث كثيراً ولم أجد طريقة فعالة    والسلام عليكم ورحمة الله وبركاته
  18. السلام عليكم ورحمة الله و بركاتة   أمتلك جهاز راوتر و كل الأجهزة التي تعمل عليه تحصل على IPs تحت الحزمة التالية 192.168.2.XXX و بالطبع خدمة DHCP مفعلة بالراوتر و من يومين قمت بشراء جهاز Access Point و قمت بتركيب كابل من الراوتر إلى منفذ WAN و بالطبع DHCP الموجود بالـ Access Point مفعل و كل الأجهزة التي تعمل عليه تحصل على IPs تحت الحزمة التالية 192.168.0.XXX القضية أنه يمكنني أن أتصل بأي جهاز على شبكة الراوتر من خلال أي جهاز على شبكة Access Point بدون مشاكل و لكن لا أستطيع أن أنفذ العكس أي لا يمكنني أن أعبر من أي جهاز من على شبكة الراوتر إلى أي جهاز على شبكة Access Point و قمت بالتجربة من الأنظمة Windows و Linux حتى أنني جربت الإتصال من خلال الموبايل مستخدماً النظام Android و كلهم أعطوني نفس النتيجة و هي عدم القدرة على الدخول أو الإتصال بأي جهاز متصل بشبكة Access Point   قمت بإقاف DHCP الخاص بالـ Access Point و قمت بإعداد IP الخاص به بحيث يصبح 192.168.2.11 حيث أن IP الخاص بالروتر هو 192.168.2.1 و قمت بتبديل الكابل من WAN إلى منفذ من المنافذ 4 و هنا جميع الأجهزة المتصلة بـ Access Point أصبحت تأخذ IPs من DHCP الخاص بالروتر و كل الأجهزة الأن تعمل تحت شبكة واحده و كلهم متصلين ببعض بدون مشاكل و الحمد لله.   الأن أريد أن أعرف لماذا لا أستطيع الإتصال بالاجهزة المتصلة بالـ Access Point في الحالة الأولى عندما كانت تأخذ IPs 192.168.0.XXX و ما هو علاج هذه المشكلة ؟   شكراً
  19. السلام عليكم جميعا اخواني انا جديد على برمجة النماذج او forms في برمجية اكسس مطلوب مني مشروع بسيط عبارة عن كافيتيريا لطلاب جامعة بحيث هناك شاشة دخول للطالب لقد قمت بتصميم النماذج والامور سهلة وايضا كتبت الكود لكن المشكلة انني عند تنفيذ النموذج الكود لا ينفذ في شاشة Event تحت بند event procedure كتبت الكود لكن لا اعرف ما الذي ينقص لتنفيذه و لا اعرف ما الذي يتم استخدامه micro ام الكود وما ارتباطهما ببعض ارجو افادتي بمقال عن هذا الموضوع او اي شي له علاقة مع العلم انني استخدم Access 2007 بالتوفيق  
  20. السلام عليكم ورحمة الله عندي سؤالين بخصوص العمود المخصص لأرقام السجلات والمسمى ID السؤال الأول: لما أحذف سجل على سبيل المثال رقمه 10, السجل رقم 11 يبقى رقم 11, كيف أجعله يصير 10, واللي بعده يصير 11, وهكذا ... ؟؟ السؤال الثاني: كيف أقوم بعرض أكبر رقم في العمود في Label ؟ وللعلم أنا أستخدم أداة Datagridview لعرض محتويات الجدول. والسلام عليكم
  21. السلام عليكم إخواني الكرام : لدي مشروع يعمل بقاعدة بيانات أكسس وأنا الآن أريد تحويل كود الربط إلى قاعدة بيانات Sql server 2008 علماً بأن إسم جهاز الكمبيوتر لدي : Server-PC وإسم قاعدة البيانات : KM3DB وهذا هو الكود القديم الذي كنت أستخدمه في الربط بالأكسس :   Public Sub ConncData()     If Cn.State = 1 Then Cn.Close     Cn.CursorLocation = adUseClient     Cn.Provider = "Microsoft.Jet.OLEDB.4.0;"     Cn.Open App.Path & "\KM3DB.mdb" End Sub وتقبلو خالص إحترامي وتقديري لكم ...  
  22. السلام عليكم اخواني الاعزاء قمت بعمل برنامج باستخدام قواعد البيانات access2010 + visualbasic 2008 وعند تنفيذ البرنامج لاحظت أن البرنامج لا ينفذ بالشكل الصحيح وتركزت المشكلة بالكامل في جملة واحدة باختلاف الموضع للجملة: وحتى لا اطيل عليكم اليكم جزء من البرنامج الذي يتكرر الخطا فيه  وهي الجملة التي تحتها خط :       Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click        Dim SavInto As New OleDb.OleDbCommand        Dim adapter2 As New OleDbDataAdapter(SQLstr, Conn)        SavInto.Connection = Conn        SavInto.CommandType = CommandType.Text        SavInto.CommandText = "UPDATE students SET stud_name1 = '" & Trim(TextBox2.Text) & "' , stud_father = '" & Trim(TextBox3.Text) & "' ,father_jawal = '" & Trim(TextBox4.Text) & "' ,money = '" & Trim(TextBox5.Text) & "' WHERE Mobile ='" & m & "'"        ()Conn.Open       () SavInto.ExecuteNonQuery     ()   Conn.Close        Button4.Enabled = False        Button5.Enabled = False        Button3.Enabled = True        Button2.Enabled = True        TextBox2.ReadOnly = True        TextBox3.ReadOnly = True        TextBox4.ReadOnly = True وعند التنفيذ تظهر الرسالة : خطا في جملة update   واليكم صورة من البرنامج ولكن في موضع  اخر مع نفس الخطا    
  23. [منهجية العمل في تصميم تطبيقات قواعد البيانات] الكثير منّا، أو كلنا قد عملنا على تطبيقات قواعد البيانات، إما لأنفسنا أو لجهات معينة، ودائما ما نواجه العديد من المشاكل في تصميم وتطبيق هذه التطبيقات، إن لم تكن تلك المشاكل في الربط مع قاعدة البيانات، تكون في ربط البيانات مع الواجهات، أو إضافة بيانات من المستخدم إلى قاعدة البيانات، بالمحصلة هناك جملة كبيرة نوعاً ما من المشاكل التي قد تواجهنا في مراحل تصميم هكذا تطبيقات. لكن السؤال المطروح: ما هو سبب تلك المشاكل و لماذا تنتج وكيف يمكن التغلب عليها؟ في الواقع، أكثر الأخطاء التي تواجه المبرمج هي من صنع نفسه! والسبب يكون دائماً عدم اتباعه لمنهجية عمل مناسبة تؤمن له تصميم أكثر قوة وسهولة في العمل، بل على العكس يقوم مباشرة بفتح بيئة التطوير، ثم عمل بعض النوافذ وإضافة بعض العناصر، والإتصال بقاعدة البيانات ومعالجة العمليات الباقية، كل هذا يتم متراكبا فوق بعضه البعض. ومن خلال هذا التراكب في العمل، تنتج الكثير من الأخطاء، نحن بغنى عنها. لذلك سنقوم في هذه المقالة بشرح بعض المفاهيم الأساسية لعمل هذه التطبيقات بكل قوة وسهولة. الكلام والمفاهيم ينطبق على جميع بيئات التطوير، لكننا سنركز على بيئة ميكروسوفت [.NET Platform]، حيث سنستعين ببعض تقنيات هذه البيئة بشكل بسيط، وسنقوم في المقالة القادمة بتطبيق جميع هذه المفاهيم على عدة مشاريع مثل Windows Forms Application، ASP.NET Application و WPF Application. لنلقي نظرة على المخطط التالي الذي يوضح تسلسل الطبقات بدءاً من قاعدة البيانات [الفيزيائية] وانتهاءاً بمستخدم النظام. وكما تحدثنا فإن هذه الهرمية يمكن تطبيقها على أي مخدم قواعد بيانات وعلى أي بيئة تطوير أخرى.   Data Access Layer هذه الطبقة هي المسؤلة عن إنشاء الإتصال مع قاعدة البيانات، وإجراء العمليات عليها من إضافة وتعديل وحذف وجلب للبيانات وهو ما يطلق عليه إسم CRUD  [Create Retrieve Update Delete]، والمهم في هذه الطبقة هو فقط التخاطب مع قاعدة البيانات بدون أي أليات تحقق من البيانات أو رسائل مرجعة للمستخدم. فإذا ما قلنا [Data Access Layer]، فإن معناها محدد كإسمها، الوصول للبيانات فقط، وليس التحقق منها أو إجراء أي عمليات أخرى، لأن كل ذلك من مهمة الطبقة الثانية. هكذا يكون لدينا آلية وصول للبيانات مفصولة عن قواعد أو ضوابط التطبيق، ومفصولة عن التقنيات الأخرى، فمثلاً يمكن استخدام هذه الطبقة في تطبيقات ASP.NET أو WPF أو Windows Forms وما إلى ذلك من التقنيات الأخرى. ما هي طبيعة هذه الطبقة، وكيف يمكننا إنشاءها؟ في الواقع كل لغة برمجة تزودنا بتقنيات معينة لإنشاء هذه الطبقة، وبالطبع يمكننا إنشاؤها يدوياً كل ذلك يعود لطبيعة البيئة المستخدمة، ولطبيعة متطلبات المشروع، ورغبة المستخدم.   بما أننا سنستخدم تقنيات .NET في أمثلتنا سأقوم بعرض كيفية إنشاءها بواسطة هذه التقنيات، بأسلوب توضيحي فقط، وكما تحدثنا سيأتي تطبيقها بالتفصيل وإستخدامها في مقالات قادمة بإذن الله. تزودنا .NET بعدة تقنيات للعمل، اساسها هوADO.NET  [Active Data Object.NET]  تتفرع منه التقنيات الأخرى. 1. ADO.NET Entity Framework Model وهي عبارة عن عنصر جديد يتم إضافته للمشروع، ثم يظهر لنا العديد من الخيارات لكي نحدد الإتصال مع قاعدة البيانات، ثم الربط مع الجداول المحددة، وهذ التقنية ستقوم تلقائيا بإنشاء كلاسات للجداول وإذا كان هناك علاقات بين الجداول سيضمنها ضمن الكلاسات أيضاً. عند الانتهاء من التصميم، نكون قد حصلنا على طبقتنا المطلوبة، وبالطبع تحوي هذه الطبقة على كلاس خاص بعمليات CURD تضاف تلقائياً.   2. LINQ to Classes وهي مشابهة للتقنية السابقة من حيث التصميم والتعامل، لكن الفرق يكمن في التصميم الداخلي لها، وفي طريقة تعاملها مع قاعدة البيانات، حيث تقوم بالتخاطب مع قاعدة البيانات عن طريق ما يسمى ب SqlClient بينما تقوم التقنية السابقة بالتخاطب معها بواسطة ما يسمى ب EntityClient.   Data Set .3 أيضاً الكثير منا يعرف ما هي الـ DataSet وهي عبارة عن DataAccessLayer بوضع Disconnected عن قاعدة البيانات، وهي أيضاً عنصر يضاف للمشروع ثم نقوم بتصميم الجداول عن طريق إضافة TableDataAdpater، وهناك الكثير من الأدوات تساعدنا في إنشاء الإستعلامات queries لملىء تلك الجداول بالبيانات المطلوبة، بدل أن نعرف كل ذلك بإيدينا، فالطريقة المتبعة، أن نقوم بتعريف عنصر من DataSet في مكان ما في الكود ثم تعريف TableDataAdapter ثم مل DataSet بالجدول المناسب، وفيما لو انتقلنا إلى نافذة أخرى للعمل أو لجز أخر  من الكود، فإننا سنضطر لإعادة هذه التعريفات، مما يجعل العمل اكثر صعوبة وممل. لكن بتعريفها كطبقة مستقلة كما تحدثنا، هو الطريقة السليمة والأفضل للعمل. 4. إنشاء الطبقة يدوياً كأن نعرف كلاس معين، ونعرف ضمنه إعدادات الاتصال مع قاعدة البيانات ودوال التخاطب مع قاعدة البيانات، عمليات CRUD. ولا يخفى أننا بحاجة لإنشاء كلاسات للجداول يدوياً أيضاً، فمن أكثر المشاكل التي يقع فيها المبرمج في إنشاء تطبيقاته، أنه يقوم بإحضار البيانات من قاعدة البيانات بشكل متغيرات فقط، كأن يحضر حقل الإسم والعنوان فقط، ويخزن كل  واحدة ضمن متغير. هنا تكمن المشاكل والصعوبة، بينما لو عرف كلاس لكل جدول يكون التعامل أسهل في جميع الحالات.   في جميع الحالات السابقة نحصل على شيء موحد، عبارة عن كلاس يحوي دوال التعامل مع قاعدة البيانات، بغض النظر عن أي ضوابط أو قواعد يفرضها المشروع علينا. فقط إدخال بيانات معينة أو جلب بيانات معينة ببساطة.   Business Logic Layer من المعلوم أن كل تطبيق له قواعد خاصة، ومنهجية عمل معينة؛ أي هناك تطبيقات تفرض بعض الشروط على البيانات الداخلة، مثلاً لا تقبل عدد سالب، أو حقل فارغ، وما إلى ذلك من الشروط. هذه الطبقة هي المسؤولة عن إنجاز هذه المهمة، وبالتالي تضمن وصول البيانات الصحيحة إلى قاعدة البيانات. كيف يتم إنشاء هذه الطبقة؟ يمكن اعتبار هذه الطبقة كلاس خاص، يحوي على Object من نوع الطبقة الأولى، وبالتالي هو المسؤول عن التخاطب مع الطبقة الأولى، وهو صلة الوصل أيضا مع User Interface.ونقوم بتعريف كل الضوابط والشروط والقواعد على البيانات ضمنه.   مثلاً لنتخيل ميثود ضمنه تدعى AddUser، تقوم بأخذ بيانات من المستخدم وتحاول حفظها إلى قاعدة البيانات، فتقوم هذه الميثود بأخذ متغيرات مثل UserName و Password و ConfirmedPassword. كما أدخلها المستخدم في عناصر الواجهات، فتقوم هذه الميثود بالتحقق من أن User Name يحوي على قيمة وليس فارغ، ثم يقوم بالتحقق فيما إذا كان الإسم محجوز مسبقاً أم لا، ويقوم بالتحقق من توافق كلمتي المرور، بعد التحقق من صحة كل هذه الشروط، يأتي الوقت لطلب ميثود من الطبقة الأولى لأخذ هذه البيانات [الصحيحة] وإرسالها لقاعدة البيانات لحفظها.   وهكذا نلاحظ أنّا قمنا بتوزيع المهام، فواجهات المستخدم لم تعد تضع الشروط الخاصة بالمشروع، بل هي مجموعة في هذه الطبقة، ومرة أخرى يمكننا استخدام الطبقتين الأولى والثانية في التقنيات الأخرى، كون هناك استقلالية في العمل، وتوزيع في المهام. ولا يوجد ارتباط مع واجهات المستخدم ابداً، فإسم المستخدم مثلاً لا يهمنا في هذه الطبقة هل هو قادم من TextBox ضمن مشروع  Windows Forms أو من ASP.NET.  في النهاية هو [string]. أما إذا كان  هناك أي خلل في الشروط فإننا سنقوم بإفشال عمل هذه الميثود وإرسال رسالة إلى واجهة المستخدم، أغلب الرسائل وأفضل الطرق يتم عن طريق Exception، مثلاً إذا كان إسم المستخدم محجوز مسبقاً، نقوم مباشرة بعد الشرط بعمل throw لـِ Exception بالشكل: throw new Exeception("User name is already exist! Please try another name"); طبعاً واجهة المستخدم هي المسؤولة عن التقاط هذا الخطأ، وعرضه بطريقة مناسبة للمستخدم. Presentation Layer في هذه الطبقة نقوم بتصميم واجهات المستخدم، وضمن هذه الواجهات نقوم بطلب Object من الطبقة الثانية وإرسال البيانات إليها بكل بساطة، ونستطيع ملاحظة الرسائل القادمة من الطبقة الثانية. وهذه الطبقة كما قلنا هي نوع المشروع الذي نقوم بالعمل عليه هل هو تطبيق ويب أو تطبيق سطح مكتب أو تطبيق موبايل، لايهم الآن ما هو نوع المشروع ما دمنا قمنا بفصل الطبقات، فلو أردنا تغيير المشروع أو إنشاء مشروعين مختلفين [تطبيق ويب وتطبيق سطح مكتب] بنفس السلوك، يتم ذلك بكل سهولة. تجدر الإشارة هنا إلى أن الطبقة الأولى والثانية بإحتوائهما على آليات التعامل مع البيانات، يمكننا فصلهما في مشروع مستقل أو فصل كل طبقة في مشروع مستقل من نوع [Class Library] مثلاً، وبالتالي يصبح إعادة الاستخدام في منتهى السهولة. أما إذا أردنا جمع الطبقات في مشروع واحد، فالأفضل وضع الطبقة الأولى والثانية كل واحدة في مجلد مستقل، وأن نسمي المجلد الأول [DataAccessLayer] والمجلد الثاني [BusinessLogicLayer]. وبهذا يكون لدينا فصل حقيقي للطبقات.   كل النقاش السابق عبارة عن منهجيات تم وضعها من قبل أناس واجهوا تلك المشاكل، وبحكم خبرتهم وضعوا هذه المنهجات، ليستفيد منها غيرهم، فعلينا الإستفادة من أخطاء وتجارب الأخرين، لا أن نكررها عدة مرات حتى نصل إلى ما وصلوأ إليه سابقاً.     Eng. Tareq Jehd DatabaseApplicationDesign.pdf
  24. السلام عليكم ورحمة الله وبركاته صراحةً تابعت هذا المنتدى من فترة قريبة وأعجبت فيه..وتوسمت في أعاضؤه الخير ;)  فقلت ليه ما أسجل فيه؟؟ :blush:  ,  فأتمنى إني أكون عضو فعال ومفيد.. وأيضاً أتمنى مساعدتي في طلبي ولا تخذلوني.. سؤالي معقد شوي راح أتدرج فيه لحتى توصل الفكرة.   أولاً أنا عندي قاعدة بيانات فيها جدولين.. الأول : الزبائن ... الثاني : المبيعات. وعملت برنامج على VB.NET , فيه 2 فورم . الأول فيه Datagridview يقوم باستدعاء الزبائن, والثاني أيضا فيه Datagridview ويقوم باستدعاء قائمة المبيعات. جدول الزبائن فيه الاسم, الصنف, الدَّين, وجدول المبيعات فيه الصنف, الزبون, السعر. المطلوب كالتالي: أريد عند إضافة سجل في المبيعات إضافة سعر الصنف إلى الدَّين في سجل الزبون بحيث يكون الاسم مدرج سابقاً وإضافة السعر إلى الدَّين. أيضاً إضافة اسم هذا الصنف في حساب الزبون.   أيضاً أدرجت نموذج مبسط للبرنامج لإيصال الفكرة.. أتمنى من كل من يقدر يساعدني لا يبخل علي للأهمية.   وشكراً :) WindowsApplication1.rar