اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

الردود الموصى بها

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

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

التمرين هو عبارة عن مدرسة ابتدائية سوف نتطرق لأمور تبدو للمبتدأ صعبة وهي على العكس من ذلك أو قد تكون صعبة بالفعل ومن خلال التمارين سوف تسهل عليه .. بسم الله نبدأ
المقدمة :
عند التفكير في برنامج مدرسة أو مخازن أو شئون موظفين في البداية هناك أساسيات لبناء البرنامج فمثلا في برنامجنا الحالي ( المدرسة ) هي عبارة عن فصول و طلاب و مواد دراسية ..الخ انظر إلى الصورة
post-9441-1241647491.gif

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

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

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

نقطة حوار :
علوش : برنامج الأكسس تكمن القائدة منه في البيانات المحسوبة والمرتبطة بتغير الزمن أو الكمية . ؟
المتدرب : هذي النقطة ما فهمتها يا ليت توضح أكثر
علوش : ولا يهمك ،، طالب اخذ في مادة الرياضيات 20 درجة في الشهر الأول وفي الشهر الثاني 30 هنا ممكن أن يستخرج البرنامج النسبة المئوية أو المعدل أو حاصل الجمع أو .. أو .. إلخ
المتدرب : طيب هذا بتغير الزمن عرفناها و النقطة الثانية .
علوش : أي نقطة ثانية ؟
المتدرب : الكمية ؟
علوش : أها النقطة الثانية وهي الكمية أي تغير الكمية ومن أروع الأمثلة للكمية هي عند تسجيل الطلاب في المدرسة ونفرض أن استيعاب المدرسة 120 طالب عند تسجيل الطالب رقم 120 يتوقف البرنامج عن التسجيل ويغلق نموذج التسجيل ..وهناك قاعدة بيانات ضخمة بالصين يتم تسجيل المواليد بها و المتوفين ومن خلال هذه القاعدة يعرفون نسبة الزيادة السنوية أو الشهرية ..أو نسبة المواليد للوفيات .. إلخ هل عرفت الكمية الآن .
المتدرب : والله روعة برنامج الأكسس ..
--------------

في تصميم بعض البرامج يتورطون المبرمجين في تغيير الكتلة البيانية أو تعريف الكتلة ويضاف نموذج يطلق عليه ( frmRepair ) ومهمة هذا النموذج هي تغيير الكتلة البيانية أو تعريف الكتلة

في الصورة السابقة هل تخيلت الجدول وكيف سننشئه وما هي الحقول المطلوبة انظر إلى هذه الصورة
post-9441-1241647579.gif
في الصورة لاحظ أن كل البيانات في جدول واحد لأنها الكتلة البيانية و تعريف الكتلة ، أما البيانات المحسوبة و البيانات التراكمية سوف نتطرق لها في الدروس القادمة إن شاء الله ..
عند إنشاء جدول تجنب اللغة العربية في تسمية الحقول أو تسمية الجدول نفسه وإذا كانت اللغة الانجليزية تصعب عليك فحاول أن تسميها بطريقة ( انجلوعربية ) فمثلا حقل الاسم Isam وحقل العمر Omer وهكذا ، في تسمية الجداول يجب أن يبدأ الاسم بالأحرف tbl فمثلا جدول الطلاب tblStudent أو tblTollab ، أما النماذج تبدأ بالأحرف frm فمثلا نموذج التسجيل frmStudentRec والاستعلام qry وسوف نتطرق للفائدة من هذه التسمية

الجدول الأول في مشروعنا هو tblStudent سوف ننشئ نموذج يستقي بياناته من هذا الجدول ماذا سيكون اسمه سوف يكون اسمه frmStudent كذلك عند إنشاء استعلام لفلترة الصفوف مثلا ماذا سيكون اسمه سوف يكون اسمه qryStudentLvl كذلك عند إنشاء نموذج تسجيل الطلاب سوف يكون اسمه frmStudentRec

الآن بمجرد استعراضك للجداول والنماذج والاستعلامات سوف يسهل عليك معرفة الترابط إضافة إلى ذلك أنك تميز بين النموذج والجدول والاستعلام بسهولة تصور لو أن الجدول اسمه Retnag والنموذج ا سمه Ratnej كيف يمكنك التميز بين النموذج والجدول ،
لا تنسى أننا بصدد إنشاء برنامج احترافي وعليك بالتقيد بالتعاليم ما أمكن ؟
post-9441-1241647642.gif
ثم أنشئ نموذج frmStudentRec لحقن البيانات بالجدول ، حاول أن تخفف على المستخدم البيانات المدخلة من خلال النموذج يعني أضف قائمة تحرير وسرد ليختار منها المستخدم الصف كذلك اضف قائمة تحرير وسرد ليختار منها الهواية وإذا كانت الهواية غير موجودة بقائمة التحرير والسرد يكتبها بمربع النص ، اجعل تاريخ التسجيل الافتراضي هو تاريخ اليوم نفسه .

و إلى إلقاء في الدرس القادم

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

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

الخطوة الاولى : أنشئ نموذج إدخال بيانات يعتمد على الجدول السابق tblStudent وأطلق عليه frmStudentRec أضف الحقول التالية ( الرقم - الاسم - العمر - الهواية ) فقط بقية الحقول ستتلقى البيانات من النموذج من خلال زر الحفظ
إذا الحقول الموجودة على النموذج هي الرقم والاسم والعمر والهواية أما تاريخ التسجيل والجنس والصف فغير موجودة . دعنا نتكلم أولا عن ألحقول الموجودة على النموذج
الرقم التلقائي (IDS ) أو الرقم التسلسلي : مؤمن وغير قابل للتحرير و من الأفضل إضافة حقل خاص برقم الطالب يكتب يدويا إضافة إلى الرقم التلقائي .
الاسم ( Name ) : سوف يكتبه المستخدم في مربع اسم الطالب و كذلك العمر (borth )
الهواية ( avocation ) :سوف ننشئ قائمة تحرير وسرد ونظيف بها الهوايات بدويا ما أمكن كرة القدم – كرة السلة - السباحة .. إلخ و نطلق عليها ( inAvocation ) إذا الهوايات الآن في قائمة تحرير وسرد ، و سوف تحقن بمربع نص الهواية ولكن كيف ذلك في حدث عند التغيير لقائمة التحرير والسرد نكتب الكود التالي :

post-9441-1241648226.gif
نجعل مربع نص الهواية ( avocation ) فوق قائمة التحرير والسرد تماما ( inAvocation ) بحيث تسمح للمستخدم إما أن يختار من القائمة أو أن يكتب في مربع النص المربوط بالجدول مباشرة . أنظر إلى الصورة
post-9441-1241648297.gif
من المفروض عندما يختار المستخدم الهواية ( السباحة ) مثلا أن لا تتغير هذه الهواية مع الطالب الآخر إلا إذا المستخدم غيرها ، كيف ذلك نجعل قيمة مربع الهواية الافتراضي ما تم اختياره من قائمة التحرير والسرد . انظر إلى الصورة
post-9441-1241648390.gif
ثانيا : الحقول الغير موجودة على النموذج :
الصف (level ) : سوف ننشئ قائمة تحرير وسرد ونظيف بها الصفوف ( الصف الأول – الصف الثاني .. إلخ
ونطلق عليها اسم (inLevel ) هذه الخطوة فيها شيء من التعقيد ، لا تنسى أن حقل الصف من نوع رقم بينما قائمة التحرير والسرد بها أسماء الصفوف نص هكذا ( الصف الأول – الصف الثاني – الصف الثالث .. الخ ) ما هو الحل ، الحل نظيف عمود آخر للقائمة وتضع أمام كل صف رقم الصف ، لأن الرقم هو الذي سوف يخزن بالجدول بحقل (level ) عن طريق زر الحفظ ( cmdSave ) أنظر إلى الصورة .
post-9441-1241648479.gif
تاريخ التسجيل (txtDate ) : وهو عبارة عن مربع غير منضم على النموذج وقيمته الافتراضية تاريخ اليوم و قناع الإدخال تاريخ و سوف يخزن بالجدول بحقل (DateIn ) عن طريق زر الحفظ ( cmdSave )

الجنس (pullet ) : سوف ننشئ مجموعة خيار على النموذج ونطلق عليها اسم (Insex ) ونربطها بحقل الجنس بحيث يكون حقل الجنس إما 1 وتعني ذكر أو 2 وتعني أنثى ، و من الممكن أن يكون العكس انظر إلى الصورة

post-9441-1241648540.gif

انتهى الدرس الثاني

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

db8.rar
قام بنشر
السلام عليكم ورحمة الله

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

وقد تكون البيانات التراكمية أكثر من جدول ، وسوف نتكلم في هذا الدرس عن البيانات التراكمية بشكل أوسع لأنك عند تصميم برنامج لا بد أن تكون بارع في تصنيف البيانات ؟

والبيانات التراكمية تتكون من الفترة الزمنية و عنصر التراكم و القيمة التراكمية

الفترة الزمنية : عبارة عن جزيء من الوقت ( شهر – يوم – ساعة – سنة ... الخ ) أو قيمة عددية ( 1 - 2 – 3 - 23 – 156 – 200 .. إلخ )
عنصر التراكم : هو صاحب الفعل أو المنسوب له العد مثل ( 70 درجة بالرياضيات ) العنصر الرياضيات أو ( بدأت إجازتي يوم السبت ) العنصر إجازتي أو ( ضرب خالد سعاد مرة واحدة ) العنصر هنا خالد وهكذا
القيمة التراكمية : هي قيمة الفعل أو العد مثل ( 70 درجة بالرياضيات ) القيمة هنا 70 أو ( بدأت إجازتي يوم السبت ) القيمة هنا السبت أو ( ضرب خالد سعاد مرة واحدة ) القيمة مرة واحدة وسعاد هنا قيمة عددية وهكذا
أنظر إلى هذه الصور و قد حاولت أن اطرح اكثر من نوع من أنواع القيم التراكمية
post-9441-1241649234.gif
post-9441-1241649243.gif
لابد أنك بدأت تميز بين البيانات وتعرف كيفية تركيب البيانات وخاصة البيانات التراكمية لأن براعتك في جداول البيانات التراكمية هي براعتك في التصميم والدليل ( حاول أن تضيف جدول بيانات تراكمي ثاني للمشروع يتعلق بالحضور والغياب لن تستطيع ) ، الآن نعود إلى درسنا وهو الجدول الأول للبيانات التراكمية في مشروعنا (tblData ) ، وهو عبارة عن جدول بسيط عبارة عن حقل ترقيم تلقائي وحقل تاريخ لحفظ الفترة الزمنية وحقل الربط ( IDSR ) لتتمكن من ربط هذا الجدول مع جدول الطلاب (tblStudent ) ، ثم تأتي عناصر التراكم و هي هنا المواد التي سوف يدرسها الطالب ( الرياضيات – القراءة – الخط - المطالعة ... الخ ) انظر إلى الصورة ولاحظ نوع بيانات الحقول
post-9441-1241649259.gif
العلاقة بين الجدولين سوف تكون علاقة رأس بأطراف وطريقة إنشاء العلاقة بين الجدولين من نافذة العلاقات وبعد إضافة الجدولين ، اسحب الحقل ( IDS ) من جدول ( tblStudent ) إلى الحقل ( IDSR ) في جدول ( tblData ) حدد خيار فرض التكامل حتى لا يكون بجدول البيانات التراكمية سجل لا يتعلق بأي طالب ( سجل يتيم )
post-9441-1241649266.gif
الآن انتهينا من عملية الربط أو العلاقة بين الجدولين ولكن ما هو السجل اليتيم ؟

أنظر إلى الصورة التالية :
post-9441-1241649273.gif
لاحظ في الصورة أن السجل التاسع في جدول البيانات التراكمية في حقل ( IDSR ) يحمل الرقم 2 ولا يوجد طالب بهذا الرقم وبهذا يكون هذا السجل يتيم ... و ممكن أن تسأل نفسك من الذي اخذ 10 درجات في الرياضيات ؟
و فرض التكامل يمنع تولد سجل بهذا الشكل أو سجل يتيم .


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

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

الدرس الرابع :
هذا الدرس وكما ذكرت في نهاية الدرس السابق حول النماذج ، والنموذج هو عبارة عن كائن يتميز بالمرونة وتعدد الميزات وهو وسيط جيد بين الجداول أو الاستعلامات و المستخدم لإدخال البيانات أو عرضها .. كما أنه يعالج البيانات وينسقها والتنسيق من أهم ميزات النموذج وأنفعها ،
في الدروس السابقة تطرقنا لأنواع البيانات ولكنك لم تدرك أهمية أنواع البيانات حتى الآن ، قبل أن نبدأ درسنا لهذا اليوم هات مسطرة وورقة وقلم ثم تخيل شكل النموذج وأرسمه ،، أنا تخيلته ورسمته بهذا الشكل :
post-9441-1241649750.gif
هذا هو شكل النموذج الذي تخيلته أنا ، طبعا ليس بالضرورة أن يكون دائما النموذج بهذا التقسيم ، ولك أن تخطط النموذج كيفما تشاء .. و لكن لابد أن تميز بين الأقسام بحيث يكون كل قسم يحمل نوع من أنواع البيانات ، وهذه إحدى الفوائد من معرفة أنواع البيانات ، والدور الذي تلعبه في تصميم النموذج ،

القسم ( 1 ) هذا القسم خاص بتعريف الكتلة ( الصف ، الجنس ، تاريخ التسجيل .. إلخ ) وليس محرما أن تضع بداخلة بيانات محسوبة أو شيء من البيانات التراكمية مثل درجة آخر اختبار ، ولكن التنظيم في النماذج بسهل عمليات الصيانة والتعديل والإضافة والتغيير فيما بعد ..
القسم ( 2 ) هذا القسم خاص بالكتلة البيانية ، طبعا في مشروعنا هذا الطالب وفي مشروع شئون الموظفين الموظف وفي مشروع المستودعات السلعة ..و في مشروع الصادر والوارد المعاملة .. و هكذا
القسم ( 3 ) هذا القسم خاص بالبيانات التراكمية وفي مشروعنا هذا هي المواد ا لتي يدرسها الطالب ( الرياضيات ، القراءة ، .. إلخ وهذا القسم يعتمد علي جدول مستقل ويجب أن يكون على نموذج فرعي داخل النموذج الرئيسي
القسم ( 4 ) هذا القسم خاص بالبيانات المحسوبة مثل مجموع الدرجات والمعدل .. الخ وهو جزء من النموذج الفرعي
القسم ( 5 ) هذا القسم خاص بأزره النموذج مثل إغلاق النموذج أو طباعة تقرير .. الخ

أولا ننشئ النموذج الفرعي : النموذج الفرعي ( frmData ) وهو نموذج مستمر و يعتمد على جدول البيانات التراكمية ( tblData ) و نضع كل الحقول ماعدا الرقم التسلسلي ( IDSR ) لأنه لا يعني شيء في البيانات التراكمية ، و ممكن أن يستبدل بمربع نص ذو أرقام تسلسلية محسوبة ( 1 – 2 – 3 ... إلخ )
طبعا تصفف الحقول وتنسق بشكل جيد ، بحيث يكون عنوان الحقل ( عنصر التراكم ) برأس النموذج والحقل ( قيمة التراكم ) في تفصيل النموذج ، والحقول المحسوبة ( البيانات المحسوبة ) في تذييل النموذج ، وفي مشروعنا هذا سوف نحسب مجموع الدرجات و المعدل و النسبة المئوية ، وأنت ممكن أن تضيف ما تشاء من البيانات المحسوبة .. أنظر إلى الصورة
post-9441-1241649757.gif
لابد أنك كنت تسأل نفسك فيما سبق عن الفائدة من تقسيم النموذج لرأس وتفصيل و تذييل ، و الآن ومن خلال معرفتك بالبيانات اتضحت لك الصورة ، أضف لمعلوماتك أن النماذج المستمرة مصممة للبيانات التراكمية بالذات ،
و عادة ما يكون عنصر التراكم في الرأس ، والبيانات التراكمية في التفصيل ، والبيانات المحسوبة إما في التذييل ( و تسمى عمودية ) أو في التفصيل ( و تسمى أفقية )

سوف نتكلم قليلا ونشرح طريقة عمل حقول البيانات المحسوبة ، أولا الجمع أنظر إلى الصورة السابقة في المربع رقم 1 وهو لجمع درجات الرياضيات واسمه ( MathTotal ) ، كيف يجمع الدرجات ، من خصائص المربع وفي خانة مصدر عنصر التحكم في تبويبة بيانات اكتب الكود التالي
post-9441-1241649766.gif
ثانيا المعدل المربع رقم 2 وأسمه ( MathRate ) في الحقيقة أنا جعلت المعدل مجموع الدرجات على عدد الاختبارات ، وقد أكون مخطئ ولكن أنت عدل كما تراه مناسب ، والطريقة أن نقسم المجموع على عدد الصفوف طبعا المجموع موجود في المربع سابق الذكر ( MathTotal )
post-9441-1241649775.gif
ثالثا النسبة المئوية المربع رقم 3 وأسمه ( MathAbrs ) في هذا المربع يتم حساب النسبة على اعتبار أن الدرجة الكاملة 80 درجة ، طبعا نقسم 80 على 100 ثم نظربها بالمجموع أنظر إلي الصورة التالية
post-9441-1241649783.gif
ثانيا ننشئ النموذج الرئيسي : طبعا سيكون اسمه (frmStudent ) و يعتمد بياناته من جدول الطلاب ومهمة هذا النموذج عرض و تحديد سجل الإدخال للطالب بمعنى أن هذا النموذج كدليل لإضافة بيانات تراكمية أو عرضها ، في القسم الثاني وهو قسم ألكتلة البيانية ( أول صورة في هذا الدرس ) نضيف مربع قائمة طبعا لا نكتب القيمة يدويا بل من جدول الطلاب نفسه والذي هو مصدر بيانات النموذج حتى يتم فلترة أو تحديد السجل من خلال الاختيار من مربع القائمة ..
القسم الأول وهو تعريف الكتلة ( أول صورة في هذا الدرس ) سوف ننسق الحقول و نؤمنها حتى لا يكون هناك تغيير في تعريف الكتلة البيانية ( الطالب )

إنتهى الدرس الرابع
مع تحيات / علوش الحربي
ملاحظة : سوف يكون درسنا القادم أن شاء الله حول النموذج الرئيسي بشكل موسع

allosh.rar
قام بنشر

بارك الله فيك وجزاك الله خير

ياليت التطرق الى مسميات الحقول حيث انه من الملاحظ كثره تصمييم اسماء الحقول باللغه العربيه وكذلك مسميات الكائنات مما يسبب مشاكل كثيره مع لغه البرمجه في اكسس.

كثير من الاحيان لا يتم مساعده بعض الاعضاء لان الجداول مصممه باللغه العربيه

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

الدرس الخامس : سوف نتكلم عن نقطتين مهمتين في النموذج الرئيسي ، إذا كنت قد نزلت البرنامج من المرفقات في الدرس السابق وفتحته ماذا تلاحظ ، هل لاحظت أن النموذج الرئيسي يسرد طلاب الصف الأول بمجرد تحديد الصف الأول ، و الصف الثاني والثالث والرابع .. إلخ ، كذلك عند تحديد طالب في مربع القائمة يتم عرض بيانات الطالب المحدد أي تصفية الطلاب والصف وهذه النقطتين سنتحدث عنها بشيء من الإيجاز ..
post-9441-1241781506.gif

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

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


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

انتهى الدرس الخامس

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

الف شكر اخي علوش على هذه الدروس الرائعة

واتمنى ان تواصل دروسك لما فيها الفائدة الكبيرة لنا

بارك اله فيك وجزاك خير الجزاء

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

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

post-9441-1241908421.gif
طبعا سوف يبدأ المستخدم بإدخال البيانات ، وهنا سوف تحصل كارثة خاصة إذا كان موظف جديد .. ما هو الحل ؟
كذلك انظر إلى نموذج البيانات التراكمية المرقمة على الصورة ( 1 2 ، 3 ، 4 ، 5 ، 6 ) وعددها 6 ، ما رأيك فيما لو أردنا إضافة مواد تراكمية أخرى مثل ( مطالعة ، جغرافيا ، انجليزي ، كمبيوتر .. الخ ) سوف تكون البيانات التراكمية محشورة في جزء بسيط من النموذج . ما هو الحل ؟
كذلك أنظر إلى بيان جنس الطالب ( المحاط بمربع احمر في الصورة ) يعرض الكلمتين ويضع علامة اختيار على جنس الطالب والمفروض أن يعرض جنس الطالب فقط بهذا الشكل ( ذكر ) فقط أو ( أنثى ) فقط ,, إذا ما هو الحل ؟
كذلك ما رأيك بصورة الطالب فيما لو طلب منك مدير المدرسة إضافة صورة للطالب ( لا تنسى أن صورة الطالب تابعة لبيانات تعريف الكتلة العمر ، الهواية ، الخ ) ما هو الحل ؟؟
كذلك أين تاريخ اليوم بالنموذج، وهو مهم جدا في حالة إدخال البيانات التراكمية المتعلقة بالفترة الزمنية ؟؟
أنظر إلى الصور التالية ..
post-9441-1241908465.gif
لاحظ فقرة تعريف الجنس كيف أصبحت محاطة بمربع احمر
post-9441-1241908712.gif

الملف بعد التعديل

انتهى الدرس السادس

مع تحيات / علوش الحربي
ملاحظة : سوف تتوقف سلسلة الدروس لظروف السفر ثم نعاود إكمال المشروع إن شاء الله
قام بنشر (معدل)

الاخ : Bluemind

الاخ : dayslife

شكرا على مروركم على الموضوع وتقبلوا تحياتي

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

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

( Function ) تقوم بحساب عمر الطالب عند التسجيل آليا ، وعمر الطالب بعد ذلك

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

Function Calcdate(vDate1 As Date, vdate2 As Date)
    Dim vYears As Integer, vMonths As Integer, vDays As Integer
    vMonths = DateDiff("m", vDate1, vdate2)
    vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2)
    If vDays < 0 Then
        vMonths = vMonths - 1
        vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2)
    End If
    vYears = vMonths \ 12
    vMonths = vMonths Mod 12
    Calcdate = vYears & " &Oacute;&auml;&Eacute; &aelig;" & vMonths & " &Ocirc;&aring;&Ntilde;" '& vDays & "&iacute;&aelig;&atilde;"
End Function
و مهمة هذا الكود هي حساب الفرق بين تاريخين واستخراج الناتج على شكل سنه و شهر مثلا 12/03/2004 - 12/05/2009 = 5 سنه و 2 شهر أنا استبعدت اليوم وممكن أن تضيف اليوم فيما لو رغبت في ذلك .. وهذا الكود هو عبارة عن تفريعة ( Function ) ولها اسم ( Calcdate ) كما هو واضح من الكود ولها متغيرين الأول (vDate1 ) و المتغير الثاني (vdate2 ) وبكل بساطة نستدعي التفريعة مع تمرير متغيرين من أي مكان بالمشروع فيتم استنتاج الفرق ، على سبيل المثال
Me.SAge = Calcdate(Me.borthDate, DateIn)
borthDate = تاريخ الميلاد DateIn = تاريخ التسجيل كذلك في نموذج الطلاب ( نموذج رصد درجات الطلاب ) يتم حساب عمر الطالب الحالي بين تاريخ الميلاد و تاريخ اليوم ، من خلال الكود نفسه
Me.txtAge = Calcdate(Me.borthDate, Me.txtDate)

borthDate = تاريخ الميلاد

txtDate = التاريخ الحالي

الملف المرفق

انتهى الدرس السابع

مع تحيات / علوش الحربي

ملاحظة : سوف يكون الدرس القادم إن شاء الله حول نموذج و جدول الغياب

تم تعديل بواسطه allosh
قام بنشر

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

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

اعتذر كوني لم انتبة للموضوع الا الان ولكن نحن بانتظار المزيد

صح: عدد زوار الموضوع كثير(250) ولكن التفاعل قليل(9)

لكن: ولا يهمك وتاكد ان الكثير من الاخوة الاعضاء في انتظار الدرس التالي بالرغم من انهم لم يشاركو ولو بكلمة شكر

الله يعطيك العافية ويزيدك من علمة

قام بنشر
يا سلام عليك يا علوش

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

اعتذر كوني لم انتبة للموضوع الا الان ولكن نحن بانتظار المزيد

صح: عدد زوار الموضوع كثير(250) ولكن التفاعل قليل(9)

لكن: ولا يهمك وتاكد ان الكثير من الاخوة الاعضاء في انتظار الدرس التالي بالرغم من انهم لم يشاركو ولو بكلمة شكر

الله يعطيك العافية ويزيدك من علمة

يكفيني مرورك على الموضوع ..

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

قام بنشر

الله يزيد من أمثالك أخي علوش

البرنامج رائع جداً بس الأروع هو الشرح

شرح وافي وكافي ولا ممكن يكون أفضل من هيك

الله يسلم إيديك

قام بنشر

الاخ : nofal

شكرا على الاطراء الجميل وعلى مرورك على الموضوع

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

الدرس الثامن : بسم الله وعلى بركة الله نبدأ درسنا الثامن و في هذا الدرس سوف نتطرق لجدول ونموذج الغياب ، في البداية نضيف جدول جديد (tblCase ) وهو جدول الحالات ، و الحالات تعني 1 غائب 2 مريض 3 مستأذن وهكذا طبعا سوف تكون عدد الحقول أربعة الرقم التلقائي – الحالة – تاريخ الحالة – العلاقة أنظر الى الصورة التالية وتعرف على نوع البيانات لكل حقل ..

post-9441-1242670108.gif

ثم نربط هذا الجدول ( جدول الحالات ) بجدول الطلاب (tblStudent ) علاقة رأس بأطراف ، طبعا سوف يكون حقل الرأس ( IDS ) من جدول الطلاب ، وحقل الأطراف (ABSR ) من جدول الحالات

post-9441-1242670117.gif

بعد ذلك ننشئ نموذج (frmCase ) وهذا النموذج يعتبر نموذج رئيسي للحالات ، بمعني أنه سوف يستمد بياناته من جدول الطلاب ، وهو يشبه تماما نموذج الطلاب (frmStudent ) وممكن ان تنسخ نموذج الطلاب وتلصقه وتغير اسمه وتحذف النموذج الفرعي اللذي بداخله ، الآن سوف ننشئ النموذج الفرعي المسئول عن الحالات طبعا سوف يستمد بياناته من جدول الحالات (tblCase ) ، بعد انشاء النموذج الفرعي (frmSubCase ) ( لاحظ اسم النموذج الفرعي ) ، ندخله في النموذج الرئيسي للحالات وبهذه الطريقة نكون انتهينا من النموذج و الجدول ،

الآن بدأنا بالمرحلة الصعبة .. السؤال الآن كيف سنحقن بجدول الحالات ( الحالات ) وكيف نجمع عدد ايام غياب كل طالب ، وكيف نمنع تكرار تحضير الطالب لأنك ممكن أن تحضر الطالب مرتين بنفس اليوم .

اولا : في نموذج الحالات الفرعي (frmSubCase ) أضف مجموعة خيار وأجعل الخيارات ما تشاء من الشروط ( غائب – مريض – مستأذن – مشارك إلخ ) وأطلق على مجموعة الخيار (fraSlctCase ) اضف لمعلوماتك أن مجموعة الخيار تسند لكل شرط رقم مثلا ( غائب 1 ) و ( مريض 2 ) و ( مستأذن 3 ) وهكذا حسب ترتيب كتابة هذه الشروط وهذه الارقام هي التي سوف تحقن بالجدول ويحتفظ بها الجدول انظر إلى الصورة .

post-9441-1242670125.gif

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

دعنا نلقي نظرة على كود المقارنة :

post-9441-1242670133.gif

من خلال الكود بالصورة أنظر إلى ناتج المقارنة ( SDC ) وتعني ( STUDENT DATE CASE )

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

ثانيا : كيف يتم التعرف على عدد الحالات لكل طالب ( عدد أيام الغياب وأيام التأخير وأيام المشاركات إلخ )

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

post-9441-1242670142.gif

انتهى الدرس الثامن

الملف المرفق

مع تحيات / علوش الحربي

ملاحظة : سوف يكون الدرس القادم إن شاء الله حول تنسيقات النماذج

قام بنشر

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

قام بنشر (معدل)

الاخ الكريم / nart lebzo

شكرا على مرورك و قد استفدت ولله الحمد مما قلت وأحيي فيك هذه المعنوية ،

والمشكلة أنني لم استطع ارفاق ملف الدرس التاسع وهذه الرسالة

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

بالرغم أن الملف 1.2 MB ياليت تشوف هذه المشكلة

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

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

دعنا نلقي نظرة على هذا النموذج

post-9441-1242753950.gif

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

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

post-9441-1242753963.gif

كذلك هذه الرسمة

post-9441-1242753984.gif

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

Private Sub Form_Open(Cancel As Integer)
    
 DoCmd.MoveSize , , 11900, 10700

End Sub

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

طبعا يجب ان نلغي ازرار التحجيم أنظر إلى شكل النموذج بعد تنسيق اللكائنات

post-9441-1242754002.gif

لاحظ أن النموذج ليس له ازرار تحجيم ، كان من المفروض أن تكون كل النماذج بنفس اللون تقريبا أو من مشتقات اللون من باب الجمال ليس إلا .. لكن انا وضعت النموذج الآخر من لون آخر للزيادة في التوضيح ..

انتهى الدرس التاسع

الملف المرفق

http://file14.9q9q.net/Download/55439655/allosh9.rar.html

مع تحيات / علوش الحربي </div>

تم تعديل بواسطه allosh
قام بنشر

اخي علوش

جزيت خيرا على الدرس التاسع وعلى استمرارك الطيب

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

وللحديث بقية

قام بنشر

أخي علوش

تم حل موضوع التحميل لغاية 2 ميجا بايت بالنسبة لك

كل الشكر و التقدير للاستاذ محمد طاهر

نسأل الله أن يجعل مسعانا واياكم لوجهه الكريم

قام بنشر (معدل)
أخي علوش

تم حل موضوع التحميل لغاية 2 ميجا بايت بالنسبة لك

كل الشكر و التقدير للاستاذ محمد طاهر

نسأل الله أن يجعل مسعانا واياكم لوجهه الكريم

الله يحفظك ويجزاك خير و يحفظك من كل مكروه ،

نعم انا اعاني من موضوع تحميل الملفات

و شكر الله سعيك وبارك الله فيك أنت والأخ الكريم محمد طاهر

تم تعديل بواسطه allosh
  • Like 1
قام بنشر (معدل)
السلام عليكم ورحمة الله
درسنا اليوم حول الأرقام السرية ، لا ليس نظام آكسس لصلاحيات المستخدمين ، نعم نظام آكسس لصلاحيات المستخدمين هي الطريقة السليمة ولكن هذا النظام معقد ويصعب تنفيذه أو تركيبه أو استخدامه بشكل بسيط وسوف نخصص له درس إن شاء الله ، ولكن سوف نستخدم طريقة أخرى بسيطة ومفيدة ،
في البداية ننشئ جدولين الأول ( tblPzzw ) والثاني ( tblPzzwSave ) والمقصود من الجدول الاول اسماء وأرقام المستخدمين أي عبارة عن ثلاث حقول حقل اسم المستخدم وحقل الاسم السري وحقل الرقم السري ولا تنسى أن نضيف حقل الرقم التلقائي ، والجدول الثاني لحفظ تاريخ دخول المستخدم و اسمه أي حقلين حقل اسم المستخدم وحقل التاريخ ولا تنسى حقل الرقم التلقائي .. بحيث عندما يدخل أي مستخدم يتم تسجيل اسمه وتاريخ دخوله بالجدول الثاني ،
ملاحظة ( نستخدم Pzzw لتعريف الرقم السري بدلا من كلمة Password كزيادة في تعتيم البيانات )

بعد انشاء الجدولين ننشئ نموذج يعتمد على الجدول الأول ( tblPzzw ) وننشئ قائمة تحرير وسرد ، ليعرض أسماء المستخدمين من الجدول نفسه ، ونضع مربعين غير منظمين بداخل النموذج ، بحيث يحدد المستخدم اسمه من القائمة ومن ثم يدخل اسمه السري ورقمه السري . في مربعي النص غير المنضمين ..
أولا : لو فرضنا أن أشرف عادل ، رقمه السري 123 واسمه السري zeed وعبد الرحمن محمد رقمه السري 123 وأسمه السري Feel يجب أن يكون هناك خطأ في الرقم السري أو بشكل ادق يجب أن يعرف البرنامج المقصود في اسم المستخدم ، هذا اولا
ثانيا : لو فرضنا أن المستخدم أدخل اسمه بشكل صحيح ولكن الرقم السري خطأ في هذه الحالة يجب أن يحصل على رسالة تفيد بأن الرقم السري خطأ وليس الاسم .
ثالثا : لو فرضنا أن المستخدم أدخل اسمه بشكل غير صحيح والرقم السري صحيح في هذه الحالة يجب أن يحصل على رسالة تفيد بأن اسمه غير صحيح وليس الرقم السري .
رابعا : عندما يحدد المستخدم اسمه ويدخل اسمه السري ورقمه السري بشكل سليم يجب في هذه الحاله تسجيل دخوله في جدول حفظ الدخول ( tblPzzwSave )
خامسا : يجب أن يحتفظ البرنامج باسم المستخدم لعرضه في اعلى النموذج حتى يعلم بأن المستخدم هو الذي يقوم بتعديل البيانات ..


post-9441-1243201179.gif

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

post-9441-1243201191.gif

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

Private Sub Pzzwfin_AfterUpdate()
  '----------------------------------
   If (Eval("DLookUp(""[PZZ]"",""[tblPzzw]"",""[PZZ] =form![Pzzwfin]"") Is  Null")) Then
   MsgBox " &Ccedil;&aacute;&Ntilde;&THORN;&atilde; &Ccedil;&aacute;&Oacute;&Ntilde;&iacute; &Icirc;&Oslash;&Atilde;", vbInformation, "&Ccedil;&aacute;&Ntilde;&THORN;&atilde; &Ccedil;&aacute;&Oacute;&Ntilde;&iacute;"
   Me.Pzzwfin = Null
Exit Sub
Else
  If Me!UserNIC = txtUserIn Then
  '-----------------------------------------------------
      
    Pzzn = cmpUser.Column(1)
     
     
     DoCmd.RunSQL "Insert Into tblPzzwSave(User) Values(Forms![frmPzzw]![txtCN])"
    
    Dim stDocName As String
    Dim stLinkCriteria As String
    stDocName = "frmStudent"
    DoCmd.OpenForm stDocName, , , stLinkCriteria
    Me.Pzzwfin = Null
    Me!txtUserIn = Null
  '---------------------------------------------------------
  Else
  MsgBox " &Ccedil;&Oacute;&atilde; &Ccedil;&aacute;&atilde;&Oacute;&Ecirc;&Icirc;&Iuml;&atilde; &Icirc;&Oslash;&Atilde;", vbInformation, "&Ccedil;&Oacute;&atilde; &Ccedil;&aacute;&atilde;&Oacute;&Ecirc;&Icirc;&Iuml;&atilde;"
  Me!txtUserIn = Null
  End If
  End If
  
End Sub


هذا هو كود مربع النص الغير منظم الموجود على النموذج ، طبعا في حدث بعد التحديث يعني عندما يدخل المستخدم اسمه السري ورقمه السري ، الخطوة المهمة في هذا الكود والتي كثير ما نجد اسئلة حولها في المنتدي هي في السطر العاشر السطر الذي يبدأ ( DoCmd.RunSQL ) ومهمة هذا الكود هي حقن اسم المستخدم في الجدول ( tblPzzwSave ) كما هو واضح من الكود
بالنسبة للسطر الثاني والذي يبدأ ( If ) مهمة هذا الكود هي البحث عن وجود الرقم السري بالجدول ( tblPzzw ) يبحث بكامل الجدول

في البرنامج يوجد ثلاث مستخدمين هم
عادل عبد الرحمن الاسم السري ( xxx1 ) والرقم السري 111
عبد الرحمن عادل الاسم السري ( xxx2 ) والرقم السري 222
خالد مخلوف الاسم السري ( xxx3 ) والرقم السري 333
الملف المرفق


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

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

في نموذج ادخال الرقم والاسم السري (frmPzzw ) وضعت تصفية في الاستعلام الخلفي للنموذج ، حسب الاسم السري الذي يدخله المستخدم ، ولماذا الاسم السري ، لأن الاسم السري غير قابل للتكرار كما هو الحال مع الاسم المستعار في هذا المنتدى ، طبعا سوف يعرض النموذج فقط المستخدم صاحب الاسم السري وعندما يدخل رقمه السري سوف تتم المقارنة بينه وبين الرقم السري بالنموذج ، أعتقد أن العملية بسيطة ولا تحتاج شرح مفصل , نزل البرنامج في المرفقات وفي البداية ادخل الاسم السري ( x ) والرقم السري ( 1 ) ولاحظ اسم الاستاذ في اعلى النموذج اغلق البرنامج ثم افتحه مرة اخرى وادخل في هذه المرة ( xx ) والرقم السري ( 2 ) ولاحظ اسم الاستاذ ، اغلق النموذج ثم افتحه وحاول في هذه المرة أن تكتب أي اسم سري خطأ مثلا ( yyy ) ولاحظ النتيجة ، ثم كرر المحاولات الخاطئة ثلاث مرات ولاحظ النتيجة ..

الدرس الحادي عشر :
في هذا الدرس سوف نتطرق لموضوع الصور صور الطلاب ، في الحقيقة أن صور الأشخاص أو الطلاب كما هو الحال في برنامجنا هذا ، توضع في مجلد خاص بها على الهارد دسك يكون داخل مجلد البرنامج ، والطريقة السليمة أن توضع الصورة برقم الشخص أو الطالب ، يعني الطالب خليفة صبحي رقمه في الجدول 5 إذا صورته في المجلد ( 5.gif ) وهكذا ، وهذا يسهل عملية صيانة البرنامج وتعديل الصور بكل سهولة ، وتصور لو أن عدد الطلاب في البرنامج 1700 وفقدت صورة طالب كيف يمكن معالجة المشكلة إذا لم تكن الصور مرقمة بأرقام الطلاب ، وهل ستكتشف أن الخطأ هو اسم الصورة تغير أو أن الصورة حذفت من المجلد أو أن رابط الصورة حذف من الجدول ، لكن اذا كانت الصور مرقمة بأرقام الطلاب سوف تنظر الى رقم الطالب ثم تفتح مجلد الصور وتبحث عن الصورة ذات الرقم نفسه ، وبكل بساطة تعرف الخطأ اين ، ولكن يعيب هذه الطريقة أنه يجب أن تكون كل الصور من نوع واحد ( gif ) مثلا أو ( jpg ) ويصعب استخدام النوعين ،
الطريقة الثانية هي الطريقة المعتادة في البرامج يعني عند اضافة صورة تفتح نافذة حوار لتحدد الصورة من المجلد ايا كان المجلد ، ثم تنقر على موافق ..
في مشروعنا هذا أنا استخدمت الطريقتين معا ،
عند انزال البرنامج وفك الضغط لاحظ المجلد (Spic ) يحتوي على صور الطلاب مرقمة حسب رقم الطالب أو الطالبة وحتى لا يكون شرطا أن تكون صورة الطالب بنفس المجلد وبنفس الرقم ، فقد أضفت الميزة الثانية وهي البحث عن الصورة في أي مجلد أو حتى المجلد نفسه (Spic )
سوف اقوم بشرح الطريقة الأولى فقط لأن الطريقة الثانية اعتقد أنها لا تحتاج شرح فقط انقر على كلمة ( بحث عن صورة )
الطريقة الأولى : افتح البرنامج ثم ادخل الاسم السري ( xx ) والرقم السري ( 2 ) ثم افتح نموذج تسجيل طالب أكتب اسم الطالب وتاريخ الميلاد وحدد الهواية او اكتبها ، سوف يظهر لك رقم الطالب اترك البرنامج وافتح المجلد ( Spic ) وأضف صورة الطالب وغير اسمها حسب رقم الطالب يجب أن يكون امتداد الصورة ( gif ) ثم ارجع للبرنامج وأنقر على الصورة نفسها دبل كلك وليس كلمة ( بحث عن صورة ) سوف يضيفها البرنامج ويعطي رسالة بذلك ، وإذا كانت الصورة غير موجودة بالمجلد سوف يعطي رسالة بأن الصورة غير موجودة ,, في هذه الحالة استخدم الطريقة الثانية ..
لا حظوا معي الكود التالي :
Private Sub imgStudent_DblClick(Cancel As Integer)
         On Error GoTo Err
         Dim R As String
    
    SP = IDS
    spp = SP & ".gif"
    
   '--------------------------------------------------------
                  
         R = Application.CurrentProject.Path & "\Spic\" & spp
         imgStudent.Picture = R
         '=========================================
          MsgBox "&Ecirc;&atilde; &Ccedil;&Uacute;&Ecirc;&atilde;&Ccedil;&Iuml; &Otilde;&aelig;&Ntilde;&Eacute; &Ccedil;&aacute;&Oslash;&Ccedil;&aacute;&Egrave;/&Ccedil;&aacute;&Oslash;&Ccedil;&aacute;&Egrave;&Eacute;  ", vbInformation, "&Ccedil;&Uacute;&Ecirc;&atilde;&Ccedil;&Iuml; &Ccedil;&aacute;&Otilde;&aelig;&Ntilde;&Eacute;"
         imgPath = spp
 Exit Sub
Err:

     MsgBox SP & ".gif" & "   &aacute;&Ccedil; &Ecirc;&aelig;&Igrave;&Iuml; &Otilde;&aelig;&Ntilde;&Eacute; &Ccedil;&aacute;&Oslash;&Ccedil;&aacute;&Egrave;/&Ccedil;&aacute;&Oslash;&Ccedil;&aacute;&Egrave;&Eacute; &iacute;&Igrave;&Egrave; &Atilde;&auml; &Ecirc;&szlig;&aelig;&auml; &Ccedil;&aacute;&Otilde;&aelig;&Ntilde;&Eacute; &Egrave;&Ccedil;&aacute;&Ntilde;&THORN;&atilde;     ", vbInformation, "&Ccedil;&Uacute;&Ecirc;&atilde;&Ccedil;&Iuml; &Ccedil;&aacute;&Otilde;&aelig;&Ntilde;&Eacute;"
     R = Application.CurrentProject.Path & "\Spic\" & "NoPic.GIF"
     imgStudent.Picture = R
     imgPath = "NoPic.gif"
     
End Sub



لا حظوا معي الكود مرة أخرى بالصورة :
post-9441-1243629997.gif

هذا هو كود الدبل كلك على الصورة ، في البداية وفي السطر رقم 4 سوف ينسب رقم 5 للمتغير ( sp ) حيث ( IDS ) هو مربع النص على النموذج ويحمل الرقم 5
الآن لاحظ السطر التالي رقم 5 سوف يصبح المتغير ( spp ) هو اسم الصورة بالضبط يعني ( 5.gif ) في السطر الذي يليه 6 كل العبارة ( Application.CurrentProject.Path ) تعني عنوان مجلد البرنامج وبعدها مجلد الصور ثم اسم الصورة .. في السطر 7 سوف يعتمد رابط الصورة لإطار الصورة على النموذج ..
في السطر 9 يتم حفظ الرابط في الحقل ( imgPath ) من جدول الطلاب وإذا لم يجد الصورة سوف يحصل خطأ ويتجه للسطر 10 في السطر 13 يتم اعتماد رابط الصورة ( NoPic.gif ) هذه الصورة يجب أن تكون دائما وأبدا في مجلد الصور ولو حذفت سوف يحصل خطأ في البرنامج ..
طبعا السطر 14 مثل السطر 7 تماما لاعتماد الصورة الاعتيادية لإطار الصورة ( imgStudent ) على النموذج كذلك السطر 15 مثل السطر 9 إلا انه بدل حفظ الصورة ( 5.gif ) سوف يحفظ الصورة ( NoPic.gif )

الملف المرفق


انتهى الدرس الحادي عشر
مع تحيات / علوش الحربي

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information