أخواني الافاضل
كيف يتم عدم تسجيل بيانات في تاريخ سابق ؟ ولا يتأثر البرنامج بتغيير ساعة الكمبيوتر
شكراً لكم
أخواني الافاضل
كيف يتم عدم تسجيل بيانات في تاريخ سابق ؟ ولا يتأثر البرنامج بتغيير ساعة الكمبيوتر
شكراً لكم


الأخ الفاضل ...
اقتباسكيف يتم عدم تسجيل بيانات في تاريخ سابق ؟
الشق الأول: يمكنك فحص ومراجعة (عمل شرط Validation) على بيانات التاريخ قبل تسجيلها بحيث لا تسمح بإدخال تاريخ يسبق التاريخ الحالى
اقتباسولا يتأثر البرنامج بتغيير ساعة الكمبيوتر
الشق الثانى: كى لا يتأثر بساعة الكمبيوتر، فلا تعتمد على ساعة الكمبيوتر، فإذا كان الجهاز متصل بشبكة يمكنك الإعتماد على خدمات الوقت فى الشبكة مثلاً على ساعة الخادم (Server) فى فحص التاريخ (بتشغيل خدمة daytime "منفذ Port 13" راجع RFC 867 - أو خدمة time "منفذ Port 37" راجع RFC 868)
أما إذا كان غير متصل بالشبكة، فيمكنك فى كل مرة يتم تشغيل البرنامج الأحتفاظ بالتاريخ فى قاعدة البيانات ومقارنت أخر تاريخ لتشغيل البرنامج بالتاريخ الحالى للجهاز، فإذا كان السابق أكبر من الحالى ، تعرف أنه يوجد تلاعب بالتاريخ، (طبعاً المقارنة أولاً وفى حالة التلاعب لن تحفظ التاريخ الحالى فى قاعدة البيانات)
مثال: DayTime.zip موجود فى مطلوب كود استخدام توقيت السيرفر لكل الاجهزة المرتبطة
مثال أخر على استخدام daytime: http://users.actcom.co.il/~choo/lupg/tutor...aytime-client.c
مثال للإختبار: daytime.rar
شكراً
تم تعديل هذه المشاركة بواسطة Eng. Usama El-Mokadem في 16 فبراير 2008 في 13:24
Nothing is impossible, the word impossible itself says that: I M - Possible
أخواني الافاضل
لقد انشئت كود في حدث On Exit للحقل Zdate
If Me.issu_date.Text < Now() Then MsgBox "لا يمكنك التسجيل بتاريخ سابق" End If
ولكن واجهتني مشكلة فعلا البرنامج يعطيني رسالة بيفيد بانة لا يمكنك التسجيل بتاريخ سابق ولكن هناك مشكلة اخري وهي عندما يتم التسجيل بتاريخ اليوم يعطيني البرنامج بانني ايضا لا يمكنني التسجيل بتاريخ اليوم فبرجاء المساعدة في حل هذه المشكلة
حيث انني اريد ان يتم تسجيل بيانات بتاريخ اليوم لان هذا التاريخ يعتبر تاريخ غير سابق
مرفق مثال
شكراً لكم


أخي الغالي
Eng. Usama El-Mokadem
شكراً الحمد لله توصلت لنصف الاجابة وهي عدم تأثر البرنامج بساعة الكمبيوتر بتغيير التواريخ لان مدير الشبكة قام بغلق الساعة بحيث لا يمكن العبث بها . .
ولكن الشق الثاني وهو كما اوضحت لك في المثال المرفق استخدمت قاعدة IF لحل المشكلة ولكن المشكلة في الكود فكما تري ان البرنامج يعطيني رسالة ( بعدم السماح بستجيل بتاريخ سابق في حالتين
الحالة الاولي وهي المطلوبة
عدم التسجيل في تاريخ سابق
الحالة الثانية والتي هي غير مطلوبة
عدم السماح بتسجيل التاريخ ( تاريخ اليوم ) لماذا ؟ مع ان تاريخ اليوم يعتبر تاريخ غير سابق
برجاء مشاهدة المرفق في المشاركة السابقة والافادة
شكرا لكم


الأخ الفاضل ...
المشكلة فى أستخدام الدالة ()Now فى تعطى التاريخ والوقت وليس التاريخ فقط، بالصورة
02/06/2007 01:12:30
أما المتغير الذى تستخدمه فيعطى التاريخ فقط لذلك يعتبر الساعة صفر وتتعامل معه المقارنة كالتالى
02/06/2007 00:00:00
وبالتالى يتحقق الشرط، وهو أن التاريخ ثابت لكن التسجيل فى ساعة سابقة، وبالتالى فى وقت سابق
وللتغلب على ذلك يجب تجاهل الساعة ومقارنة التاريخ فقط، فبدلاً من أستخدام ()Now يمكنك استخدام:
DateValue(Now())
ويصبح بالشكل التالى:
Private Sub zdate_Exit(Cancel As Integer) If Me.zdate.Text < DateValue(Now()) Then MsgBox "لا يمكنك التسجيل بتاريخ سابق" End If End Sub
شكراً
تم تعديل هذه المشاركة بواسطة Eng. Usama El-Mokadem في 6 فبراير 2007 في 18:05
Nothing is impossible, the word impossible itself says that: I M - Possible
أخي الغالي
Eng. Usama El-Mokadem
شكراً علي مجهودك معي ولكن هذا الكود لم يفعل شيء فهذا الكود في جميع الاحوال يعطي رسالة لا يمكن التسجيل في تاريخ سابق ... برجاء ارفاق مثال لرؤية الموضوع بصورة اوضح


الأخ الفاضل ...
مرفق المثال الذى أرفقتة بعد التعديل، فى الحقيقه يعمل معى (Windows XP Pro - Access 2003) تنسيق التاريخ (mm/dd/yyyy)
وشكراٍ
Nothing is impossible, the word impossible itself says that: I M - Possible
لأخ الفاضل ...
هذا المثال البسيط لتوضيح إكتشاف التلاعب بالتاريخ (حيث يمكنك استخدامه بعد تطويره لمت يناسبك فى مشروعك):
الجدول Options يقوم بتسجيل أخر تشغيل للبرنامج
النموذج Startup عند تشغيله يقوم بمقارنة أخر تايخ بالتاريخ الحالى ، وعند إكتشاف تلاعب يخرج رسالة تفيد بذلك(أو أى كود تريد البرنامج أن ينفذه يمكنك كتابتة فى الدالة InvaledDate)، فى حالة التاريخ سليم يخرج رسالة تفيد بذلك(أو أى كود تريد البرنامج أن ينفذه يمكنك كتابتة فى الدالة ValedDate) فى الـ(Module)
المتغير العام LastDate: يحتوى على تاريخ أخر تشغيل للبرنامج (يمكن استخدامه فيما بعد)
المتغير العام IsValedDate: يكون True فى حالة عدم وجود تلاعب و False فى حاله وجود تلاعب
وشكراً
Nothing is impossible, the word impossible itself says that: I M - Possible
بسم الله
مشاء الله افكار رائعة
اخى محمد
اسمحى باضافة بسيطة لكودك الأول و هى علامة = - هذا رغم خبرتى الصغيرة بالنسبة لكم -
ليصبح الكود كالتالى بحيث يسمح باستخدام اليوم الحالى و ما قبلة
If Me.issu_date.Text <= Now() Then MsgBox "لا يمكنك التسجيل بتاريخ سابق" End If
بالتوفيق إن شاء الله
الأصيل
حاولت الون علامة الــ = لكن منفعش .. ؟؟؟
المهم ارجو ان تنفعك
تم تعديل هذه المشاركة بواسطة الاصيل في 30 أبريل 2007 في 11:17
قال أبن القيم : أكثروا من الخير فينتشر .. و أقلوا من الشر فيندثر ..
بسم الله الرحمن الرحيم
بارك الله فيكم اخواني الكرام
موضوع ممتاز
هذا الموضوع مغلق.