اذهب الي المحتوي
أوفيسنا

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

قام بنشر

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

اخواني و اساتذتي الاعزاء

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

انشاء مربع تحرير و سرد نوع مصدر الصف له قائمة قيم ... مربع التحرير و السرد هذا ليس له مصدر بيانات و لكن يتم اضافة القيم اليه من خلال زر اضافة و يتم حذف القيم منه باستخدام زر حذف ... و الفائدة من هذه الفكرة هي : 

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

 

المثال يتكون من جدول اسمه tbl1  و نموذج اسمه frmFavourites  و هذا النموذج مصدره الجدول

النموذج يحتوي على مربع تحرير و سرد اسمه ( comboSearch ) لإضافة و حذف الاشارات المرجعية من خلال زري امر احدهما يحمل علامة + اسمه cmdAdd للاضافة و الاخر يحمل علامة - و اسمه cmdDelete للحذف.

 

اكود المثال :

1: كود يجعل قيمة مربع التحرير و السرد عند فتح النموذج تساوي فراغ (Null) اي عدم وجود قيمة ظاهره به .. و هذا الكود هو بحدث عند الفتح للنموذج:

Me.comboSearch = Null

 

2: كود بحدث عند النقر لزر الحذف cmdDelete و هذا الكود خاص بحذف القيمة الظاهرة على مربع التحرير و السرد عند عدم الحاجة اليها .. و هذا الكود كالتالي :

On Error Resume Next
Me.comboSearch.RemoveItem (Me.comboSearch.Value)
Me.comboSearch = Null

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

السطر الثاني : يقوم بحذف العنصر المختار من مربع التحرير و السرد

السطر الثالث : يقوم بازالة هذه القيمة حتى لا تبدو ظاهرة

 

3: كود بحدث بعد التحديث لمربع التحرير و السرد و هذا الكود خاص بعملية البحث في سجلات النموذج بناءً على قيمة حقل الاسم بالنموذج و الكود كالتالي :

Me.txtName.SetFocus
DoCmd.FindRecord Me!comboSearch
If Me.comboSearch <> Me.txtName Then
   Me.comboSearch.RemoveItem (Me.comboSearch.Value)
   Me.comboSearch = Null
End If

السطر الاول : ينقل التركيز على مربع النص الخاص بالاسم حتى يتم تنفيذ عملية البحث.

السطر الثاني : يقوم بعملية البحث بناءً على قيمة مربع التحرير و السرد

السطر الثالث : باستخدام الجملة الشرطية If يتم مقارنة قيمة مربع التحرير و السرد مع قيمة مربع النص الخاص بالاسم . و هنا المقارنة بعدم المساواة  .. اي اذا كانت قيمة مربع التحرير و السرد لا تساوي قيمة مربع النص ... 

السطر الرابع : في حالة عدم المساواة فإن هذا يعني عدم تطابق عملية البحث اي لا يوجد سجل مطابق لقيمة مربع التحرير و السرد .

السطر الخامس : بناءً على عدم وجود قيمة كما هو موضح بالسطر الرابع فسيتم حذف هذا العنصر من مربع التحرير و السرد.

السطر السادس : و سيتم حذف القيمة الظاهرة على مربع التحرير و السرد الخاصة بالعنصر المحذوف.

السطر السابع : انهاء الجملة الشرطية If .

 

4: و هذا الكود خاص بزر اضافة الاشارات المرجعية للسجلات الى مربع التحرير و السرد ليتم استخدامها .. و هو كالتالي :

Dim i As Integer
If IsNull(Me.txtName) Then
    MsgBox "لا يوجد قيمة للإضافة", vbMsgBoxRight, "تنبيه"
    Exit Sub
End If
For i = 0 To Me.comboSearch.ListCount
    If Me.comboSearch.ItemData(i) = Me.txtName Then
       Exit For
       i = i + 1
    Else
       Me.comboSearch.AddItem (Me.txtName)
       MsgBox "تمت اضافة اشارة مرجعية", vbOKOnly + vbMsgBoxRight, "اشارة مرجعية"
       Exit Sub
    End If
Next

السطر الاول : تعريف متغير من نوع عدد صحيح

السطر الثاني : استخدام الجملة الشرطية If لاختبار قيمة مربع النص الخاص بالاسم ان كانت خالية .

السطر الثالث : سيتم اظهار رسالة للمستخدم تخبره بعدم وجود قيمة للاضافة .

السطر الرابع : الخروج من الاجراء

السطر الخامس : انهاء الجملة الشرطية If .

السطر السادس : استخدام الحلقة التكرارية For ... Next   للمرور على جميع عناصر مربع التحرير و السرد ، و تم استخدام هذه الحلقة التكرارية ليتم مقارنة قيمة مربع النص الخاص بالاسم مع كل عنصر من عناصر مربع التحرير و السرد حتى يتم تفادي اضافة قيمة موجودة  مسبقاً من ضمن عناصر مربع التحرير و السرد. 

السطر السابع : باستخدام الجملة الشرطية If  يتم اختبار قيمة عنصر مربع التحرير و السرد للفهرس المساوي للمتغير I علماً بأن القيمة ستبدأ بالصفر لاول عنصر من عناصر مربع التحرير و السرد و تزداد هذه القيمة بمقدار واحد ( كما هو موضح بالسياق )  فإذا كانت مساوية لقيمة مربع النص فإن هذا يعني ان العنصر هذا موجود مسبقاً من ضمن عناصر مربع التحرير و السرد.

السطر الثامن : يتم الخروج من الحلقة التكرارية.

السطر التاسع : اضافة واحد الى قيمة المتغير I ليتم المرور على العنصر التالي من عناصر مربع التحرير و السرد.

السطر العاشر : تعني و الا   .. اي اذا كانت قيمة عنصر مربع التحرير و السرد لا تساوي قيمة مربع النص . اي ان قيمة مربع النص الخاصة بالاسم غير موجودة ضمن عناصر مربع التحرير و السرد.

السطر الحادي عشر : يتم اضافة القيمة الى مربع التحرير و السرد.

السطر الثاني عشر : يتم اخبار المستخدم برسالة بأن العنصر تمت اضافته.

السطر الثالث عشر : يتم الخروج من الاجراء .

السطر الرابع عشر : انهاء الجملة الشرطية If .

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

 

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

 

اليكم المثال 

 

بالتوفيق للجميع

 

مفضلة البحث لجلسة العمل الواحدة.rar

  • Thanks 2
قام بنشر

الله الله عليك الاخ الفاضل / يوسف احمد 

نحن المبتدئين

شرح جميل ووافي من خبير وهذا المثال سوف يوفر علي الكثير من اكواد البحث

جعله الله في ميزان حسناتك 

  • Like 1
قام بنشر

السلام عليكم ورحمة الله وبركاته
شكرا لك استاذي الحبيب على هذه الفكرة

5 ساعات مضت, يوسف أحمد said:

For i = 0 To Me.comboSearch.ListCount

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

  • Like 1
قام بنشر

بارك الله فيك اخي العزيز حلبي و شكراً جزيلاً لك على مرورك الكريم :fff:

 

الاستاذ و الاخ العزيز شيفان :fff: : الكود يمر على جميع عناصر مربع التحرير و السرد ليتأكد ان كان هناك تكرار او لا حتى تتم الاضافة لكل عنصر على حدة و في نفس الوقت تجنب اضافة عنصر موجود سابقاً  و هنا تبدأ الحلقة من صفر حيث ان اول عنصر في مربع التحرير و السرد يساوي صفر ثم نختبر قيمة مربع النص مع العنصر الذي فهرسة يساوي المتغير I   فاذا تساوت القيم فيخرج من الحلقة و لا يضيف عنصر جديد لمربع التحرير و السرد  .. و يتم اضافة واحد الى قيمة المتغير ليتم استكمال الحلقة .. اما اذا كانت قيمة مربع النص لا تساوي قيمة مربع التحرير و السرد فهنا تضاف القيمة الى عناصر مربع التحرير و السرد ... 

 

اشكرك جزيل الشكر على مرورك العطر و اتمنى ان تكون الفكرة وصلت بشكل اوضح

  • Thanks 1
قام بنشر
18 دقائق مضت, يوسف أحمد said:

الاستاذ و الاخ العزيز شيفان :fff: : الكود يمر على جميع عناصر مربع التحرير و السرد ليتأكد ان كان هناك تكرار او لا حتى تتم الاضافة لكل عنصر على حدة و في نفس الوقت تجنب اضافة عنصر موجود سابقاً  و هنا تبدأ الحلقة من صفر حيث ان اول عنصر في مربع التحرير و السرد يساوي صفر ثم نختبر قيمة مربع النص مع العنصر الذي فهرسة يساوي المتغير I   فاذا تساوت القيم فيخرج من الحلقة و لا يضيف عنصر جديد لمربع التحرير و السرد  .. و يتم اضافة واحد الى قيمة المتغير ليتم استكمال الحلقة .. اما اذا كانت قيمة مربع النص لا تساوي قيمة مربع التحرير و السرد فهنا تضاف القيمة الى عناصر مربع التحرير و السرد ... 

 

اشكرك جزيل الشكر على مرورك العطر و اتمنى ان تكون الفكرة وصلت بشكل اوضح

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

  • Like 3
قام بنشر
26 دقائق مضت, Shivan Rekany said:

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

بارك الله فيك استاذنا العزيز شيفان

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

  • Like 1
قام بنشر
1 دقيقه مضت, يوسف أحمد said:

بارك الله فيك استاذنا العزيز شيفان

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

تمام الان انا فهمت من قصدك 
شكرا لك تعبت معاي :smile:

  • Like 1
قام بنشر

الفكرة وطريقة تسجيل البيانات بحد ذاتها رائعة 

أتمنى من الاستاذ @يوسف أحمد أن يوسع هذه الفكرة بجعل القيم تبقى في الذاكرة حتي وإن تم إغلاق النموذج! لأن الرجوع لجلسة العمل يكون في الغالب بعد إنهاء جلسة العمل.

يبدأ العمل مثلا بخيار هل تريد تسجل جلسة العمل؟  فيبدأ التسجيل للسجلات التي يجرى العمل عليها....

الرجوع للعمل إذا كان هناك تسجل مسبق يبدأ مثلا بخيار هل تريد الرجوع لجلسة العمل السابقة... 

يمكن استخدام Collection Object طالما قاعدة البيانات مفتوحة.. كما يمكناستخدام جدول خاص إذا كان طلب الرجوع إلى جلسة البيانات السابقة بعد إغلاق قاعدة البيانات

أتمني لك التوفيق..

  • Like 1
قام بنشر
23 ساعات مضت, محمد سلامة said:

السلام عليكم

كيف حالك استاذ يوسف :fff:. اتمني تكون بخير 

ماشاء الله مبدع دائما.. مثال جميل وله فوائد جيدة

 

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

بخير استاذنا العزيز محمد سلامة دامكم بخير و عافية 

الاجمل مرورك بارك الله فيك .. اشكرك على مرورك العطر  .. شرفتنا يالغالي

9 ساعات مضت, أبو إبراهيم الغامدي said:

الفكرة وطريقة تسجيل البيانات بحد ذاتها رائعة 

أتمنى من الاستاذ @يوسف أحمد أن يوسع هذه الفكرة بجعل القيم تبقى في الذاكرة حتي وإن تم إغلاق النموذج! لأن الرجوع لجلسة العمل يكون في الغالب بعد إنهاء جلسة العمل.

يبدأ العمل مثلا بخيار هل تريد تسجل جلسة العمل؟  فيبدأ التسجيل للسجلات التي يجرى العمل عليها....

الرجوع للعمل إذا كان هناك تسجل مسبق يبدأ مثلا بخيار هل تريد الرجوع لجلسة العمل السابقة... 

يمكن استخدام Collection Object طالما قاعدة البيانات مفتوحة.. كما يمكناستخدام جدول خاص إذا كان طلب الرجوع إلى جلسة البيانات السابقة بعد إغلاق قاعدة البيانات

أتمني لك التوفيق..

 

الاروع مروك استاذنا الغالي و الرائع ابو ابو ابراهيم

 

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

 

مرفق المثال و به وحدة نمطية بها تعريف لــمجموعة اسميتها cl لتضاف اليها القيم و يتم من خلالها اعادة العناصر لمربع التحرير و السرد في حالة موافقة المستخدم على استخدام الجلسة السابقة و في حالة اختار المستخدم الخيار لا من الرسالة فان العناصر ستحذف من المجموعة .

 

 

مفضلة البحث لجلسة العمل الواحدة.rar

  • Like 2
قام بنشر

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

 

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

 

بالتوفيق للجميع 

مفضلة البحث لجلسة العمل الواحدة.rar

قام بنشر

أشكرك على سرعة الاستجابة أستاذ @يوسف أحمد لكن قبل أبدأ المناقشة أعيد تسجيل اعتراض الاستاذ @Shivan Rekany التالي

في 10/19/2017 at 15:47, Shivan Rekany said:

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

نعم!  لماذا لا يكون البحث في جميع الأسماء؟! ولماذا أقوم بتسجيل ما أريد البحث عنه؟!...

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

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

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

وبهذه الطريقة تكتمل الصورة الجمالية للفكرة.. ونكون أرضينا الجميع!

  • Like 1
قام بنشر (معدل)
28 دقائق مضت, أبو إبراهيم الغامدي said:

أشكرك على سرعة الاستجابة أستاذ @يوسف أحمد لكن قبل أبدأ المناقشة أعيد تسجيل اعتراض الاستاذ @Shivan Rekany التالي

نعم!  لماذا لا يكون البحث في جميع الأسماء؟! ولماذا أقوم بتسجيل ما أريد البحث عنه؟!...

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

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

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

وبهذه الطريقة تكتمل الصورة الجمالية للفكرة.. ونكون أرضينا الجميع!

الشكر موصول لكم استاذ ابو ابراهيم

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

 

اشكرك لك اهتمامك و متابعتك استاذنا :fff:

تم تعديل بواسطه يوسف أحمد

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.

×
×
  • اضف...

Important Information