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

نجوم المشاركات

  1. ابوخليل

    ابوخليل

    أوفيسنا


    • نقاط

      11

    • Posts

      12,158


  2. عمر ضاحى

    عمر ضاحى

    الخبراء


    • نقاط

      5

    • Posts

      1,053


  3. Foksh

    Foksh

    الخبراء


    • نقاط

      1

    • Posts

      2,155


  4. عبدالله بشير عبدالله

Popular Content

Showing content with the highest reputation on 24 سبت, 2023 in all areas

  1. وحماية ثالثة .. ان يحميك الله من كل سوء ، ويطيل عمرك على طاعته
    3 points
  2. السلام عليكم خير الكلام ما قل ودل . اللهم صل على محمد وآله وصحبه . بسبب ملاحظتي لحرص البعض _خاصة المستجدين _ على مسألة الحماية واستخدام طرق معقدة والبحث عن الجديد والأقوى احببت ان انشر تجربتي وخبرتي في هذه المسألة كأيسر وكذلك اقوى طريقة . الحماية من جهتين : 1- حماية البيانات وهي الجداول .. وهذه تهم المستخدم ( العميل) 2- حماية البناء ..( التصميم بما يشتمل من اكواد وغيرها ) وهذه تهم المبرمج ----------------------------------- الجهة الأولى : 1- اكسس ضعيف جدا في حماية جداوله .. لأن اي مستخدم مهما ضعفت صلاحياته يمكنه التمكن من الجداول ( نسخ / تغيير / حذف) 2- اي شخص يملك قاعدة بيانات اكسس يمكنه الوصول الى الجداول ما لم يتم حمايتها بكلمة مرور اكسس 3- ينطبق هذا على القواعد المقسمة حيث يجب تفعيل كلمة مرور اكسس على الواجهات الأمامية قبل عرض كلمة مرور المستخدم ، والا ستكون الجداول في متناول اليد . نأتي للجهة الثانية وهي ما يخص المبرمج : من خلال تجارب وخبرة سنوات افضل طريقة تريح المبرمج وكذلك العميل وبعيدا عن غرس الملفات والريجستري والفلاش : الاعتماد على رقم سيريال واحد من عتاد الجهاز ( قرص صلب / معالج / اللوحة الأم ) بشرط ان يكون الرقم اساسي خاصة القرص الصلب لا يتغير عند عمل التهيئة . فكون الرقم اساسي لا يتغير يفيد العميل عندما يقوم بتهيئة القرص ، وهو مريح ايضا للمبرمج ( يوجد كثير من المواضيع هنا في هذا المنتدى تشرح عملية استخلاص ارقام القطع الداخلية لجهاز الحاسب .. ابحث ) الخطوات : --------------------------------- - استخراج واستخلاص الارقام من السيريل ( غالبا يأتي مختلط بارقام وحروف) سيظهر هذا الرقم للعميل في فورم التسجيل واسفله حقل لادخال رقم النسخة ------------------------------- - نعمل دالة1 = استقطاع جزء محدد من النتيجة .. مثلا خمسة ارقام او اربعة ارقام من اليمين او من اليسار ( استقطاع ثابت) - نعمل دالة2 = اجراء معادلة على دالة1 ، مثلا ( دالة1 (x) 1234567 + 53954 ) ------------------------------- - عندما يرسل العميل رقم السيريل ويطلب رقم النسخة نقوم بعمل المعادلة ومن ثم نرسلها للعميل نتيجة هذه المعادلة ستبقى ملك دائم لجهاز حاسب واحد ما دام على قيد الحياة -------------------------------------------------------------------------------------------------------------- ما ذكرته اعلاه هو للنسخة الدائمة .. أما النسخة المؤقته فأقوم بعملها كالتالي : يجب ان يكون العمل مقسم الى واجهات وجداول . يجب ان اتعامل مع العميل على اساس نسختين من الواجهات : مؤقتة / دائمة الفرق بين الواجهة المؤقتة والواجهة الدائمة .. هي زيادة سطرين بشرطين في المؤقتة 1- الشرط 1: لن تفتح المؤقتة الا مع وجود الأنترنت شغال 2- نضع سطرا نحدد تاريخ توقف البرنامج ( يتم جلب التاريخ من الانترنت ) لنفرض انتهت مدة التجربة بعد شهر او شهرين .. وتم الشراء .. هنا نرسل الواجهة الدائمة للصق والاستبدال . هنا نكون حافظنا على بيانات العميل المدخلة وعلى حقوقنا البرمجية ----------------------------------------------------- نقطة اخيرة : سيتبادر الى الذهن ! اين يحفظ رقم النسخة ؟ لأن البرنامج سيطلبه عند كل اقلاع ؟ الجواب : ما دام رقم النسخة ملكا للجهاز فيمكن حفظه في اي مكان ، مثلا في حقل في جدول بشرط ان يحتوي الجدول على سجل واحد فقط او يمكن حفظه في ملف نصي بجانب قاعدة البيانات وهذه الطريقة الاخيرة هي الافضل بل تجب اذا تم توزيع الواجهات على اكثر من جهاز .. والسبب ان كل جهاز سيكون له رقمه الخاص هذا ما لدي آمل تجدوا فائدة
    2 points
  3. وهذه لتوضيح الفكره يفضل ان يكون المجلد فى حرف D علشان يكون مسار البرنامج هو D:\DB\Start.accde لتجنب اخطأ الربط DB.rar
    2 points
  4. وممكن ان يقوم المبرمج بغلق القاعدة الخلفيه والاماميه بكلمات سر ويعمل قاعدة ثالثه لتشغيل القاعدة الاماميه بالاعتماد على هذا الكود كود اخفاء الاكسيس او اظهارها (اختياري ومش هتفرق وجودها) Option Compare Database Option Explicit #If VBA7 Then Public Declare PtrSafe Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long #Else Public Declare Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long #End If '---------------------------------------------------(يخفي الشاشة بتصغيرها للأسفل ولكنها تظهر إذا عملت ماكسيمايز) Public Function HideAccess() Call ShowWindow(Access.hWndAccessApp, 2) End Function '---------------------------------------------------(لإظهار شاشة الأكسس) Public Function ShowAccess() Call ShowWindow(Access.hWndAccessApp, 9) End Function كود تشغيل قاعدة البيانات الاخري Private Sub Form_Load() Call HideAccess Dim acc As Access.Application Dim db As DAO.Database Dim strDbName As String strDbName = CurrentProject.Path & "\" & "FFFF" & ".accdb" Set acc = New Access.Application acc.Visible = True acc.OpenCurrentDatabase strDbName, False, "1234" Set db = acc.CurrentDb() acc.UserControl = True Application.Quit End Sub على فرض ان القاعدة الاماميه باسم FFFF وان كلمة السر هي 1234 ويقوم باغلاق القاعدة الثالثه بتحويلها الى accde وبكده اعتقد هتكون الحمايه عاليه جدا وهيكون صعب كسر كلمة السر
    2 points
  5. ادرج ptrsafe ليصبح Declare PtrSafe Function apisndPlaySound Lib "winmm" Alias "sndPlaySoundA" (ByVal filename As String, ByVal snd_async As Long) As Long
    2 points
  6. على اعتبار اننا نتكلم عن حماية التصميم .. ليتك قرأت ما كتبته بتمعن .. ابدا لا دخل للدوال والمعادلات بالجداول .. وممكن الجداول مفتوحة بدون حماية ، وازيدك من الشعر بيت .. تستلم مفتاح التسجيل ملكا لك مدى الحياة ، ولكنك لن تتمكن من نقل البرنامج الى كمبيوتر آخر وتشغيله
    1 point
  7. لا اعتقد ان هيكون الموضوع بهذه السهوله اذا كانت قاعدة البيانات من النوع ACCDE (القاعدة التى سوف تفتح البرنامج "الواجهه") فهنا استحالة انه يوصل للكود حتى لو معه الباسورد ^_^ (عارف ان مفيس مستحيل لكن على الاقل هذا يتطلب مستوي عالى جدا من الخبره) وبما ان الواجهه نفسها مغلقه بكلمة سر (معقده) والخلفيه مغلقه بكلمة سر معقده ايضا فهيكون من شبه المستحيل كسرها والله اعلم
    1 point
  8. نعم يمكنك تغيره باسماء اللي حضرتك تريده نعم سيحذف كل شيء في ريجيستري وسيعود الي وضعه الاصلي
    1 point
  9. رغم أن المطلوب يرتكز على المعطيات ؛ إلا أنني مسرور بحل المشكلة والإستفادة من الخبرات في المنتدى تقبل مروري بصدر رحب
    1 point
  10. بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته.. اقدم لكم اداة من برمجتي المتواضعة لتحويل اكواد الـ SQL الى VBA قبل كل شي، الاداة حصراً للمبرمجين الذين يستخدمون الكود في الادراج والتعديل والحذف وليس للأشخاص الذين يستخدمون الواجهة الرسومية للأكسس الخالية من الكود ماهي فائدة الأداة ولماذا استخدمها؟ حسناً، لو كان لدينا جدول اسمة tbl_movementes يقوم بتسجيل جميع الحركات التي تحدث ( اضافة , تعديل , حذف ) وهذا الجدول احتاجه في كثير من النماذج، فهل من المعقول ان اقوم بكتابة عبارة INSERT INTO في كل نموذج ؟ اكيد لا، سأقوم بكتابة Sub واقوم بإستدعاءه كل مرة اريد ان اضيف بها بيانات الى الجدول واختصاراً للوقت الطويل والأخطاء التي ربما ستحدث اثناء عملية التحويل، قمت بكتابة اداة تقوم بهذا الغرض الاداة وضيفتها فقط ( Insert , Update ) صورة الاداة: لنطبق على عملية اضافة بيانات جديد: 1- قم بفتح 2- ثم قم بأختيار الجدول الذي تريده، وقم بإدراج جميع الحقول، كما في الصورة 3- من النافذة العليا اختر النافذة تصميم وقم بتعديل نوع الاستعلام الى استعلام إلحاق وثم بإختيار نفس الجدول لكي يقوم بألحاق البيانات به. الآن لنرى النتيجة 3- الان قم بعرض اكواد الـ SQL 4- قم بنسخ جميع الاكواد كما في الصورة الاتية 5- الان قم بفتح الاداة، واختر النوع Insert، ثم الصق اكواد الـ SQL في مربع النص SQL 6- قبل عملية التحويل قم بإلغاء الأعمدة التي لا ترغب بها من القائمة على اليمين ( Column Remove ) مثلا سأقوم بألغاء العمود IsDeleted وذلك بالضغط على اسم العمود رسالة تخبرك بتأكيد عملية حذف العمود 7- اضغط على الزر Convert 8- تم تحويل الكود ونسخه، الان قم بلصقه في الأكسس واستخدمه الاستخدام النتيجة، تم ادراج البيانات بالجدول لنطبق على عملية تعديل البيانات: نفس الخطوات القديمة فقط من الاداة اختر نوع الاستعلام Update من المعروف ان عملية تعديل البيانات تتطلب معيار للتعديل WHERE COLUMN NAME = Number لذلك عندما نقوم بإنشاء الاستعلام نقوم بوضع عمود المعيار اخر عمود في الاستعلام هكذا من لديه ملاحظات أو اضافات تعطى للبرمج حصراً أحرم تعديل البرنامج بأحد ادوات الهندسة العكسية او نسبه لأي شخص تمت البرمجة حصرياً لمنتدى أوفسينا، اهداء الى معلمي العزيز @jjafferr تحياتي للجميع. SQL-VBA.rar
    1 point
  11. شكرا لك استاذ عمر على المداخلة واحسنت في عرض هذه الفكرة ، وطريقة تنفيذها .. ويعتبر هذا العمل زيادة عالية في حماية بيانات العميل .
    1 point
  12. 1 point
  13. عدت اجربه مرة اخرى المثال يعمل كما طلبت على اكمل وجه ملحوظة : بعد كل اختيار انقر على تنفيذ يجب الاختيار اولا ليتم الانتقال الى سجل جديد ويتم تنفيذ الامر AAAA2.rar
    1 point
  14. السلام عليكم ورحمة الله تعالى وبركاته بعد ادن الاستاد الكبير @Ali Mohamed Ali تفضل اخي جرب Private Sub Worksheet_Change(ByVal Target As Range) '****************************قم بظبط الاعدادات بما يناسبك******************************** Const Première_ligne As Long = 2 ' اول صف Const PremièreColonne As String = "A" 'اول عمود Const LastColumn As String = "j" ' اخر عمود Dim R&, lastrow&, J&, Idx&, deling& Dim Sp() As String, Ky, Cols As Variant Dim dict As Object, Rng As Range, myCells As Range 'اسم الورقة الخاص بك Dim wsdata As Worksheet: Set wsdata = Worksheets("Sheet1") '(A) ' الى غاية اخر قيمة في عمود lastrow = wsdata.Cells(wsdata.Rows.Count, "A").End(xlUp).Row ' بدون تقييد 'lastrow = wsdata.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 'الخلايا المتأثرة Set myCells = Intersect(Me.Range("A2:J" & lastrow), Target) If Not myCells Is Nothing Then On Error Resume Next deling = wsdata.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row ' نطاق البيانات Set myRng = wsdata.Range("A2:J" & deling) 'أضف العديد من الألوان كما يحلو لك Cols = Array(65535, 10086143, 16763904, 15123099, 9359529, 11854022, 32896, 65280, 16711680, 65535, 16711935, _ 16763904, 13434828, 16764057, _ 13408767, 16751052, 10079487) Application.ScreenUpdating = False Application.EnableEvents = True Set dict = CreateObject("Scripting.Dictionary") With wsdata ' حدف التنسيقات السابقة myRng.Interior.ColorIndex = 0 For J = Columns(PremièreColonne).Column To Columns(LastColumn).Column If lastrow >= Première_ligne Then Set Rng = .Range(.Cells(1, J), .Cells(lastrow, J)) Arr = Rng.Value For R = Première_ligne To lastrow If Len(Arr(R, 1)) Then dict(Arr(R, 1)) = dict(Arr(R, 1)) & "," & _ Cells(R, J).Address End If Next R End If Next J For Each Ky In dict Sp = Split(dict(Ky), ",") ' وضع شرط عدد التكرار لتنفيد الامر If UBound(Sp) > 1 Then For K = 1 To UBound(Sp) .Range(Sp(K)).Interior.Color = Cols(Idx) Next K Idx = Idx + 1 If Idx > UBound(Cols) Then Idx = LBound(Cols) End If Next Ky End With End If Application.ScreenUpdating = True End Sub Test_Couleur.xlsm
    1 point
  15. الله يعطيك العافية بالفعل هذه مشكله كانت تقابلني دائما
    1 point
  16. 1 point
  17. وعليكم السلام ورحمة الله وبركاته جسب فهمى لطلبك / قم باختيار الصف م خلية Z2 في صفحة البيانات ثم قم بالضغظ على زر ترحيل . سيتم الترحيل الى صفحتي المستجدين وسجل 31, امر الطباعة ديناميكي بمعني حسب البيانات يحتويها ويطبعها فليس هناك داع لزر الاختيار الامر الثالت غير واضح تماما بالنسبة لي والذي فهمته انك تريد الترحيل حسب التقدم فمثلا تريد ترحيل الدور الاول هل الترحيل لفصل معين ام لكل الفصول. اتمنى ان تجد ما يفيدك وان كان غير ذلك فعذرا . ترحيل.zip
    1 point
  18. بارك الله فيك وجزاك الله خير استاذنا الفاضل ابا جودي مثال رائع ومفيد جدا وفقك الله
    1 point
  19. والله أعلى وأعلم على قدر معلوماتى للاسف PlaySound API الخاصة بتشغيل ملفات صوت ذات الامتداد WAV لا تدعم الإيقاف المؤقت/الاستئناف وننتظر من اساتذتنا أهل الخبرة مراجعتنا فى هذه النقطة إن أمكن وهذا تعديل بسيط علشان خاطر عيونك تدلل PlayAudio V0.2.zip
    1 point
  20. استاذنا @kamelnet5 بعد التعب والبحث والتنقيب والتجريب . اذا كان هذا طلبك اضغط على أفضل اجابة .
    1 point
×
×
  • اضف...

Important Information