محب العلم قام بنشر ديسمبر 25, 2007 الكاتب قام بنشر ديسمبر 25, 2007 (معدل) الأخوة حامل المسك وعمار وشمشوم شكرا لكم الأخ عمار سأعمل بنصيحتك لكل عشر أمثلة معا، وأرجو منك فضلا تغيير اسم الموضوع إلى (سلسلة الأمثلة المشروحة) المثال الخامس الفروقات بين مربع القائمة List Box ومربع التحرير والسرد Combo Box المقدمة تساءل أحد الأعضاء في إحدى المشاركات (هــنــا) إن كان بالإمكان اخفاء سهم مربع التحرير والسرد ليظهر كأنه مربع القائمة. ويتضح ضمنا من سؤاله أنه يود أن يستخدم احد الخصائص التي تتوفر في مربع التحرير والسرد وبنفس الوقت يستفيد من شكل مربع القائمة. إن هذا السؤال في محله بلا شك، رغم أن الكثيرين ممن لا يدققون في الأمور كثيرا قد يظنوا أن مربع القائمة لا يختلف عن مربع التحرير والسرد سوى في الشكل. في هذا المثال سيتم إلقاء الضوء على الفروقات بين List Box و Combo Box. التفاصيل لو دققنا في التسمية فقط نستطيع معرفة الفرق الأساس وهو أنه في مربع التحرير والسرد يسمح بالكتابة وصولا للمطلوب من القائمة بينما في مربع القائمة يتم انتقاء المطلوب بواسطة الماوس، ومما لا شك فيه أن هذا الفرق الأساس والجوهري سيقودنا إلى مجموعة تغيرات (فروقات) في الخصائص الخاصة بكل منهما، فما هي هذا الخصائص المختلفة ؟. يوجد سبعة عشر فرقا بين مربع القائمة ومربع التحرير والسرد يمكن ملاحظتها بالتدقيق بالخصائص لكل منها كما يأتي : 1. في لسان التبويب other الخصائص الأخرى أو الإضافية نلاحظ هنا أنه يمكن في مربع القائمة أن نحدد أكثر من اختيار بينما في مربع التحرير والسرد غير ممكن وهذه هي الخاصية الوحيدة الموجودة في مريع القائمة وليست موجودة في مربع التحرير والسرد. بمعنى أخر، فإن باقي الخصائص الستة عشر موجودة في مربع التحرير والسرد وغير موجودة في مربع القائمة. 2. في لسان التبويب Event الأحداث لاحظ أربعة أحداث غير موجودة في مربع القائمة 3. في لسان التبويب data البيانات لاحظ ثلاث خصائص غير موجودة في مربع القائمة 4. في لسان التبويب format التنسيق لاحظ ثمان تنسيقات غير موجودة في مربع القائمة وهنا نأتي إلى تفسير مشاركة العضو بطلبه استخدام شكل مربع القائمة في مربع التحرير والسرد: مما لا شك فيه أنه يود الناحية الجمالية من مربع القائمة ويود استخدام أحد أو أكثر من الخصائص الستة عشر التي تم توضيحها اعلاه والخاصة بمربع التحرير والسرد. تحياتي تم تعديل ديسمبر 25, 2007 بواسطه محب العلم
محب العلم قام بنشر ديسمبر 25, 2007 الكاتب قام بنشر ديسمبر 25, 2007 (معدل) ما زلنا في المثال الخامس مرحلة التطبيق والتجربة ما زال الحديث دائراً حول إخفاء السهم الذي يظهر في مربع التحرير والسرد وقد عرفنا لماذا قد نحتاج إلى ذلك. في الأمثلة الآتية سأعالج الأمر بطريقين : 1. طريقة خداع اللون التي قدمها لنا المشرف يوسف المحترم من مربع الادوات اضف مستطيل الى النموذج واجعل حجمه يساوي تماما المربع الخاص بالسهم لمربع التحرير والسرد وضعه فوق مربع السهم ليغطيه تماماً واضبط خصائص المستطيل كما يلي:- ــ لون الخلفية او ( BackColor ) غيره ليصبح مثل لون خلفية النموذج. ــ نمط الخلفية او ( BackStyle ) اجعله عادي ( Normal ) وهذه هي القيمة الافتراضية لهذه الخاصية .... اتركها كما هي. ــ نمط الحدود او ( BorderStyle ) اجعله شفاف ( Transparent ). بهذا فان سهم مربع التحرير والسرد لن يظهر سوى عند التركيز عليه فقط وغير ذلك سيظهر كمربع نص. مثال المشرف يوسف : dbHideComboboxArrow.rar وهي طريقة رائعة سهلة التطبيق وناجحة 100% 2. طريقة إسناد قيمة مربع التحرير والسرد إلى مربع نص يوضع فوقه وبإستمرار الدراسة والبحث في هذا الموضوع الشيق استطعت تصميم طريقة أخرى لاعلاقة لها بالألوان. بحيث يعمل مربع نص ويجعل مصدره مربع التحرير والسرد ويوضع فوقه تماما ونغير خاصية (visible) لمربع التحرير والسرد إلى(لا) في وضع التصميم ليتم اخفاءه عندما يفتح النموذج، وبواسطة حدث الدخول لهذا المربع وحدث الخروج من مربع التحرير والسرد يمكن تنفيذ المطلوب كما يآتي Private Sub Text_Enter() Me.Combo.Visible = True Me.Combo.SetFocus Me.Text.Visible = False End Sub Private Sub combo_Exit(Cancel As Integer) Me.Text.Visible = True End Sub المثال : CombBoxNoArrow.rar تحياتي تم تعديل ديسمبر 25, 2007 بواسطه محب العلم
يوسف أحمد قام بنشر ديسمبر 25, 2007 قام بنشر ديسمبر 25, 2007 بارك الله فيك اخي محب العلم مواضيع رائعة ومفيدة جداً .. جزاك الله خيراً للتنويه فقط اذا سمحت لي بمضمون المشاركة المشار اليها من قبلك السلام عليكم ورحمة الله وبركاته ... وكل عام وأنتم بخير . لدي استفسار عن كيفية إخفاء السهم في القائمة المنسدلة ( combobox ) في النموذج ليكون شكله مثل مربع النص . علماً أنني بحث حول هذا الموضوع ولم أجد إجابة .. أتمنى ممن لديه إجابة أن لايبخل علينا بها .. مع شكري وتقديري للجميع . مع الشكر والتقدير لجهودك المبذولة
محب العلم قام بنشر ديسمبر 26, 2007 الكاتب قام بنشر ديسمبر 26, 2007 (معدل) شكرا للأخ يوسف المثال السادس كيفية التحقق من أن النموذج في وضع التعديل تلقائيا المقدمة كثيرا ما يتم تصميم النماذج لتلعب دور الإدخال ودور الإخراج معا، بمعنى أن النموذج يستعرض مجموعة السجلات وكذلك يستخدم لإضافة سجل أو تعديل سجل معروض وقد يؤدي هذا الأمر عن طريق الخطأ وخصوصا إذا كان التحكم في النموذج ضعيفا (أو مفقودا) فإن هذا قد يؤدي إلى ضياع بعض البيانات المهمة. في هذا المثال سيتم وصف أسلوبين يمكن استخدامهما للتحقق من أن النموذج في وضع التعديل تلقائيا ويمكن الاستفادة من هذا الأمر في زيادة التحكم في النموذج لعمل الإجراء المناسب في هذا الوضع أو للتراجع عن التعديلات إن احببنا. الفوائد الجانبية للمثال 1. كيفية التراجع عن مجموعة التعديلات على سجل . 2. كيفية التحكم في صفحة النموذج 3. التعرف على حدث Dirty والذي يتفعل قبل أن يتم التعديل على حقل أو سجل الأسلوبان المراد اتباعهما لتحقيق هدف المثال هما : 1. استخدام حدث عداد الوقت للنموذج 2. استخدام خاصية dirty في تعبير التفاصيل الأسلوب الأول : استخدام حدث عداد الوقت للنموذج 1. يتم تحديد الزمن هكذا 2. يتم تعريف إجراء عداد الوقت للنموذج هكذا Private Sub Form_Timer() ' the Timer Interval has been set at 1000, that is, once per second. Static bFlag As Boolean If Me.Dirty Then If Not bFlag Then Me!cmdUndo.Enabled = True bFlag = True End If Else If bFlag Then Me!txtFirstName.SetFocus Me!cmdUndo.Enabled = False bFlag = False End If End If End Sub وما يقوم به هذا الاجراء هو التحقق بشكل دوري كل (ثانية) حسب الزمن المحدد في خطوة 1 إذا تم اي تعديل في السجل وتبديل حالة زر التراجع عن التعديلات بين التفعيل وعدمه وهكذا نكون قد حققنا ما نصبو له بحسب حالة هذا الزر. 3. كما ذكرت سابقا فإن احد اجراءات النحكم في النموذج قد تكون التراجع عن هذه التعديلات وذلك يكون هكذا Sub cmdUndo_Click() ' same action as clicking Undo from the Edit menu DoCmd.RunCommand acCmdUndo End Sub والنتيجة تكون كأننا ضغطنا على زر التراجع عن التغييرات ctrl+z عدة مرات الأسلوب الثاني : استخدام خاصية dirty في تعبير 1. تعريف الإجراء التالي في وحدة نمطية Function EditModeChange (F As Form) As Variant If F.Dirty Then F!btnUndo.Enabled = True Else F!btnUndo.Enabled = False End If End Function 2. تعريف حدث بعد التحديث للنموذج كما يآتي Sub Form_AfterUpdate () Me!txtEditModeChange.Requery End Sub وهذا بدوره سيحقق المطلوب كما هو الحال بإستخدام الأسلوب الأول من الفوائد الجانبية لهذا المثال كيفية عمل صفحات في النموذج والتنقل بينها وذلك يتم كما يلي 1. في وضع التصميم أضف pagebreak فاصل صفحات في موضع الفصل كم يأتي : 2. ثم بناء على أزرار الأمر يتم التوجه للصفحة المطلوبة هكذا ]Private Sub cmdCompanyInfo_Click() ' move to first page of form. Me.GoToPage 1 End Sub[/size] Private Sub cmdPersonalInfo_Click() ' move to second page of form. Me.GoToPage 2 End Sub المثال بعد تعريبه : DetectEdit.rar تحياتي تم تعديل ديسمبر 26, 2007 بواسطه محب العلم
محب العلم قام بنشر ديسمبر 27, 2007 الكاتب قام بنشر ديسمبر 27, 2007 (معدل) المثال السابع أربعة أساليب لمنع ظهور رسائل التحذير التي ستظهر قبيل تنفيذ استعلاماً إجرائياً المقدمة عندما نطلب تنفيذ استعلاما إجرائيا لإضافة سجل جديد أو تعديل بيانات سجل أو لحذف سجل فإن رسالة تحذيرية ستظهر قبيل تنفيذ الإجراء ستطالب المستخدم بتأكيد تنفيذ الإجراء. في بعض البرامج يتضايق المستخدم من هذه الرسائل. في هذا المثال سنتعرف على أربعة أساليب لمنع ظهور هذه الرسائل. التفاصيل الأساليب التي سنستخدمها لمنع الرسائل التحذرية هي 1. الطريقة اليدوية من الخيارات 2. طريقة استخدام الماكرو 3. باستخدام CurrentDB.Execute 4. باستخدم DoCmd.SetWarnings والأن لنتعرف على تفاصيل كل أسلوب من هذه الأساليب الطريقة الأولى: يدويا من الخيارت وذلك يتم بحسب الشكل الآتي : الطريقة الثانية : بواسطة الماكرو وذلك يتم بعمل ماكرو كما يآتي الماكرو الأول Hide سيمنع الرسائل من الظهور والماكرو الثاتي Show سيعمل على إظهار الرسائل ويطلب هكذا Private Sub أمر1_Click() Dim SQL As String SQL = "insert into students (name) " & _ "values ('طالب')" DoCmd.RunMacro "Messages.Hide" DoCmd.RunSQL SQL DoCmd.RunMacro "Messages.Show" End Sub الطريقة الثالثة : باستخدام CurrentDB.Execute لتنقيذ الإجراء بدلا من DoCmd.RunSQL هكذا Private Sub أمر2_Click() Dim SQL As String SQL = "insert into students (name) " & _ "values ('طالب')" CurrentDb.Execute SQL End Sub الطريقة الرابعة : بواسطة الأمر DoCmd.SetWarnings هكذا Private Sub أمر3_Click() Dim SQL As String SQL = "insert into students (name) " & _ "values ('طالب')" DoCmd.SetWarnings False DoCmd.RunSQL SQL DoCmd.SetWarnings True End Sub المثال : StopWarnings.rar أفضل وأسهل طريقة هي الثالثة تحياتي تم تعديل ديسمبر 27, 2007 بواسطه محب العلم
محب العلم قام بنشر ديسمبر 27, 2007 الكاتب قام بنشر ديسمبر 27, 2007 يرجى تصحيح عنوان الموضوع إلى (سلسلة الأمثلة المشروحة) الأخ عمار سأعمل بنصيحتك لكل عشر أمثلة معا، وأرجو منك فضلا تغيير اسم الموضوع إلى (سلسلة الأمثلة المشروحة) أرجو فضلا تصحيح عنوان الموضوع إلى (سلسلة الأمثلة المشروحة) ولكم جزيل الشكر والامتنان تحياتي
محب العلم قام بنشر ديسمبر 28, 2007 الكاتب قام بنشر ديسمبر 28, 2007 (معدل) المثال الثامن استخدام طرق البحث في البيانات بواسطة اقترانات البحث في مجال aggregate functions المقدمة لاحظت من خلال المشاركات أن بعض المشاركين يعانون من صعوبة البحث في الجداول باستخدم اقترانات تحديد المجال ويواجهون صعوبة في وضع شروط البحث. قمت بتصميم هذا المثال ليساعد في فهم الطريقة التي يتم بها البحث وطريقة تحديد الشروط التي لها علاقة بنوع البيانات المستخدمة. التفاصيل من اقترانات البحث في مجال معين مثل جدول Dlookup ، DFirst ، DLast ، DSum ، DCount ، DAvg ، DMax ، DMin وغيرها في المثال تم بناء جدول بيانات الطلاب : الرقم والاسم وتاريخ الميلاد و المصروف و إن كان للطالب أخ وقد اختيرت هذه البيانات بالتحديد لإختلاف أنواع البيانات فيها فالرقم (رقم Number) والاسم (نص Text) وتاريخ الميلاد (تاريخ Date) والمصروف (رقم مزدوج Double) وله أخ (منطقي Boolean) ولكي نتعلم كيف نستخدم هذه العناصر في الشروط. وقد قمت في هذا المثال بعمل عدة اسئلة وهي البحث عن طالب بواسطة الرقم ؟ البحث عن طالب بواسطة الاسم ؟ البحث عن طالب بواسطة تاريخ الميلاد ؟ البحث عن طالب بواسطة الرقم و الاسم معا ؟ البحث عن طالب بواسطة وقوع تاريخ ميلاده بين تاريخين محددين ؟ البحث عن عدد الطلاب بواسطة سنة تاريخ الميلاد ؟ البحث عن أول طالب بواسطة إبتداء اسمه بأحرف معينة؟ البحث عن أصغر تاريخ ميلاد ضمن المجموعة ؟ البحث عن مجموع المصاريف لكل الطلاب ؟ البحث عدد الطلاب الذين لهم أخ ؟ البحث عن مجموع مصروف الطلبة الذين ليس لهم أخ وولدوا في شهر بعد الذي سيتم تحديده ؟ البحث عن معدل مصروف الطلبة الذين لم يولدوا في السنة المحددة ؟ البحث عن أخر طالب في الجدول له أخ ؟ عرض اسم وتاريخ ميلاد أول طالب يظهر في الجدول؟ ولنناقش هذه الطرق والاسئلة 1. البحث عن طالب بواسطة الرقم ؟ Private Sub cmd1_Click() no = InputBox("الرجاء إدخال رقم الطالب", "ادخال") w = Nz(DLookup("[sno]", "[student]", "[sno] = " & Str(no)), Empty) If Not IsEmpty(w) Then MsgBox w Else MsgBox "لا يوجد نتيجة" End If End Sub استخدمت هنا الأقواس [ ] لحصر أسماء الحقول والجدول وهذا غير ضروري إذا كان الحقول من مقطع واحد ولكنه مهم جدا عند تكون الحقول أو اسم الجدول من مقطعين كأن يكون اسم الجدول مثلا جدول الطلاب أو يكون حقل التاريخ اسمه تاريخ الميلاد الاقتران Nz يضم لنا عدم ارجاع القيمة الفارغة Null فإذا كان الجواب Null يرجع لنا كجواب للبحث القيمة الخالية Empty ومنها نعرف نتيجة البحث لاحظ هنا كيف تم حصر الرقم بالاقتران str لتحويله إلى نص string 2. البحث عن طالب بواسطة الاسم ؟ Private Sub cmd2_Click() N = InputBox("الرجاء إدخال الاسم", "ادخال") w = Nz(DLookup("[sname]", "[student]", "[sname] = '" & N & "'"), Empty) If Not IsEmpty(w) Then MsgBox w Else MsgBox "لا يوجد نتيجة" End If End Sub لاحظ هنا مع الحقل من نوع نص كيف نستخدم علامات التنصيص المفردة ' للإحاطة بالمتغير النصي 3. البحث عن طالب بواسطة تاريخ الميلاد ؟ Private Sub cmd3_Click() D = InputBox("الرجاء إدخال تاريخ الميلاد", "ادخال") w = Nz(DLookup("[sdate]", "[student]", "[sdate] = #" & D & "#"), Empty) If Not IsEmpty(w) Then MsgBox w Else MsgBox "لا يوجد نتيجة" End If End Sub لاحظ هنا كيف نستخدم إشارة النمبر # للإحاطة بحقل من نوع تاريخ 4. البحث عن طالب بواسطة الرقم و الاسم معا ؟ Private Sub cmd4_Click() no = InputBox("الرجاء إدخال رقم الطالب", "ادخال") N = InputBox("الرجاء إدخال الاسم", "ادخال") w = Nz(DLookup("[sno]", "[student]", "[sno] = " & Str(no) & " and [sname] = '" & N & "'"), Empty) If Not IsEmpty(w) Then MsgBox "الطالب موجود" Else MsgBox "لا يوجد نتيجة" End If End Sub 5. البحث عن طالب بواسطة وقوع تاريخ ميلاده بين تاريخين محددين ؟ Private Sub cmd5_Click() D1 = InputBox("الرجاء إدخال التاريخ الأول", "ادخال") D2 = InputBox("الرجاء إدخال التاريخ الثاني", "ادخال") w = Nz(DLookup("[sdate]", "[student]", "[sdate] between #" & D1 & "# and #" & D2 & "#"), Empty) If Not IsEmpty(w) Then MsgBox w Else MsgBox "لا يوجد نتيجة" End If End Sub عملية استخدام between ولا تنسى أن حدي البحث متضمنان في البحث 6. البحث عن عدد الطلاب بواسطة سنة تاريخ الميلاد ؟ Private Sub cmd6_Click() Y = InputBox("الرجاء إدخال سنة تاريخ الميلاد", "ادخال") w = DCount("*", "[student]", "year([sdate]) = " & Str(Y)) If Not IsEmpty(w) Then MsgBox w Else MsgBox "لا يوجد نتيجة" End If End Sub لاحظ هنا طريقة المقارنة مع السنة وهي رقم 7. البحث عن أول طالب بواسطة إبتداء اسمه بأحرف معينة ؟ Private Sub cmd7_Click() N = InputBox("الرجاء إدخال بداية الاسم", "ادخال") w = Nz(DFirst("[sname]", "[student]", "[sname] Like '" & N & "*'"), Empty) If Not IsEmpty(w) Then MsgBox w Else MsgBox "لا يوجد نتيجة" End If End Sub لاحظ كيف استخدمنا Like وأين وضعنا * 8. البحث عن أصغر تاريخ ميلاد ضمن المجموعة ؟ Private Sub cmd8_Click() w = Nz(DMin("[sdate]", "[student]"), Empty) If Not IsEmpty(w) Then MsgBox w Else MsgBox "لا يوجد نتيجة" End If End Sub في بعض الاحيان لا نحتاج إلى شروط في البحث 9. البحث عن مجموع المصاريف لكل الطلاب ؟ Private Sub cmd9_Click() w = Nz(DSum("[sexp]", "[student]"), Empty) If Not IsEmpty(w) Then MsgBox w Else MsgBox "لا يوجد نتيجة" End If End Sub 10. البحث عدد الطلاب الذين لهم أخ ؟ Private Sub cmd10_Click() w = Nz(DCount("[sexp]", "[student]", "[shasbrother] = True"), Empty) If Not IsEmpty(w) Then MsgBox w Else MsgBox "لا يوجد نتيجة" End If End Sub لاحظ هنا كيف استخدمنا البحث عن حقل نعم/لا boolean منطقي واستخدام true ويمكن أيضا المقارنة العدد -1 11. البحث عن مجموع مصروف الطلبة الذين ليس لهم أخ وولدوا في شهر بعد الذي سيتم تحديده ؟ Private Sub cmd11_Click() M = InputBox("الرجاء إدخال الشهر", "ادخال") w = Nz(DSum("[sexp]", "[student]", "[shasbrother] = false and month([sdate]) > " & Str(M)), Empty) If Not IsEmpty(w) Then MsgBox w Else MsgBox "لا يوجد نتيجة" End If End Sub لاحظ كيفية صياغة الشروط المركبة مع and 12. البحث عن معدل مصروف الطلبة الذين لم يولدوا في السنة المحددة ؟ Private Sub cmd12_Click() Y = InputBox("الرجاء إدخال السنة", "ادخال") w = Nz(DAvg("[sexp]", "[student]", "year([sdate]) <> " & Str(Y)), Empty) If Not IsEmpty(w) Then MsgBox w Else MsgBox "لا يوجد نتيجة" End If End Sub <> تعني لا يساوي 13. البحث عن أخر طالب في الجدول له أخ ؟ Private Sub cmd13_Click() w = Nz(DLast("[sname]", "[student]", "[shasbrother] = True"), Empty) If Not IsEmpty(w) Then MsgBox w Else MsgBox "لا يوجد نتيجة" End If End Sub 14. عرض اسم وتاريخ ميلاد أول طالب يظهر في الجدول ؟ Private Sub cmd14_Click() w = Nz(DFirst("[sname] & ' ' & [sdate]", "[student]"), Empty) If Not IsEmpty(w) Then MsgBox w Else MsgBox "لا يوجد نتيجة" End If End Sub لاحظ علاملات التنصيص المفردة ' وذلك لترك فراغ بين الرقم والاسم المثال : aggregate.rar تحياتي تم تعديل ديسمبر 28, 2007 بواسطه محب العلم 1
محب العلم قام بنشر ديسمبر 31, 2007 الكاتب قام بنشر ديسمبر 31, 2007 (معدل) تم تعديل ديسمبر 31, 2007 بواسطه محب العلم
يوسف أحمد قام بنشر ديسمبر 31, 2007 قام بنشر ديسمبر 31, 2007 خبيرنا الغالي / محب العلم نكرر الشكر والتقدير لك على هذه المجهودات الكبيرة والرائعة والتي هي بالفعل دروس قيمة جداً اسأل الله ان يكتب لك بكل حرف كتبته وكل لحظة قضيتها في هذا العمل المبارك حسنة وان يضاعف لك الاجر وان يبارك لك في عمرك ومالك وولدك
حامل المسك قام بنشر ديسمبر 31, 2007 قام بنشر ديسمبر 31, 2007 أسأل الله أن يزقك العلم النافع والعمل الصالح وأن يلهمك سبيل الرشاد ولو كل منا حرص على ما تحرص عليه لرفع الله الجهل عن الأمة وفقك الله أخي محب العلم
محب العلم قام بنشر يناير 8, 2008 الكاتب قام بنشر يناير 8, 2008 شكرا لكم إخواني جميعا على التشجيع والدعم . أخي يوسف ، رجوعا إلى ما تفضلت به عن جمع المادة العلمية في ملف pdf ، أرجو منك فضلا أن ترشدني إلى البرنامج الخاص بذلك أو أن تقوم مشكورا سلفا بعمل المطلوب لأول 10 دروس/أمثلة. أشكرك كثير أخي يوسف والمسؤولين على دعمي وترقيتي وإن شاء الله أكون قدر حمل اللقب المناط بي. الأخ أبو ناره تحياتي لك ماذا تقصد بإنك لم ترى شرح ، لم أفهم قصدك عن أي مثال تتحدث ؟ تحياتي
محب العلم قام بنشر يناير 8, 2008 الكاتب قام بنشر يناير 8, 2008 شكرا لكم إخواني جميعا على التشجيع والدعم . أخي يوسف ، رجوعا إلى ما تفضلت به عن جمع المادة العلمية في ملف pdf ، أرجو منك فضلا أن ترشدني إلى البرنامج الخاص بذلك أو أن تقوم مشكورا سلفا بعمل المطلوب لأول 10 دروس/أمثلة. أشكرك كثير أخي يوسف والمسؤولين على دعمي وترقيتي وإن شاء الله أكون قدر حمل اللقب المناط بي. الأخ أبو ناره تحياتي لك ماذا تقصد بإنك لم ترى شرح ، لم أفهم قصدك عن أي مثال تتحدث ؟ تحياتي
محب العلم قام بنشر يناير 8, 2008 الكاتب قام بنشر يناير 8, 2008 (معدل) المثال العاشر طريقة أمنة وسهلة لربط نموذجين معا وكأن لهما نفس مجموعة السجلات وتحريك مؤشر السجلات في النموذجين المقدمة إذا قمنا بتصمم نموذج عرض مفرد (سجل تلو الأخر) وصممنا نموذج أخر عرض قائمة بيانات datasheet على نفس مجموعة السجلات (الجدول أو الاستعلام) وثم طلبنا القائمة من المفرد، فإننا نود بالطبع عند الرجوع إلى نموذج العرض المفرد أن يظهر السجل الذي كنا عنده عندما خرجنا من قائمة البيانات. هذا المثال يبين طريقة سهلة وأمنة لعمل ذلك بمعنى أننا لو قمنا بفتح كل من النموذجين لوحده لا يحدث مشكلة. التفاصيل لنفترض أن أسم النموذج المفرد : Ambulance وأن النموذج قائمة البيانات هو : AmbulanceDS وأننا سنطلب AmbulanceDS من Ambulance بواسطة زر وهو الزر الذي شكلة كالقائمة في مثالنا يقع مباشرة فوق زر الخروج. الفكرة مبينية على حدث (في الحال on current ) للنموذج في عرض القائمة وهو الذي سيتم طلبه حيث نضع ما فيه ما يأتي Private Sub Form_Current() Dim rs As Object If IsLoaded("Ambulance") Then Set rs = Forms!Ambulance.Recordset.Clone rs.FindFirst "[ambId] = '" & Controls(0).Value & "'" If Not rs.EOF Then Forms!Ambulance.Bookmark = rs.Bookmark End If End Sub لاحظ هنا أننا نفحص وضع النموذج الأب Ambulance أولا قبل تحويل المؤشر بواسطة إقتران فحص فتح النموذج المعروف وهو Function IsLoaded(ByVal strFormName As String) As Boolean Const conObjStateClosed = 0 Const conDesignView = 0 If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then If Forms(strFormName).CurrentView <> conDesignView Then IsLoaded = True End If End If End Function ثم بعد ذلك وبناء على النتيجة فإننا نقوم بتحويل المؤشر للنموج الأب Ambulance للسجل الذي نكون عنده في الأبن AmbulanceDS لاحظ لو قمنا بفتح النموذج الأبن بدون نموذج الأب فلا مشكلة. المثال التطبيقي :Example10.rar تحياتي تم تعديل يناير 8, 2008 بواسطه محب العلم
يوسف أحمد قام بنشر يناير 8, 2008 قام بنشر يناير 8, 2008 بارك الله فيك اخي محب العلم ولا شكر على واجب ... فانت اهل لذلك واتمنى لك التوفيق .... والى الامام دائماً ان شاء الله اعتذر عن التأخر في الرد بخصوص طلبك تجميع الدروس نظراً لانشغالي وعموماً بامكانك الحصول على البرنامج الخاص بذلك بالبحث في قوقل عن PdfCreator وستجده باصداراته اذا احتجت لمساعدة بخصوصه فانا تحت امرك دمت بود
محب العلم قام بنشر يناير 9, 2008 الكاتب قام بنشر يناير 9, 2008 (معدل) المثال الحادي عشر كيفية عمل مجموع تراكمي باستخدام DSum في النموذج المقدمة إذا احتجنا لمجموع تراكمي يحسب مجموع شيء ما لكل السجلات التي مفتاحها أقل من مفتاح السجل المعروض (الحالي) في النموذج فإننا سنحتاج بلا شلك لفهم هذا المثال التطبيقى على هذا الموضوع. التفاصيل كما ذكرنا يستخدم المثال التالي الدالة ()DSum لإنشاء مجموع تراكمي على نموذج 1. إنشاء النموذج الجديدة استناداً إلى الجدول Orders (الطلبيات) وفي تذييل النموذج نجعل مصدر البيانات لعنصر التحكم الخاص بالمجموع التراكمي كما يأتي : =DSum("[Freight]","Orders", "[OrderID] <= Forms![Form1]![OrderID]") 2. تحسب الدالة dsum مجموع كافة تكاليف الشحن Freight على الترتيب والتي مفتاح السجل لها (الرقم) أقل من أو يساوي الرقم المعروض حاليا. لهذا السبب اعتمد المجموع على مفتاح أي فريد ومتسلسل. 3.عند عرض النموذج في طريقة العرض " نموذج " ، لاحظ أن مربع النص للمجموع التراكمي لمصاريف الشحن الإجمالية يعرض المجموع للرقم المعروض وكل الطلبيات السابقة للرقم المعروض . 4. المجموع التراكمي يجب أن يكون في تذييل النموذج. المثال : RunningSum.rar مع وافر الاحترام تم تعديل يناير 9, 2008 بواسطه محب العلم
محب العلم قام بنشر يناير 9, 2008 الكاتب قام بنشر يناير 9, 2008 المثال الثاني عشر كيفية إنشاء نموذج عداد الوقت StopWatch المقدمة لحساب الوقت الذي مضى منذ بدء نشاط معين أو منذ تركنا للحاسوب للإستراحة أو غيرها من التطبيقات المفيدة أو حتى للتسلية والتعلم ليس إلا . هذا المثال يعلمك كيف تستخدم حدث عداد الوقت للنموذج لإنشاء عداد وقت StopWatch. التفاصيل 1. يمكن بناء هذا النموذج في أي قاعدة بيانات مفتوحة بغض النظر عن هدفها أو عملها. 2.قم بإنشاء نموذج فارغ لا يستند إلى أي جدول أو استعلام وقم بتعيين الخصائص التالية للنموذج: ScrollBars: Neither RecordSelectors: No NavigationButtons: No OnTimer: [Event Procedure] TimerInterval: 0 3. أضف مربع نص إلى النموذج وقم بتعيين الخصائص التالية في مربع النص: Name: ElapsedTime DefaultValue: "00:00:00:00" Enabled: No Locked: Yes 4. قم بإضافة زر أمر على النموذج وتعيين الخصائص التالية لزر الأمر: Name: btnStartStop Caption: Start OnClick: [Event Procedure] 5. قم بإضافة زر أمر ثاني إلى النموذج وتعيين الخصائص التالية لزر الأمر الثاني: Name: btnReset Caption: Reset OnClick: [Event Procedure] 6. انقر فوق الرمز في القائمة عرض لفتح المحرر. اكتب الأسطر التالية في مقطع Declarations: Option Explicit Dim TotalElapsedMilliSec As Long Dim StartTickCount As Long Private Declare Function GetTickCount Lib "kernel32" () As Long 7. قم بتعيين الخاصية OnTimer من النموذج إلى إجراء الحدث التالي: Private Sub Form_Timer () Dim Hours As String Dim Minutes As String Dim Seconds As String Dim MilliSec As String Dim Msg As String Dim ElapsedMilliSec As Long ElapsedMilliSec = (GetTickCount() - StartTickCount) + _ TotalElapsedMilliSec Hours = Format((ElapsedMilliSec \ 3600000), "00") Minutes = Format((ElapsedMilliSec \ 60000) Mod 60, "00") Seconds = Format((ElapsedMilliSec \ 1000) Mod 60, "00") MilliSec = Format((ElapsedMilliSec Mod 1000) \ 10, "00") Me!ElapsedTime = Hours & ":" & Minutes & ":" & Seconds & ":" _ & MilliSec End Sub 8. قم بتعيين الخاصية OnClick من زر أمر btnStartStop إلى إجراء الحدث التالي: Private Sub btnStartStop_Click() If Me.TimerInterval = 0 Then StartTickCount = GetTickCount() Me.TimerInterval = 15 Me!btnStartStop.Caption = "Stop" Me!btnReset.Enabled = False Else TotalElapsedMilliSec = TotalElapsedMilliSec + _ (GetTickCount() - StartTickCount) Me.TimerInterval = 0 Me!btnStartStop.Caption = "Start" Me!btnReset.Enabled = True End If End Sub 9. قم بتعيين الخاصية OnClick من زر أمر btnReset إلى إجراء الحدث التالي: Private Sub btnReset_Click() TotalElapsedMilliSec = 0 Me!ElapsedTime = "00:00:00:00" End Sub 10. افتح النموذج وتمتع بالنتيجة المثال : StopWatch.rar مع وافر الاحترام
محب العلم قام بنشر يناير 9, 2008 الكاتب قام بنشر يناير 9, 2008 (معدل) المثال الثالث عشر إنشاء حدث جديد في النموذج اسمه AfterUndo لمعالجة مشكلة تغيير الحسابات الناتجة عن ضغط زر التراجع المقدمة هذا المثال يبين كيفية إنشاء واستخدام إجراء التراجع عن undo . من المعروف أنه في النموذج إذا ضغطنا ESC مرتين أو من قائتم تحرير ثم تراجع يمكن التراجع عن التعديل الأخير في السجل الحالي في النموذج. المشكلة التي قد نقع فيها أو لنقل الاحتياج الذي قد نكون بحاجة له هو متابعة هذا الحدث (حدث التراجع) ومن المعروف أنه لا يوجد في النموذج مثل هذا الحدث. في هذا المثال فإن هذا الإجراء وهو إجراء Undo يحاكي عمل الحدث الذي يمكن استخدامه لإسترجاع الحسابات التي يمكن أن تكون غيرت نتيجة التعديل على السجل والتي لا يرجعها بالطبع ESC أو Undo من قائمة Edit تحرير . التفاصيل لا يوجد أي حدث مضمن في نموذج أكسيس والذي يتم تشغيله عند ضغط المفتاح ESC مرتين للتراجع عن التغييرات عن السجل الحالي في نموذج أو عند نقر فوق تراجع عن سجل في القائمة تحرير. إجراء AfterUndo يحاكي حدث AfterUndo بحيث يمكنك استعادة الحسابات التي قد تم تعيينها بينما يتم تحرير السجل. لإنشاء إجراء AfterUndo اتبع هذه الخطوات: 1. افتح النموذج الذي تريد إضافة إجراء AfterUpdate في طريقة العرض " تصميم " ، ثم أضف مربع نص ذو الخصائص التالية إلى النموذج: Name: txtEditModeChange ControlSource: =[Form].[Dirty] & CheckUndo([Form]) Visible: No 2. إضافة إجراء الحدث التالي إلى الخاصية AfterUpdate من النموذج: Sub Form_AfterUpdate () PrevBookmark = Null End Sub 3. إنشاء وحدة نمطية ثم اكتب السطر التالي في مقطع Declarations: Option Explicit Dim PrevBookmark 4. اكتب الإجراء التالي: Function CheckUndo (F As Form) As Variant Dim CurrBookmark If Not F.Dirty Then On Error Resume Next CurrBookmark = F.bookmark If Err Then CurrBookmark = "NewRecord" AfterUndo Else PrevBookmark = CurrBookmark End If End If End Function Sub AfterUndo () End Sub 5. تعديل التعليمات البرمجية في إجراء AfterUndo (تم إنشاؤه في الخطوة 4) كما يلي: Sub AfterUndo () MsgBox "Record Changes Undone" End Sub 6. عرض النموذج في طريقة العرض " نموذج ". 7. تعديل أي حقل في أي سجل في النموذج. 8. في القائمة تحرير، انقر فوق السجل تراجع عن الحقل الحالي . لاحظ أن مربع الرسالة يظهر " Undone Changes " . 9. كتابة أي نص في أي حقل في السجل الجديد. 10. اضغط المفتاح ESC . لاحظ أن مربع الرسالة يظهر " Undone Changes " . المثال بعد تعريبه : AfterUndo.rar مع وافر الاحترام تم تعديل يناير 9, 2008 بواسطه محب العلم
محب العلم قام بنشر يناير 13, 2008 الكاتب قام بنشر يناير 13, 2008 (معدل) المثال الرابع عشر كيفية البحث في المتشابهات في اللغة الانجليزية والعربية المقدمة عندما يريد أحد الاشخاص عمل قاموس إلكتروني بحيث عندما يدخل كلمة باللغة الأنجليزية فيظهر المعنى يكون الأمر في غاية البساطة إذا ادخل المستخدم لهذا البرنامج الكلمة بدون أخطاء إملائية، أما إذا كان هناك خطأ إملائي فإن المعنى لن يظهر لأن الكلمة غير موجودة وهنا تبرز الحاجة إلى البحث في المتشابهات الكلمات التي تشبه الكلمة المدخلة بشكل خاطىء. التفاصيل مثلا من المعروف أن كلمة Hello معناها مرحبا ماذا يحدث لو أدخلنا كلمة Halo ، Halloe ، Helo ، Hailo ، Helw بشكل خاطىء ونحن نقصد الكلمة Hello هذا بالضبط هو وظيفة الإقتران soundex الموجود في الوحدة النمطية وطريقة طلبه من الاستعلام هي كما في الصورة طبعا هذا الاقتران يختلف عن المتشابهات باستخدام العامل Like و * المتوفر من أكسيس كما تلاحظون السؤال الأهم هل يمكن استخدام الإقتران بالعكس إي من العربي إلى الإنجليزي والجواب نعم فمثلا مرهبا ، محربا ، مرهوب ، ممورهبا كلها تعطينا الكلمة مرحبا المثال التطبيقي : Soundex.zip هنيئاً لصناع القواميس بهذا الإقتران الرائع مع وافر الاحترام والتقدير تم تعديل يناير 13, 2008 بواسطه محب العلم
يوسف أحمد قام بنشر يناير 13, 2008 قام بنشر يناير 13, 2008 السلام عليكم ورحمة الله وبركاته بارك الله فيك اخي محب العلم هذه الدروس من 1 الى 10 مجمعة في ملف وورد وملف اخر Pdf مع الشكر والتقدير Word_1To10.rar Pdf_1To10.rar
محب العلم قام بنشر يناير 14, 2008 الكاتب قام بنشر يناير 14, 2008 (معدل) وعليكم السلام ورحمة الله وبركاته أخي يوسف حفظك الله من كل سوء ، أشكرك جزيل الشكر على هذا المجهود الطيب ، وفعلا اصبحت المواضيع هكذا مرجعا يسهل التعامل معه مع وافر الاحترام والتقدير تم تعديل يناير 14, 2008 بواسطه محب العلم
حامل المسك قام بنشر يناير 15, 2008 قام بنشر يناير 15, 2008 الحمد لله الذي تتم بنعمته الصالحات فعلا لقد استفدنا كثيرا من هذه الأمثلة كتب الله أجر الجميع
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.