الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تاريخ الويندوز

مغلقمُجاب
بدأه أواب في 9 نوفمبر 2013 · 11 رد · 691 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

أحياناً نصنع برنامجاً تجريبياً لمدة معينة

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

فهل من طريقة أوكود يتحكم في تاريخ الويندوز بالجهاز بحيث يجعله مطابق للتاريخ الفعلي؟

أي يمنع اللعب بتاريخ الجهاز

84CJO.gif

#2

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

 

نعمل حقلين حقل للبداية والأخر يعد الأيام على التاريخ المكتوب فقط 

 

 

ولا علاقة له بتاعريخ الويندوز

#3

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

اي تاريخ نكتبه مرتبط بالضرورة بتاريخ الجهاز

84CJO.gif

#4

للرفع

84CJO.gif

#5

للرفع

84CJO.gif

#6 أفضل إجابة
اخي الفاضل : اواب

 

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

 

سأشرح لك مثال على طريقة صنع برامج تجريبيه وتستطيع اجراء التجربة عليه .

 

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

 

وعدم تشغيله مع مراعاة عدم تمكين المستخدم من العبث بتاريخ الجهاز .

 

الخطوات :

 

1. انشئ جدول بإسم T1 وضع به حقل اسمه Date1 ونوع الحقل تاريخ / وقت ولا تضع في الجدول اي شيء وليس له مفتاح اساسي .

 

2. ضع هذا الكود او الدالة المسئولة عن حذف الجدول الذي قمنا بإنشاؤه عند انتهاء وقت البرنامج في نموذجك المطلوب ويكون الكود في قسم العام ( جنيرال ) General 

 

Function TableDelete() On Error Resume Next

Dim MyDb As Database

Dim MyTable As TableDef

Dim MyTableCount As Integer

 

Set MyDb = Application.CurrentDb

MyTableCount = MyDb.TableDefs.Count

For i = MyTableCount - 1 To o Step -1

Set MyTable = MyDb.TableDefs(i)

MyTableName = MyTable.Name

If Left$(MyTableName, 4) <> "Msys" Then MyDb.TableDefs.Delete (MyTableName)

Next

MyDb.Close

End Function

 

 

ضع هذا الكود في حدث عند الفتح للنموذج

 

Private Sub Form_Open(Cancel As Integer) On Error GoTo MyErr:

 

Dim MyFirst As Date

Dim MyInDate

Dim MyTableName As String

MyInDate = DFirst("[Date1]", "[T1]")

If Not IsNull(MyInDate) Then

MyFirst = MyInDate

Else

DoCmd.SetWarnings False

DoCmd.RunSQL ("INSERT INTO T1 ( Date1 ) SELECT Date();")

DoCmd.SetWarnings True

MyFirst = Date

End If

 

If MyFirst <= Date - 3 Then ' الوقت هنا تم تحديده بثلاثة ايام

MsgBox "مضى على تشغيل البرنامج 3  أيام وسيتم ايقاف البرنامج"

Call TableDelete

Else

If MyFirst > Date Then

MsgBox "تم التلاعب بتاريخ الجهاز وسيتم ايقاف تشغيل البرنامج"

Call TableDelete

End If

End If

Exit Sub

 

MyErr:

If Err.Number = 3078 Then

MsgBox " تم تعطيل البرنامج" & vbCrLf & vbCrLf & _

" مع السلامة " & vbCrLf & vbCrLf & _

" أختكم زهره", vbOKOnly + vbMsgBoxRight + vbExclamation

DoCmd.Quit

Else

MsgBox Err.Number & vbCrLf & Err.Description

End If

 

End Sub

 

لاحظ من خلال هذا الكود انه اذا انتهت مدة البرنامج حسب ما تم تحديده له وهي ثلاثة ايام ( وتستطيع زيادتها الى 120 يوم حوالي ثلاثة اشهر ) وبعدها يتوقف البرنامج

 

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

 

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

 

للتجربه حاول العبث بتاريخ الجهاز وذلك بزيادته الى خمسة 5 ايام وانظر النتيجه ( سيتم حذف الجدول مباشرة ولن يعمل البرنامج وعليك انشاء جدول جديد كما في

 

الشرح وتغيير التاريخ في الكود كما كان .

 

 

 


 

 

 

بالتوفيق
2
#7

أحسنت وبارك الله فيك

سيتم التجريب ونرى النتيجة

 

 

وتسلم الأيادي

84CJO.gif

#8

الأخت الكريمة          زهرة المنتدى

لقد جربت ما أرشرتي إليه في هذه المشاركة 

ولكن تم حذف جميع الجداول من القاعدة

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

فما الحل؟؟

84CJO.gif

#9
أواب كتب:

الأخت الكريمة          زهرة المنتدى

لقد جربت ما أرشرتي إليه في هذه المشاركة 

ولكن تم حذف جميع الجداول من القاعدة

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

فما الحل؟؟

 

 

بارك الله بك اخي الكريم : اواب

 

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

 

الحل بارك الله بك ان تعيد ربط الجداول فقط وتقوم مشكورا بإضافة الجدول  T1 وبه حقل وحيد وهو Date1  بتنسيق تاريخ / وقت  ثم تعيد تشغيل البرنامج من جديد

 

وسيبدأ في وضع التاريخ الجديد في الجدول T1

 

بالتوفيق

تم تعديل هذه المشاركة بواسطة zahrah في 12 نوفمبر 2013 في 06:58

#10

الأخت الكريمة          زهرة المنتدى

أليس من الأفضل -بدلا من حذف جميع الجداول - أن يحذف الجدولT1

أو يعاد تسمية الجداول        tablei إلى         tablei2

84CJO.gif

#11
أواب كتب:

الأخت الكريمة          زهرة المنتدى

أليس من الأفضل -بدلا من حذف جميع الجداول - أن يحذف الجدولT1

أو يعاد تسمية الجداول        tablei إلى         tablei2

 

 

اخي الفاضل : اواب

 

كل هذه الأمور عائدة للمبرمج وفيما يراه مناسب لبرنامجه ولست مقيد بشيء معين

 

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

 

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

 

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

 

 

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

 

1. قم بحذف دالة حذف الجداول   Function TableDelete  من الكود البرمجي

 

Function TableDelete()
On Error Resume Next
Dim MyDb As Database
Dim MyTable As TableDef
Dim MyTableCount As Integer
 
Set MyDb = Application.CurrentDb
MyTableCount = MyDb.TableDefs.Count
For i = MyTableCount - 1 To o Step -1
Set MyTable = MyDb.TableDefs(i)
MyTableName = MyTable.Name
If Left$(MyTableName, 4) <> "Msys" Then MyDb.TableDefs.Delete (MyTableName)
Next
MyDb.Close
End Function
 
2. في حدث عند فتح النموذج ستجد استدعاء دالة حذف الجداول سنقوم بإستبدال هذا السطر 
 
Call TableDelete
 
 
بهذا السطر الجديد
 
DoCmd.DeleteObject acTable, "T1"
 
 
بالتوفيق

تم تعديل هذه المشاركة بواسطة zahrah في 12 نوفمبر 2013 في 06:58

1
#12

أحسنت وبارك الله فيك


سيتم التجريب ونرى النتيجة


84CJO.gif

هذا الموضوع مغلق.

مواضيع مشابهة