)بسم هللا الرحمن الرح م( **************************** ف هذا المشروع سنقوم بإذن هللا تعال بعمل مشروع إدارة المخازن من خالل قاعدة ب انات األكسس وتصم م الفورم من خالل الف جوال ب زك. 1Page
شرح قاعدة الب انات )Store( الجداولTable Move In Vout Vendor ITEMS األصناؾ المورد ن المدفوعات المشتر ات كما شاهدنا ف الشكل السابق هذه ه الجداول الت تصمم ف قاعدة الب انات واآلن سنتجه إلى التصم م قاعدة الب انات سنقوم بفتح برنامج ما كرو سوفت أكسس 2007 وسنقوم بتصم م الجداول على حسب الجداولالتال ة. )ITEMS) اسم الصنفF0 TEXT 50 اسم الموردF1 TEXT 50 الماركةF2 TEXT 20 بلد المنشأF3 TEXT 50 المواصفاتF4 TEXT 50 (MOVE In) اسم الصنفm0 اسم المورد M1 اسم التاريخM3 الماركة M2 الكميهM4 سعرا القيمةm6 لشراء M5 رقم إذن البيانm8 الموردm7 Text Text Number Number Number Date and Text Text Text Time 50 10 - - - - 30 50 30 2Page
(Vendor) مالحظات v8 Memo المحمول v5 البر د v4 التل فون v3 العنوان v2 المورد v1 اسم الماركة v0 Text 30 السجل التجاري v6 Text 20 البطاقة الضر ب ة v7 Text 20 Text 15 Text 50 Text 15 Text 50 Text 50 )Vout( اسم الموردn0 Text 50 المبلػn1 Number التار خn2 Date-Time الب انn3 Memo وهكذا قمنا بعمل الجداول كما هو موضح ف الشكل السابق واآلن نتجه إلى التصم م _أوال: 1. نقوم بفتح برنامج ما كروسوفت أكسس) access2007 )Microsoft نقوم باخت ار) Database )New Blank نقوم بتسم ة قاعدة الب انات كما هو موضح باالسم )Store( نقوم باخت ار األمر) Create ( كما ف الصورة السابقة..2.3.4 3Page
بعد عمل إنشاء لقاعدة الب انات س تطلب حفظ الملؾ ف الفولدر الخاص بالمشروع. صبح شكل قاعدة الب انات بعد إنشائها بالشكل التال..5.6.7 نقوم بعد ذلك بعمل الجدول Itemsكما هو موضح سابقا ونكتب الحقول الخاصة بها والطول الخاص بكل حقل كما هو موضح بالشكل:.8 بعد االنتهاء من تصم م الجداول كما هو موضح صبح شكل قاعدة الب انات كاآلت : 4Page
وبعد أن انته نا من تصم م قاعدة الب انات نتجه اآلن إلى تصم م الفورم الخاصة بالبرنامج من خالل لؽة البرمجة Visual Basic6 5Page
Forms About Visual Basic6 أوال نقوم بفتح برنامج الف جوال ب زك كما هو موضح ف الشكل ونختار. Standard EXE نذهب إلى شر ط األدوات ونقوم بإضافة أداه جد دة من خالل الضؽط على الزر األ من للماوس واخت ار األمر Component نقوم بإخت ار هذه األداة Microsoft Tabbed Dialog Control6.0.sp6 نقوم بإخت ار هذه االداه حتى تظهر ف شر ط األدوات كما هو موضح ف الشكل التال. 6Page
ب ع د أ ن ق م ن ا ب ت ص م م أداة الTabbedنقوم بعمل الخصائص الخاصه بها كما هو موضح فى الشكل التالى نقوم بالضؽط عل ها وإظهار شاشة الخصائص الخاصه بها وإضافة الخصائص المطلوبه كما هو موضح فى الشكل التالى. مالحظه) كون عدد إلCount 4Tab كما هو مطلوب فى المشروع( 7Page
بعد أن قمنا بعمل الخصائص نقوم بإضافة المفات ح الخاصة بالمشروع وإضافة أدوات أخرى جد دة وه أداة إل DB DBGRIDE.Combo كما هو موضح بالشكل متمثال هذه األدوات بالمسم ات التال ة: Microsoft common Dialog Control.6(sp6)..1 Microsoft Data Bound Grid Control.5(sp3)..2 Microsoft Data Bound List Control.6(sp6)..3 نالحظ ح نئذ ظهور هذه األدوات ف شر ط األدوات نقوم بعد ذلك برسم إل Tabbed الخاصة بب انات المورد ن كما هو موضح ف الشكل. 8Page
)األدوات الموجودة على إلTabbed ( *عدد التكست بوكس =Textbox 10 كما هو موضح ف الشكل : ب انات المورد ن الوقت والتار خ= TxtxTimer الماركة= TxtV0 المورد= TxtV1 TxtV2 TxtV3 TxtV4 TxtV5 TxtV6 العنوان= التل فون= اإل م ل= المحمول= السجل التجاري= البطاقة الضر ب ة= TxtV7 مالحظات= TxtV8 9Page
شرح شاشة ب انات المورد ن : TxtTimer قمنا برسم تكست بوكس على التاب وقمنا بوضع أداة إل Timerعلى التاب وقمنا بفتح شاشة الكود الخاصة بهذه األداة وكتبنا الكود التال : Private Sub Timer Timer() txttimer.text = Now() End Sub عدد المورد ن الحال ن: أوال قمنا برسم عدد 2Label على إلTab وهما Caption عدد المورد ن الحال ن Private Sub Form Load() Data1.RecordSource = "select count(v1)from "vendor Data1.Refresh Labvendor2.Caption = Data1.Recordset(0) Form1.Refresh End Sub Labvendor1 Labvendor1 Name المطلوب هنا هو عند عمل Run للمشروع ظهر عدد المورد ن الحال ن ف قادة الب انات على الفورم ولذلك قمنا برسم داتا كنترول وعدد 2Label وقمنا باسم ة األول )عدد المورد ن الحال ن( من خاص ة إلCaption والثان قمنا بمسح خاص ة إلCaption من شاشة الخصائص الخاص بة وبعد أن قمنا بتوص ل الداتا كنترول بقاعدة الب انات قمنا بفتح شاشة الكود الخاصة بال Form Load وقمنا بكتابة الكود السابق ذكره ف الجدول معنى هذا الكود إننا بنقول للداتا كنترول ا داتا كنترول تعالى على الحقل اإلنتى واقفة عنده وأحسب العدد الهواcount للحقل األسمه v1 من الجدول الخاص بالمورد ن vendor وبعد كده أعمل تحد ث للب انات. ونرجع نقول ا 10Page
Labvendor2 تعالى على خاص ة التسم ة العندك وخل ها مساو ة لعدد السجالت العندك وبعد كده أعمل تحد ث كما هو موضح الكود ف الشكل التال : الماركة :Txtv0 أحنا عاوز ن ال وزر اول ما كون المؤشر و ضؽط بالماركة الخاصة واقؾ على التكست بوكس KeyAscii طبعا Enter روح المؤشر نازل على التكست البعدها تم ذلك من خالل حدث سمى ف الك بورد له رقم فالمفتاحEnter رقمه داخل الك بورد 13 فإحنا عاوز كلنا عارف ن إن كل زر ف الحدث طبعا الهوا KeyAscii الخاصة بالماركة لو تم الضؽط عل ك نقول للتكست بوكس بمفتاح Enter إنزلى على التكست بوكس البعدها تم ذلك من خالل الكود التال : Private Sub txtv0_keypress(keyascii As Integer) If KeyAscii = 13 Then txtv1.setfocus End Sub 11Page
الموردTxtv1 : أحنا عاوز ن ال وزر أول ما كون المؤشر واقؾ على التكست بوكس الخاصة بالمورد و ضؽط Enter روح المؤشر نازل على التكست البعدها تم ذلك من خالل حدث سمى KeyAscii طبعا كلنا عارف ن إن كل زر ف الك بورد له رقم فالمفتاح Enter رقمه داخل الك بورد 13 فإحنا عاوز ن نقول للتكست بوكس الخاصة بالمورد لو تم الضؽط عل ك ف الحدث طبعا الهوا KeyAscii بمفتاح Enter إنزلى على التكست بوكس البعدها تم ذلك من خالل الكود التال : Private Sub txtv1_keypress(keyascii As Integer) If KeyAscii = 13 Then txtv2.setfocus End Sub وكالمثل باق التكست بوكس تم وضع الكود الخاص بهم أو مكن استخدام زر إلTab التكستات عن طر ق ضبط الخاص ة Tab Index كما هو موضح ف الشكل التال : للتنقل ب ن 12Page
المفتاح جد د( butaddnew1 (: Private Sub butaddnew1_click() Datavendor.Recordset.AddNew butaddnew1.enabled = False butsave1.enabled = True ف هذا الكود قولنا ا داتا كنترول الخاصة بالمورد ن تعالى عند أخر حقل أنت واقفة عل ه وعمل إضافة حقل جد د Datavendor.Recordset.AddNew. بعد ذلك قمنا أ ضا عند الضؽط على المفتاح جد د بقوم بتحو ل الخاص ة Enable للق مة False وق مة المفتاح حفظ butsave1 إلى الق مة.True لتجنب عمل Dropمع المستخدم ومنع ق امة باستخدام المفتاح حفظ قبل عمل إضافة حقل جد د. المفتاح حفظ) butsave1 (: ف هذا الكود وجد بعض المالحظات : i. من المفروض تجنب تسج ل حقل فارغ ف قاعدة الب انات ولذلك قمنا باستخدام جملة IFالشرط ة بمعنى أنى أنا عاوز أقول للمفتاح الخاص بالحفظ مثال ا butsave1 الهوا المفتاح حفظ تعالى ع لى التكست الخاصة بالماركة لو كانت فارؼة طلعلى رسالة قول ف ها "من فضلك أدخل الماركة" الهوا الكود المستخدمة مع جم ع التكستات ه كون لو التكست الخاصة بالماركة فارؼة"" طلعلى رسالة"من فضلك أدخل الماركة" وقؾ المؤشر على التكست الخاصة بالماركة If txtv0.text = "" Then Msgbox "من فضلك أدخل الماركة" txtv0.setfocus Exit Sub End If أنهى الكود نها ة الشرط 13Page
وكذلك نقوم بتطب ق كل الكود على جم ع التكستات حفاظا على عدم تسج ل ب انات فارؼة ف قاعدة الب انات كما هو موضح فى الشكل التالى الكود النهائى الخاص بالمفتاح حفظ. 14Page
المفتاح حذؾ) butdelete1 (: Private Sub butdelete1_click() Dim X As String X = تر د الحذؾ") MsgBox,"هل vbyesnocancel, "Alsakkar") If X = vbyes Then Datavendor.Recordset.Delete Datavendor.Refresh End If End Sub ؼالبا بعض العمالء قومون أح انا بعض الوقت بالضؽط على مفتاح الحذؾ عن طر ق الخطأ و فقدون العد د من الب انات المهمة الت صعب أح انا استرجعاها ولذلك البد من عمل رسالة أو سؤال تأك دي قوم البرنامج بعرضه على المستخدم عند الضؽط على مفتاح الحذؾ وذلك تم عن طر ق كتابة الكود األعلى إننا قمنا بحجز متؽ ر سمىx بالق مة النص ة ف الذاكرة وق مة هذه األاكس تتم ز ف رسالة صندوق ة للمستخدم بأنه هل ر د الحذؾ فعال بالضؽط عن طر ق Yes-Noفعند الضؽط على الموافقة قوم بمسح الب انات وعند الرفض تظل الب انات كما ه وتكون هذه الرسالة كما ف الشكل التال : و كون الكود أ ضا كما هو موضح بالشكل التال : 15Page
المفتاح استدعاء) butfind1 (: قبل التحدث عن المفتاح استدعاء البد أوال من استخدام أداة الDBCombo ألن البحث أو االستدعاء ف مشروعنا عتمد على عدة البحث عن طر ق هذه األداة فنقوم برسم هذه األداة على الفورم أوال كما هو موضح ف الشكل : بعد ذلك نذهب إلى شاشة الخصائص الخاصة باألداة ونقوم بتوص لها بقاعدة الب انات. أنا عاوز أعرض السجالت الخاصة بأسماء المورد ن ف هذه األداة علشان أختار االسم األنا عاوزه وأروح عامل له إستدعاء عن طر ق الضؽط على المفتاح استدعاء. تابع ما س حدث ف ضبط الخصائص التال ة الخاصة ب DBCombo 16Page
شاهد بعض ضبط هذه الخصائص ماذا س حدث ف األداة عند عملRun للفورم. لقد تم عرض الحق الخاص بأسماء المورد ن ف الدىبى كمبو. واآلن نأت لنكتب الكود الخاص بمفتاح االستدعاء: Private Sub butfind1_click() Datavendor.Recordset.FindFirst "v1 like '*" + DBCombo1.Text + "*'" DBCombo1.Refresh Form1.Refresh End Sub أو الكود التال Private Sub butfind1_click() Datavendor.Recordset.FindFirst "v1 = '" + DBCombo1.Text + "'" DBCombo1.Refresh Form1.Refresh End Sub مكننا استخدام الكود ن ونالحظ الكود ف شاشة الكود التال ة : 17Page
المفتاح خروج) butexit1 (: Private Sub butexit1_click() Dim g As String ("برنامج إدارة المخازن " vbokcancel,,"هل تر د الخروج MsgBox(" g = If g = vbok Then "للبرمج اتNEXT شكرا الستخدامك " MsgBox End If End End Sub الكود ال ختلؾ عن كود الحذؾ لكن ختلؾ ف النت جة أن ف نها ة هذا الكود نكتبendللخروج ورسالة شكر الستخدام البرنامج. مفتاح عرض السجالت) butgrid (: هذا المفتاح وظ فته أنه عند الضؽط عل ه قوم بتحو لنا إلى شاشة أخرى وهى شاشة عرض عرض ف ها كل السجالت الخاصة بجدول المورد ن فنقوم أوال بإضافة فورمه جد دة ونقوم برسم أداة إلDBGRIDEعل ها كما هو موضح ف الشكل التال : 18Page
مالحظه كل شاشة من الشاشات الموجودةبالمشروع تحتوى على شاشة خاصة بعرض السجالت وفكرة البرمجة فئ كل الشاشات الموجود سواء كانت المورد ن أو المشتر ات أو مدفوعات ا المورد ن واحدة لكنى سأتابع التصم م ف األشكال. التال ة ف هذه الشاشة قمنا بتصم مها كما هو موجود ف الشكل السابق وقمنا بتوص ل الDBGRIDEبقاعدة الب انات من خالل الداتا كنترول Data1 وكالمثل نر د أن ظهر عدد السجالت الموجودة كما ذكرناف الشاشة الخاصة بالمورد ن أننا نردي أن ظهر عدد المورد ن وقمنا بإضافة داتا كنترول جد دة وكتابة الكود التال : Private Sub Form_Load() Data2.RecordSource = "select count(v1) from vendor" Data2.Refresh labgrid2.caption = Data2.Recordset(0) End Sub الفكرة واحدة وستنفذ ف جم ع الشاشات التال ة. بعد االنتهاء من تصم م شاشة عرض السجالت نقوم بعمل Runونضؽط على عرض السجالت ونشاهد الشكل التال : 19Page
وهكذا نقوكن قد انته نا من شرح أهم شاشة المورد ن األصناؾ(. وه الت تطرق وتسهل لنا الفهم ف الشاشات األخرى )المشتر ات- مدفوعات سنتابع أ ضا بعد ذلك تصم م باق الشاشات )األصناؾ- المشتر ات- مدفوعات المورد ن( شاشة األصناؾ 20Page
شاشة المشتر ات مالحظه :ف هذه الشاشة الجزء الخاصبال Calculation عند إضافة الكم ه وسعر الشراء تظهر الق مة وحدها اى أن هناك عمل ة حساب ة وهى ان البرنامج حسب الق مة وحده عند إضافة الكم ة وسعر الش راء وذلك عن طر ق كتابة الكود التالى فى شاشة الكود الخاصة بالتكست ات الخاصة بالكم ة وسعر الشراء : 21Page
If Not IsNumeric(txtm4.Text) Then SendKeys "({backspace})" End If txtm6.text = Val(txtm4.Text) * Val(txtm5.Text) End Sub ؾي هذا الكود جزئ ت ن األولى أننا عاوز ن م دخلش ف التكستات دي ؼ ر أرقام هنكتب الكود دا األول الجزئ ة If Not IsNumeric(txtm4.Text) Then SendKeys "({backspace})" End If هنا ف الكود دا بأستخدم الشرط دا لمنع كتابةأي شئ ؼ ر األرقام. الكود اله طلعلى العمل ة الحساب ة هو txtm6.text = Val(txtm4.Text) * Val(txtm5.Text) End Sub هنكتب نفس الكود ف شاشة الكود الخاصة بالكم ه وسعر الشراءكما هو موضح بالشكل التال : 22Page
شاشة مدفوعات المورد ن 23Page
وهكذا نكون أتممنا مشروع أدارة حركة المخازن وشرح االكواد وبرمجة المفات ح متمثل بالتفص لف الشاشة األول الخاصة بالمورد ن وتعرفنا على أداة جد دة وه أداة إلDBCombo. م/محمد محمود الصقار م/ 01000897819 أتمنى الدعاء لى بالتوف ق ولوالدي بالرحمة وأن سكنة هللا فس ح جناته و ؽفر له ما تقدم من ذنبه وما تأخر. 24Page