اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

عدم فتح قاعدة البيانات عند محاولة نسخها الى جهاز أخر


ابو جودي

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

20 دقائق مضت, ابو جودي said:

526752675253525245484852554552684948455648535445675167485270535453485149

ماشاء الله .. اشتغل

ياريت تشرح لنا الموضوع استاذ @ابو جودي

في السابق لم اهتم لتلك الامور .. لكن الملف جميل واتمنى معرفة ما يحصل

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

من عيونى يا باش مهندس

شرح الاكواد بالوحدة النمطية تفصيلا

اولا اسم الجدول ولانه سوف يتم استخدامه كثيرا ولاننى احببت تصعيب الامر قليلا استخدمت الـ Unicode

Public Function tblUUID()
    tblUUID = Chrw("85") & Chrw("115") & Chrw("121") & Chrw("115") & Chrw("83") & Chrw("101") & Chrw("99") & Chrw("117") & Chrw("114") & Chrw("101") & Chrw("100")
End Function

فلو قمنا بقرائته فى نافذة immediate من خلال 
?tblUUID() لتنتج لنا اسم الجدول UsysSecured

كما فى الصورة الاتية

001.png.429a94d7353ed00ec7dbd91d3aae8c5c.png

2-

التأكد من وجود الجدول فى قاعدة البيانات من عدمه

Public Function ifTableExists(tblName As String) As Boolean
    If DCount("[Name]", "MSysObjects", "[Name] = '" & tblName & "'") = 1 Then ifTableExists = True
End Function

3- السطر الاول انشاء الجدول من خلال استعلام :wink2:
    السطر الثانى تشغيل الـ Function  الاتى ChckUUID  ,وسيتم شرحه لاحقا

Public Function CrtTblUUID()
    DoCmd.RunSQL "CREATE TABLE " & tblUUID & "([ID] counter," & "[UUIDPC] text," & "[ApprovedNo] text," & "CONSTRAINT [Index1] PRIMARY KEY ([ID]));"
    ChckUUID
End Function

4- التأكد من وجود قيم فى الجدول 

Public Function CountRec() As Boolean
    If DCount("*", tblUUID) = 1 Then CountRec = True
End Function

5-التأكد من صلاحية مقتاح التسجيل الذى ارسلته لكم عند التجربة من خلال استخدام عدد 2 Function
 - ToGetAprv
- GetUUID()

وسيأتى شرحهم تباعا

Public Function ChkApprovedNo() As Boolean
    If DLookup("ApprovedNo", tblUUID) = ToGetAprv(GetUUID()) Then ChkApprovedNo = True
End Function

ملاحظة عند الشرح الان وحدتنى قمت بعمل function  باسم اخر لنفس الوظيفة وسوف اقوم بحذفه اسم ال function  هو   Public Function validat() As Boolean

اعتذر على ذلك الخطأ

 

6- هذا ال Function  للخثول على معرف فريد للجهاز يدعى UUID

وببساطه هو

هو اختصار للمعرف الفريد العالمي ، وهو معرف فريد يتم إنشاؤه آليًا ضمن نطاق معين يتم إنشاؤها بواسطة خوارزمية معينة تحدد المواصفات والعناصر بما في ذلك عنوان MAC لبطاقة الشبكة والطابع الزمني ومساحة الاسم (Namespace) والرقم العشوائي أو العشوائي الزائف والتوقيت والعناصر الأخرى وخوارزمية إنشاء UUID من هذه العناصر تعني الخصائص المعقدة لـ UUID أنه لا يمكن إنشاؤها إلا عن طريق الكمبيوتر مع ضمان تفردها

Public Function GetUUID()
Dim strComputer As String
Dim objWMIService, colItems, objItem

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystemProduct", , 48)
    
    For Each objItem In colItems
        
        GetUUID = objItem.UUID
    Next
End Function

7- اغلاق جميع النماذج المفتوحة ما عدا نموذج FrmNotReg   ولعدم تسهيل الامر على العابثين تم استخدام الـ unicode فى كتابة اسم النموذج

اقتباس

 

Chrw("70") & Chrw("114") & Chrw("109") & Chrw("78") & Chrw("111") & Chrw("116") & Chrw("82") & Chrw("101") & Chrw("103")

 

Public Function DoCloseForms()

    Dim F As Access.Form
    Dim i As Long
    For i = Forms.Count - 1 To 0 Step -1
        Set F = Forms(i)
        If F.Name <> _
         Chrw("70") & Chrw("114") & Chrw("109") & Chrw("78") & Chrw("111") & Chrw("116") & Chrw("82") & Chrw("101") & Chrw("103") _
        Then
            DoCmd.Close acForm, F.Name
        End If
    Next i
    
End Function


فى النقطة رقم 5 فى الشرح قلت سوف يأتى لاحقا شرح الـ 2  function  الاتى ذكر اسمائهم
 - ToGetAprv
- GetUUID()

GetUUID --  تم شرحة فى النقطة رقم 6

الـ ToGetAprv  هو  function  يتم تمرير قيمة  GetUUID() الجهاز الحالى اليه ليقوم بتحويله الى  unicode

يعنى من ظهر لهم هذا الرقم الخاص بالنسخة فى نموذج التسجيل 
46364331-3536-4638-3344-4232FFFFFFFF

طبعا كما سبق هذا هو معرف الـ UUID   وبعد ان يتم تمريره الى الـ function ToGetAprv     ليتم تحويله الى unicode  المفروض انه يظهر على الشطل التالى 

اقتباس

 Chrw("52") &  Chrw("54") &  Chrw("51") &  Chrw("54") &  Chrw("52") &  Chrw("51") &  Chrw("51") &  Chrw("49") &  Chrw("45") &  Chrw("51") &  Chrw("53") &  Chrw("51") &  Chrw("54") &  Chrw("45") &  Chrw("52") &  Chrw("54") &  Chrw("51") &  Chrw("56") &  Chrw("45") &  Chrw("51") &  Chrw("51") &  Chrw("52") &  Chrw("52") &  Chrw("45") &  Chrw("52") &  Chrw("50") &  Chrw("51") &  Chrw("50") &  Chrw("70") &  Chrw("70") &  Chrw("70") &  Chrw("70") &  Chrw("70") &  Chrw("70") &  Chrw("70") &  Chrw("70") 

ولكن قمت ببعض التعديلات على الكود الذى يقوم بالتجويل الى الـ unicode  بحيث يتم الابقاء على الارقام فقط من دون  Chw("") &  ولذلك كانت النتيجة كالاتى 

525451545251514945515351544552545156455151525245525051507070707070707070
 

ولذلك فان ال


Public Function ChkApprovedNo() As Boolean
    If DLookup("ApprovedNo", tblUUID) = ToGetAprv(GetUUID()) Then ChkApprovedNo = True
End Function

يقوم بالوصول الى الرقم ذلك وان كان يساوى الرقم الذى يتم عمل لصق له فى نموذج التسجيل يتم فتح النموذج الرئيسي

8- الكود الاخير لاخر روتين فى الموديول 

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

يتأكد من وجود الجدول لو مش موجود ينشئ الجدول

ولو الجدول موجود يتأكد من عدد السجلات لو 0 سجل يتم انشاء سجل ويضع به رقم UUID فى الحقل الخاص به
ولو السجلات تساوى 1 يقوم بالتأكد من قيمة رقم UUID  ان كان المكتوب فى الجدول = الخاص بهذا الجاز يكمل باقى الخطوات والا يوقم بعمل تحديث له للرقم فى الحقل داخل الجدول بما يساوى رقم رقم UUID للجهاز

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

ولذلك هذا هو المستخدم فى الحدث عند الفتح  ويمكن وضعه  بنموذج البدء بسهولة من خلال اسمه ChckUUID   ,   او  Call ChckUUID

بس خلاص :biggrin:

Public Function ChckUUID()
If ifTableExists(tblUUID) Then Else: CrtTblUUID
If DLookup("UUIDPC", tblUUID) <> GetUUID Then DoCmd.SetWarnings False: DoCmd.RunSQL "UPDATE UsysSecured SET UsysSecured.UUIDPC = GetUUID();": DoCmd.SetWarnings True

DoEvents
If CountRec() Then
        
        If DLookup("UUIDPC", tblUUID) = GetUUID Then
            If ChkApprovedNo Then _
            DoCmd.Close acForm, _
            Chrw("70") & Chrw("114") & Chrw("109") & Chrw("78") & Chrw("111") & Chrw("116") & Chrw("82") & Chrw("101") & Chrw("103") _
            : DoCmd.OpenForm Chrw("70") & Chrw("114") & Chrw("109") & Chrw("77") & Chrw("97") & Chrw("105") & Chrw("110"), , , , , acDialog _
             Else: DoCloseForms: DoCmd.OpenForm Chrw( _
             "70") & Chrw("114") & Chrw("109") & Chrw("78") & Chrw("111") & Chrw("116") & Chrw("82") & Chrw("101") & Chrw("103"), , , , , acDialog
        Exit Function
        End If
Else
    DoCmd.SetWarnings False: DoCmd.RunSQL "INSERT INTO UsysSecured ( UUIDPC )  SELECT GetUUID() AS UUID;": DoCmd.SetWarnings True
End If

End Function

بس ممكن بدل الذهاب الى نموذج التسجيل اغلاق القاعدة نهائيا لمن يريد 

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

وهذا ما سوف اطرحه لاحقا بس الان انا متعب

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

اجمل الامانى

بكده ينتهى موضوع العبث ويتم تأمين القاعدة بأقصى درجات الأمان لمن يريد

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

  • 1 month later...
  • 3 months later...

استاذنا ومعلمنا وبشمهندسنا / @ابو جودي

ايوه كده ياسلام عليك يااخى هو ده الكلام الان ارفقت مفتاح التفعيل الله ينور عليك

الشرح السابق مفيد جدا وواضح جدا والاستاذ / @احمد الفلاحجيقام بتوصيل كل هذه المعلومات لنا ربنا يبارك فيه  ويرزقه 

ولكن لى سؤال صغير استاذ / محمد عصام

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

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

جزاك الله كل خير واعطال الصحة والعافية وبارك فى علمك ورزقك من غير حساب ـ اللهم  امين

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

2 ساعات مضت, الحلبي said:

الان ارفقت مفتاح التفعيل

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

2 ساعات مضت, الحلبي said:

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

 على زر الامر  Paste

فى نموذج FrmNotReg

غير ما يلزمك بدلا من هذا يا دكتور :fff:

    MsgBox _
 Chrw("89") & Chrw("111") & Chrw("117") & Chrw("32") & Chrw("104") & Chrw("97") & Chrw("118") & Chrw("101") & Chrw("32") & Chrw("117") & _
 Chrw("115") & Chrw("101") & Chrw("100") & Chrw("32") & Chrw("116") & Chrw("104") & Chrw("101") & Chrw("32") & Chrw("119") & Chrw("114") & _
 Chrw("111") & Chrw("110") & Chrw("103") & Chrw("32") & Chrw("108") & Chrw("105") & Chrw("99") & Chrw("101") & Chrw("110") & Chrw("115") & _
 Chrw("101") & Chrw("32") & Chrw("110") & Chrw("117") & Chrw("109") & Chrw("98") & Chrw("101") & Chrw("114") & Chrw("46") & Chrw("13") & _
 Chrw("10") & Chrw("80") & Chrw("108") & Chrw("101") & Chrw("97") & Chrw("115") & Chrw("101") & Chrw("32") & Chrw("99") & Chrw("111") & _
 Chrw("110") & Chrw("116") & Chrw("97") & Chrw("99") & Chrw("116") & Chrw("32") & Chrw("116") & Chrw("104") & Chrw("101") & Chrw("32") & _
 Chrw("100") & Chrw("101") & Chrw("115") & Chrw("105") & Chrw("103") & Chrw("110") & Chrw("101") & Chrw("114") & Chrw("32") & Chrw("111") & _
 Chrw("102") & Chrw("32") & Chrw("116") & Chrw("104") & Chrw("101") & Chrw("32") & Chrw("97") & Chrw("112") & Chrw("112") & Chrw("108") & _
 Chrw("105") & Chrw("99") & Chrw("97") & Chrw("116") & Chrw("105") & Chrw("111") & Chrw("110") & Chrw("46")

 

 

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

معلمى واستاذى / @ابو جودي

الله الله عليك مبدع وعبقرى ماشاء الله عليك ربنا يبارك فيك وفى اسرتك ووالديك 

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

اظن من حقى دلوقت اقول لك شوية بخور تتضمن بهم السلامة 

ولا انسى ان اشكر الاستاذ / احمد الفلاحجى 

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

تشكر أخي @ابو جودي

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

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

جزاك الله خيرا اخى العزيز محمد عصام  @ابو جودي

لم اقم بشىء يذكر د محمد @الحلبي جزاه الله خيرا ابوجودى ع طرحه الرائع

1 ساعه مضت, ابو البشر said:

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

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

بالتوفيق اخوانى

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

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

طيب ماذا بخصوص تنزيل نسخة جديدة للجهاز هل هتفرق فى حاجة ؟ ..

اعذرنى انا قرأت كتير فى المواضيع دى ولكن لم اصادف هذا الرقم من قبل .

مجهود تشكر عليه @ابو جودي

 

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

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.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information