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

استشارة حول نموذج للتنبيهات


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

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

لدي نموذج يفتح مع بداية البرنامج وهو يحتوي على مواعيد محددة بالوقت لهذا اليوم

سؤالي بالتحديد ... هل طريقتي بإستخدام هذا الكود صحيحه ولن تبسبب مشاكل للنظام 

لو فرضنا ان البرنامج يعمل طوال اليوم 

هذا هو الكود وفي المرفق توضيح اكثر 

Private Function sSA()
On Error Resume Next
Dim i, r As Integer
Dim rs As Recordset
Set rs = Me.RecordsetClone
r = rs.RecordCount
rs.MoveLast
rs.MoveFirst
For i = 1 To r
If rs!mish_time = Time() Then
DoCmd.OpenForm "alarm"

End If
rs.MoveNext
Next
rs.Close
Set rs = Nothing
End Function

يتم استدعاء هذه الدالة عند حدث عداد الوقت كما هو موضح في النموذج frm_missions

شكرا لكم 

AlartSysteM2003.rar

تم تعديل بواسطه سعيد صواب
  • Like 2
رابط هذا التعليق
شارك

51 دقائق مضت, سعيد صواب said:

سؤالي بالتحديد ... هل طريقتي بإستخدام هذا الكود صحيحه ولن تبسبب مشاكل للنظام 

لو فرضنا ان البرنامج يعمل طوال اليوم 

الطريقة مجربة وسليمة 100%

ويمكن اخفاء النموذج المسؤول ليعمل بصمت في الخلفية

تصور انه يمكن ايضا ان يرسل لك رسائل sms يذكرك بمواعيدك

  • Like 3
رابط هذا التعليق
شارك

اخي سعيد

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

ثانيا لاحظت التالي وبالنظر في الكود السابق :

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

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

3. خلو الرسالة من موضوع التنبيه فقط ظهور الرسالة

4. لو كان هناك موضوعين بنفس الوقت هل كودك السابق سيظهر النموذج مرتين ؟

اعتقد انك لم تجرب الكود عمليا !!

 

تحياتي

 

  • Like 1
رابط هذا التعليق
شارك

 حياك الله استاذ رمهان 

ومشكور على نصائحك 

للتوضيح البيانات مبنية على استعلام بتاريخ اليوم لذا ومبدئيا لا احتياج لاستخدام التاريخ

بالنسبة لخلو الرسالة .... فهذا لم اعمل عليه بعد ...

السؤال كان فقط عن جدوى الطريقة بإستخدام الدالة الموضحة بالمشاركة السابقة

==============

9 دقائق مضت, رمهان said:

اخي سعيد

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

 

 

 

هل من طريقة لديك استاذ رمهان تغنينا عن عمل اللوب واللف في كل ثانية 

 

نستنير بأفكاركم وما طرحت الموضوع الا للإستشارة والنصيحة

 

شكرا للجميع

رابط هذا التعليق
شارك

اخي سعيد

اضافة الى الملاحظات السابقة

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

وهذه فكرة بسيطة 

Private Sub Form_Timer()
If DCount("*", "tbl_MIssions", "mish_time=time()") > 0 Then DoCmd.OpenForm "alarm"
clock.Caption = Time()
End Sub

بالتوفيق

رابط هذا التعليق
شارك

شكرا لك استاذ رمهان

اعرف هذه الطريقة استاذ رمهان

وكان رأيي أن من الأفضل بدلا ان يلف على جميع بيانات الجدول ليخرج لي تاريخ اليوم ثم الوقت

ان احضر له تاريخ اليوم بالإستعلام .. ومن بعدها يتبقى الوقت فقط وسجلات الوقت لهذا اليوم لن تتعدى  20 إلى 30 في اقصى الحالات.

انا رحوم بالبرنامج ..  هههه

=====

ولكننا لم نستغني عن اللف في الحالتين ... وربما وهذا رأيي المتواضع ان لفتي ارحم من لفتك استاذي ولو بخطوات .. ههههه

منتظر رأيك 

 

تم تعديل بواسطه سعيد صواب
رابط هذا التعليق
شارك

كلامك صحيح واوافقك !

يمكن يصبح الكود هكذا 

Private Sub Form_Timer()
If DCount("*", "tbl_MIssions", "mish_time=time() and mish_date=date()") > 0 Then DoCmd.OpenForm "alarm"
clock.Caption = Time()
End Sub

تحياتي

  • Like 2
رابط هذا التعليق
شارك

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

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

شكرا

رابط هذا التعليق
شارك

6 دقائق مضت, سعيد صواب said:

وبرأيك هذه الطريقة افضل من الطريقة السابقة ...

شكرا

برايي افضل

7 دقائق مضت, سعيد صواب said:

 

 ام ان هذه الطريقة تمهيد لحل آخر يغني عن عمل اللوب كل ثانية 

شكرا

بهذا الراي لم يعد هناك حاجة او وجود ل اللوب !! الكود كافي بالعد كل ثانية واظهار الفورم !

بالتوفيق

  • Like 2
رابط هذا التعليق
شارك

4 دقائق مضت, سعيد صواب said:

شكرا وجزاك الله كل خير 

 

العفو

ومارايك لو نكمل لكي يكون العمل عملي اكثر 

لو حبيت اعرض الموضوع ؟ ولو كان هناك اكثر من موضوع بنفس الوقت ؟ 

اريد محاولتك استاذ سعيد فنحن كلنا نتعلم من بعض !

بالتوفيق

رابط هذا التعليق
شارك

حياك الله استاذ رمهان

وزادك الله تواضع وعلما

لي الشرف ان اتناقش مع شخص بمقامك استاذ رمهان ..

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

ولو ان لب الفكرة هو هذا النموذج ..

===

ولكن مبدئيا وكل شئ ممكن يتغير عند العمل الفعلي  الفكرة تتلخص في التالي

عند عرض التنبية يكون هناك بيانات التنبية كاملة .... موضوع التنبية ومحتوياته ...

ومربع نص .. يتم فيه ادخال بيانات رسالة يكتبها المستخدم ... ترسل بالإيميل وبرسالة نصية كذلك .. عند الحاجه

 

=====

بالنسبة لموضوع لو كان هناك اكثر من تنبيه في نفس اللحظة .. او كان هناك تنبيهات لم يطلع عليها المستخدم

فكرتي هي وضع مربعي نص ك عدادات  في نموذج تنبيه ... احدهما للتنبيهات الفائته عند الضغط عليه يفتح استعلام بهذا الخصوص

وكذلك نفس الفكرة بالتنبيهات الحالية ..

======

واكرر شكري لك استاذ رمهان وللأستاذ ابوخليل على تعاونكم ..

حينما اقوم بعمل هذه الأشياء سأعرضها هنا بإذن الله.

عطيتوني وجه اليومين هذي وانا صدقت ..

شكرا مرة اخرى

 

 

تم تعديل بواسطه سعيد صواب
رابط هذا التعليق
شارك

العفو استاذ سعيد

وانا اسحب طلبي فلك حرية وقتك ! 

واعتقد فكرتك هي برنامج بحد ذاته وتحتاج لوقت كبير ! 

ادعو لك بالتوفيق 

يغلق هذا الموضوع :wavetowel:

  • Like 1
رابط هذا التعليق
شارك

السلام عليكم.. وتحياتي للجميع

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

تم تعديل بواسطه محمد سلامة
  • Like 1
رابط هذا التعليق
شارك

في ١٨‏/٣‏/٢٠١٦ at 00:04, سعيد صواب said:

جزاك الله خير استاذ محمد

اي كود تقصد 

شكرا

هذا الكود الذى اقصده اخى سعيد

تحياتى لك

Private Sub Form_Timer()
On Error Resume Next
Dim I As Integer
With MyUser
I = Nz(DLookup("[ID_wd]", "tbl_wared_d", "[ReadYn] = false  and [UserRecv]='" & .UserName & "'"), 0)
If I <> 0 Then
Me.new_msg = DCount("[ID_wd]", "[tbl_wared_d]", "[ReadYn] = false  AND [UserRecv]='" & .UserName & "'")
Me.new_msg.Visible = True
Else
Me.new_msg.Visible = False
End If
End With

وهذا ايضا

Private Sub Form_Open(Cancel As Integer)
On Error Resume Next
Dim intStore As Integer
intStore = DCount("[id_m]", "[tbl_motaba]", "[Date_End] <=Date() AND [Check1] =0 ")
If intStore = 0 Then
Exit Sub
Else
If MsgBox(" áÏíÜÜÜÜß ÚÜÜÜÏÏ " & intStore & " ãÚÜÜÜÇãáÜÜÜÜÉ " & _
          " ÇäÊåÊ ãÏÉ ÇäÌÇÒåÇ ÜÜ Úáíß ãÊÇÈÚÊåã " & vbCrLf & vbCrLf & _
          " " & _
          "åá ÊÜÜÜæÏ ÑÄíÊåÜÜÜÜã ÇáÂä ¿ " & _
          " ", vbYesNo Or vbExclamation Or vbDefaultButton1, _
          "ÊäÈíå ÈÇäÊåÇÁ ÇáãÚÇãÜÜÜÜáÇÊ") = vbYes Then
DoCmd.OpenForm "frm_search_motaba"
Else
DoCmd.close acForm, "frm_search_motaba", acSaveYes
Exit Sub
End If
End If
End Sub

تحياتى لك

رابط هذا التعليق
شارك

وما دمنا نعمل ضمن النموذج  هذا كود يقوم بالبحث والمقارنة

Dim i
i = Time()
mish_time.SetFocus
DoCmd.FindRecord i, acEntire, False, acSearchAll, False, acCurrent, True
If i = mish_time Then
DoCmd.OpenForm "alarm"
End If

 

  • Like 1
رابط هذا التعليق
شارك

السلام عليكم:smile:

 

انا على سفر ، وبعيد عن الكمبيوتر ، لهذا السبب انا بعيدا عن المنتدى :smile:

 

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

الكمبيوتر يعطي أولوية تنفيذ أوامر  CPU إلى برامج الوندوز ، ثم البرامج الاخرى ،

مما قد يُؤخر تنفيذ أوامر برنامج الاكسس ثانية او اثنين ،

إذًا ، عند تنفيذ الأمر التالي او أمر مثله:

If rs!mish_time = Time() Then

قد يكون CPU الكمبيوتر مشغولا ، وعند تنفيذ الامر ، الوقت لن يكون مطابقاً ، لأننا نقارن الوقت بالثواني ، وحينها ، فالمعادلة لن تُنفّذ !!

لذلك ، ولتفادي هذه المشكلة ، اجعل مقارنة الوقت:

إما بالساعة والدقيقة وبدون ثواني ،

وإما اجعل المقارنة ">=" بدل "="  ، او شئ من هذا القبيل ،

وإلا ، فقد يفوتك موعد ولن تعرف لماذا :smile:

 

جعفر

  • Like 2
رابط هذا التعليق
شارك

الان, jjafferr said:

السلام عليكم:smile:

 

انا على سفر ، وبعيد عن الكمبيوتر ، لهذا السبب انا بعيدا عن المنتدى :smile:

 

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

الكمبيوتر يعطي أولوية تنفيذ أوامر  CPU إلى برامج الوندوز ، ثم البرامج الاخرى ،

مما قد يُؤخر تنفيذ أوامر برنامج الاكسس ثانية او اثنين ،

إذًا ، عند تنفيذ الأمر التالي او أمر مثله:

If rs!mish_time = Time() Then

قد يكون CPU الكمبيوتر مشغولا ، وعند تنفيذ الامر ، الوقت لن يكون مطابقاً ، لأننا نقارن الوقت بالثواني ، وحينها ، فالمعادلة لن تُنفّذ !!

لذلك ، ولتفادي هذه المشكلة ، اجعل مقارنة الوقت:

إما بالساعة والدقيقة وبدون ثواني ،

وإما اجعل المقارنة ">=" بدل "="  ، او شئ من هذا القبيل ،

وإلا ، فقد يفوتك موعد ولن تعرف لماذا :smile:

 

جعفر

أسأل الله أن يجعل سفرك سفر بر وتقوى وأن يرزقك من العمل ما يرضى 
اسأل الله أن يهون عليك سفرك هذا وأن يردّك سالماً غانماً
وفقك الله لكلّ خير وبارك فيك 
:wub:

رابط هذا التعليق
شارك

ماشاء الله !

الموضوع مغلق ياشباب !!!!!:blink::blink:

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

اخي جعفر 

لم تفوت علي ملاحظتك وبعيد عن التاخر في المعالج لاحظ انا قلت 

في 3/18/2016 at 18:58, رمهان said:

4. لو كان هناك موضوعين بنفس الوقت هل كودك السابق سيظهر النموذج مرتين ؟

اعتقد انك لم تجرب الكود عمليا !!

تحياتي

 

وبما انكم واصلتو النقاش ! اتمنى اتحافنا بحل للنقطة السابقة وبظهور التنبيه على شكل  msgbox  وبها موضوع التنبيه !

تحياتي 

رابط هذا التعليق
شارك

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان
×
×
  • اضف...

Important Information