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

sandanet

الخبراء
  • Posts

    1,366
  • تاريخ الانضمام

  • تاريخ اخر زياره

  • Days Won

    19

Community Answers

  1. sandanet's post in مساعدة في التحقق من قيمة اختيار was marked as the answer   
    تفضل
    C.accdb
  2. sandanet's post in إدخال بيانات was marked as the answer   
    تفضل أخي الكريم 
     
     
     
    تجريبي.accdb
  3. sandanet's post in مساعدة في نقل اكواد الى وحدة نمطية was marked as the answer   
    تفضل اخي الكريم .. أتمنى ان يكون هذا طلبك
    بالنسبة لسؤالك 
    فهو يعتمد على درجة تعقيد برنامجك وطريقة تنفيذ الافكار فيه والاكواد التي تستعملها وما الى ذلك من امور .. فنقل الاكواد بشكل عام الى وحدة نمطية لايؤثر بحد ذاته على شيء  
     
    تحياتي 
    b (2).accdb
  4. sandanet's post in تحويل النموذج إلى ملف pdf was marked as the answer   
    نعم أخي الكريم يمكن عمل ذلك عن طريق الكود التالي
    DoCmd.OutputTo acOutputForm, "yourform", acFormatPDF, CurrentProject.Path & "\" & Format(Date, "dd-MM-yyyy ") & ".pdf", False تضع الكود السابق تحت زر امر على النموذج .. ستجد انه قام بحفظ الفورم بصيغة pdf في نفس مسار البرنامج لديك
    ملاحظة: اذا اردت ان يفتح الملف بعد الحفظ غير false الى true
     
    كما بامكانك تصدير الفورم يدوياً كما في الصورة
     
    تحياتي
     

  5. sandanet's post in تحويل النموذج إلى ملف pdf was marked as the answer   
    نعم أخي الكريم يمكن عمل ذلك عن طريق الكود التالي
    DoCmd.OutputTo acOutputForm, "yourform", acFormatPDF, CurrentProject.Path & "\" & Format(Date, "dd-MM-yyyy ") & ".pdf", False تضع الكود السابق تحت زر امر على النموذج .. ستجد انه قام بحفظ الفورم بصيغة pdf في نفس مسار البرنامج لديك
    ملاحظة: اذا اردت ان يفتح الملف بعد الحفظ غير false الى true
     
    كما بامكانك تصدير الفورم يدوياً كما في الصورة
     
    تحياتي
     

  6. sandanet's post in تحويل النموذج إلى ملف pdf was marked as the answer   
    نعم أخي الكريم يمكن عمل ذلك عن طريق الكود التالي
    DoCmd.OutputTo acOutputForm, "yourform", acFormatPDF, CurrentProject.Path & "\" & Format(Date, "dd-MM-yyyy ") & ".pdf", False تضع الكود السابق تحت زر امر على النموذج .. ستجد انه قام بحفظ الفورم بصيغة pdf في نفس مسار البرنامج لديك
    ملاحظة: اذا اردت ان يفتح الملف بعد الحفظ غير false الى true
     
    كما بامكانك تصدير الفورم يدوياً كما في الصورة
     
    تحياتي
     

  7. sandanet's post in تقييد المستخدم لكتابة نص "عربي" في TextBox was marked as the answer   
    السلام عليكم ورحمة الله وبركاته
     
    تحية طيبة وبعد ...
     
    كل عام وأنتم بخير وبصحة وسلامة إن شاء الله .. اتمنى ان يكون عام 2021 عام خير على أمة محمد أجمعين.
    بالنسبة لموضوعي الذي احببت مشاركتكم إياه فهو نادر مايستخدم ولكن قد يحتاجه احد ما كما احتجت له أنا وهو عملية إجبار المستخدم على ادخال كلمة في مربع نص على ان تكون الكلمة بالعربي وليس بالانجليزي وفي نفس الوقت عدم السماح له بإدخال ارقام في مربع النص وهو الامر عتبر غير شائع الاستعمال في الاكسس لكون ان المستخدم دائماً يكون هو المسؤول عن إدخالاته .. لكن في بعض الأحيان قد تحتاج الى فرض قيود صارمة على المستخدمين العابثين ومنعهم من حرية الاختيار عند ادخال بيانات معينة واجبارهم على ادخال ارقام او حروف انجليزي فقط او عربي .. الخ .    
    إليكم الكود التالي الذي يجبر المستخدم على الكتابة بالعربي فقط في مربع النص .. يتم وضعه في حدث "عند الضغط على مفتاح" 
    Select Case KeyAscii Case 48 To 57, 65 To 90, 97 To 122 ' Numbers and english letters KeyAscii = 0 Exit Sub End Select الارقام من 48 الى 57 هي للأرقام والباقي للحروف الانجليزية
     
    تحياتي 
  8. sandanet's post in كسر حماية الرقم السري لأكواد فيجوال بيسك was marked as the answer   
    اساتذتي الكرام تحية طيبة لكم
    انا رأيي الشخصي ان صيغة الـ accde  هي الحق الوحيد الذي يمتلكه المبرمج في حماية اكواده عندما يريد نشر برنامجه على الانترنت .. اما من يقفل الاكواد وينشر قاعدة البيانات بصيغة accdb فلايحق له الاعتراض على من يصل للأكواد.
     
    اما من ناحية البرنامج الذي تمت ازالته فهو بالتأكيد ستكون فائدته اكثر من مضاره لسبب واحد وهو اغلب المبرمجين ينسون الارقام السرية التي وضعوها لعدة اسباب وهذا ما حصل معي سابقا وقد فقدت اكواد مهمة وقتها مما اضطرني للبحث عن طريقة لكسر قاعدة البيانات في المواقع الاجنبية حيث هنالك الحرية في طرح مثل تلك البرامج
     
    تحياتي  
  9. sandanet's post in معرفة عدد مرات الدخول الى التقارير والنماذج was marked as the answer   
    تفضل اخي الكريم 
    test.accdb
  10. sandanet's post in مشكلة في تحويل قاعدة البيانات was marked as the answer   
    للأسف لا املك نفس الاصدار لكني اعتقد ان عملية تحويل قاعدة البيانات الى accde هي نفسها في الاصدارات الاقدم من 2019 
    بعد عمل compile  للأكواد والتأكد من خلو برنامجك من الأخطاء قم بعمل ضغط واصلاح اولاً ومن ثم توجه الى "حفظ ونشر" في قائمة ملف ومن ثم اختار انشاء accde 
     
     
     

  11. sandanet's post in اريد شرح EOF بالتفصل was marked as the answer   
    أخي الكريم من المعروف برمجياً انه يجب تحديد نهاية السجلات قبل إجراء عملية MoveNext فإذا لم تحدد نهاية السجلات فانك ستحصل على خطأ لذلك يتم استخدام EOF للإشارة الى نهاية السجلات وهي تعني "end of"
    ويتم استخدامها كالتالي:
    If Not rst.EOF Then rst.MoveNext حيث ان rst تمثل مجموعة السجلات في الجدول 
     
     
    إليك هذا المثال ايضاً
    Set rs = CurrentDb.OpenRecordset("select * from Table1 ") Do While rs.EOF = False rs.Edit " do something " rs1.MoveNext Loop المثال يبين ان الحلقة التكرارية do تستمر بتنفيذ العمليات البرمجية على كل سجل مادامنا لم نصل  لنهاية السجلات في الجدول اي مادامت end of table1 = false  فعندما نصل لنهاية السجلات ستصبح end of table1 = true  وعندها ستتوقف الحلقة التكرارية
     
      وهذا مثال آخر مشابه للذي قبله
     
    Set rst = dbs.OpenRecordset("SELECT * FROM Table1", dbOpenDynaset) Do While Not rst.EOF " do something " rst.MoveNext Loop عوضاً عن القول للبرنامج نفذ الحلقة التكرارية مادامت نهاية السجلات false  فان المثال الاخير يقول للبرنامج نفذ الحلقة التكرارية مادمت غير واصل لنهاية السجلات بعد
     
    مثال آخر: هنا نجد ان البرنامج يبدأ بتنفيذ الأوامر البرمجية من أخر سجل في الجدول ويتحرك الى ان يصل الى أول سجل
     
    Set rst = dbs.OpenRecordset("SELECT * FROM Table1", dbOpenDynaset) rst.MoveLast Do While Not rst.BOF " do something " rst.MovePrevious Loop أتمنى ان تكون الفكرة واضحة
     
    تحياتي
  12. sandanet's post in حماية قاعدة البيانات مشكلة was marked as the answer   
    تابع احدث طرق الحماية هنا
     
    وفي طريقة اخرى وهي اخفاء الجداول عن طريق الكود واستخدام الاستعلامات الغير مرئية او استعلامات sql وكذلك قفل الوحدات النمطية برقم سري وبعدها تحول قاعدة البيانات الى accde 
    اضمن لك حماية قوية جداً
  13. sandanet's post in طريقة إخفاء عرض التصميم was marked as the answer   
    حول البرنامج الى صيغة Accde بذلك تمنع الدخول الى النماذج بوضع التصميم وكذلك عدم امكانية الدخول الى الاكواد ايضا
  14. sandanet's post in تحويل الاستعلام الى كود was marked as the answer   
    تفضل اخي الكريم هذا برنامج يحول عبارة الـ sql الى vba 
    SQL2VBA.accdb
  15. sandanet's post in تحويل قاعدة البيانات الى ملف تنفيذي was marked as the answer   
    أخي الكريم أمير في الاكسس لايوجد برنامج خارجي لعمل ذلك وإنما يتم عمل ذلك من خلال الاكسس نفسه 
    اذا كنت تعمل على اكسس 2007 فما فوق فتستطيع تحويل قاعدة البيانات من Accdb الى Accde من الاكسس نفسه كما في الصورة المرفقة واطمئن لايوجد طريقة لاختراق اكوادك 
    لكن اذا اردت حماية جداول بياناتك ايضاً فهناك عدة طرق إما عن طريق إخفاء الجداول بالكود وإظهارها بالكود أيضاً او عن طريق قفل قاعدة البيانات برقم سري واستخدام ملف آخر وظيفته تمرير الرقم السري لقاعدة البيانات لكي تفتح وهي طريقة مضمونة في الحماية بنسبة عالية فلايمكن استيراد شيء من القاعدة او الإطلاع على محتواها بدون معرفة الرقم السري
    تابع الموضوع هذا اذا اردت تجربة الطريقة
    https://www.officena.net/ib/topic/98020-طريقتي-في-حماية-قاعدة-البيانات-من-تفعيل-الشفت-وحماية-الاستعلامات-و-وحدات-المايكرو-وكلمة-السر-للقاعدة-الخلفية/?tab=comments#comment-596888
     
     
     

  16. sandanet's post in فتح قاعدة اخرى من القاعدة الحالية was marked as the answer   
    بعد إذن أستاذي القدير صالح .. إليك التعديلات أخي @eng aoff
     
    database1.accdb database2.accdb
  17. sandanet's post in أعادة تشغيل ملف أكسس was marked as the answer   
    اخي @qathi تفضل 
     
    DatabaseRestartV1.2.accdb DatabaseRestartV1.2.mdb
     
    المصدر :
    http://blog.nkadesign.com/2008/05/06/ms-access-restarting-the-database-programmatically/
  18. sandanet's post in تطبيق تغيير الالوان حسب المعطيات لحجز الموعد was marked as the answer   
    يسعدني ان اكون أول من يعلق على هذا العمل الجميل فبارك الله فيك هذه الطريقة مفيدة في عمل التنبيهات المرئية .
     
    أخي الكريم بالنسبة للمثال فإن خانة الوقت يوجد بجانبها منتقي التوايخ وهو لاعلاقه له بالوقت وهذا يمكن إزالته من خصائص مربع النص نفسه
     
    ثانياً هل يمكنك تطوير الفكرة وذلك بجعل وقت الحجز يكون من وقت كذا الى وقت كذا فإن تم اختيار وقت يقع ضمن الوقت المحجوز فإنه يظهر باللون الأحمر
  19. sandanet's post in عدم ظهور السجل المحذوف بالنموذج was marked as the answer   
    بعد امر الحذف استعمل الامر Me.requery او refresh 
  20. sandanet's post in مطلوب تعديل لحذف محتويات حقل دون حذف حقول نفس السجل was marked as the answer   
    تفضل جرب المرفق
    db1.zip
  21. sandanet's post in مساعدة .. رسالة تمكين المحتوى was marked as the answer   
    تفضل هذا الملف يلغيها بشكل دائم
    شغل هذا الملف مرة واحدة فقط.zip
  22. sandanet's post in المساعدة فى مشكلة إختفاء جميع اكواد البرنامج was marked as the answer   
    قم بوضعه في اي حدث سواء كان حدث عند فتح نموذج او اي حدث اخر تريد
  23. sandanet's post in حماية قاعدة بيانات الاكسس من النسخ was marked as the answer   
    اخي الكريم الموضوع بكل بساطة هو حماية برنامجك من النسخ على جهاز آخر 
    الحماية المتبعة في المثال هي الاولى من نوعها في الوطن العربي على حسب علمي المتواضع وفكرة المثال هي الاعتماد على قراءة الارقام التسلسلية لثلاثة قطع من جهاز الكومبيوتر ودمجها مع بعض وتوليد رقم لنسخة البرنامج حيث يظهر هذا الرقم للمستخدم عندما يحاول تشغيل البرنامج على جهاز آخر غير مصرح له بذلك سوف يضطر الى شراء رقم التفعيل منك .. طبعا لايهم اذا ما قام العميل بحفظ الكود في ورقة خارجية ام داخلية لان كود التفعيل حتى وان تسرب لأي شخص آخر فلن يعمل معه لان كود التفعيل ذلك خاص بالجهاز الذي تم ارسال رقمه التسلسلي لك
     
    طبعا فكرة الحماية جائت من الحماية القديمة المتبعة في اغلب البرامج والتي كانت تعتمد على قطعة واحدة فقط في الجهاز .. في الواقع ان قطعة واحدة فقط لاتكفي لعمل الحماية فاذا كانت الحماية معموله على رقم الهارد فيمكن للمستخدم نقل الهارد لجهاز آخر غير مصرح له بالعمل على البرنامج كما ان مشكلة الاعطال قد تسبب بفقدان البرنامج فلو عطل الهارد وكانت الحماية معمولة على رقم الهارد عندئذ سيضطر المستخدم الى طلب رقم تفعيل جديد وهنا تكمن المشكلة فلو كنت في مكان بعيد وراسلك المستخدم يطلب رقم تفعيل جديد بسبب عطل الهارد فانت لاتعرف مدى مصداقيته في ذلك .. لذلك وجب ايجاد حماية ثلاثية تقرأ مجموعة قطع مع بعضها وهنا توجد ميزة وهي حتى لو تلفت قطعة مثلاً تلف الهارد فعند شراء المستخدم لهارد جديد فسيعمل معه البرنامج مباشرة ولا يطالبه برقم تفعيل جديد لان البرنامج قام بالتأكد من بقية القطع ووجد انها مطابقة لهذا الجهاز اي بمعنى ان هذا الجهاز مصرح له بالعمل على البرنامج 
     
    المقصود برقم النسخة هو الرقم الذي يظهر لدى المستخدم عندما يكون البرنامج غير مصرح له بالعمل على جهازه 
    رقم نسخة يختلف من جهاز الى آخر كما ان رقم التفعيل الذي ترسله للمستخدم لايعمل الا على الجهاز الذي تم استخراج رقم النسخة منه
     
    المطلوب منك هو تبديل واجهة اسم المستخدم والرقم السري فهي افتراضية فقط وهي تأتي بعد نجاح تفعيل البرنامج .. انت قم بوضع واجهة برنامجك مكانها 
     
    بالنسبة لنسخ البرنامج على حاسوب اخر فلا تقلق لايمكن تشغيل برنامجك على جهاز غير مصرح به
     
    تحياتي
  24. sandanet's post in فهم كود معين was marked as the answer   
    بعد إذن اساتذتي الكرام ..أخي الكريم أبو أحمد أولاً رمضان كريم عليك وعلى جميع الأخوة والأساتذة الكرام في هذا المنتدى الرائع.. ثانياً الكود الذي وضعته انت هو كالتالي : للعلم فإنه هنالك وحدة نمطية خاصة بتشفير البيانات وفك تشفيرها يجب ان تكون موجودة في قاعدة البيانات التي جلبت منها الكود السابق وجزء من هذه الوحدة النمطية هو الكود التالي الخاص بفك التشفير 
    Function decode(a, b As String) As String On Error Resume Next Dim R, i As Integer, s, u As String u = getcode(a, b) i = Val(Mid(u, 1, 1)) + 1 u = Mid(u, i + 1, Len(u) - i) If Len(u) Mod 3 <> 0 Then u = Mid(u, 1, Len(u) - 1) s = "" For R = 1 To Len(u) - 2 Step 3 s = s + Chr(Val(Mid(u, R, 3))) Next decode = s أما دالة التشفير فهي كالتالي :
    Function incode(a As String, b As String) As String Dim R, i As Integer, s, u As String 1: u = "" s = ctrs(a, 3) If Len(s) Mod 2 = 1 Then s = s + Trim(str(Int(8 * Rnd(-Timer)))) i = 3 * Rnd(-Timer) + 1 For R = 1 To i u = Chr(100 * Rnd(-Timer) + 155) + u Next u = Trim(str(i)) + u u = u + s u = getcode(u, b) If decode(u, b) = a Then incode = u Else GoTo 1: End If End Function اما بقية اكود الوحدة النمطية فهي كالتالي :
    Function getcode(a, b As String) As String On Error Resume Next Dim L, R As Integer, c As Long, q As String c = 0 For R = 1 To Len(b) c = c + Asc(Mid(b, R, 1)) * (10 ^ R) Next q = str(c) c = 0 For R = 1 To Len(q) c = c + Val(Mid(q, R, 1)) Next q = "" For R = 1 To Len(a) L = 256 - Asc(Mid(a, R, 1)) - R - Len(a) If L + c > 255 Then q = q + Chr(L - c) Else q = q + Chr(L + c) End If Next getcode = q End Function Function ctrs(s As String, Y As Byte) As String Dim R, i As Integer, u, T As String u = "" For R = 1 To Len(s) T = Trim(str(Asc(Mid(s, R, 1)))) For i = 1 To Y - Len(T) T = "0" + T Next i u = u + T Next ctrs = u End Function وطبعاً يجب ان يكون التشفير وفك التشفير مستند على معيار التشفير (بمعنى آخر الرقم الخاص بك او النص الذي بدونه لايمكن فك التشفير عن البيانات .. هذا الرقم او النص هو الذي يتم تمريره للدالة لكي تشفر البيانات) 
    للتوضيح .. عنما تريد تشفير رقم موجود في جدول تستخدم الأمر التالي 
    incode(Table1.[impnumber],10) كما تلاحظ فإننا استدعينا كود التشفير incode ومررنا إليه الحقل impnumber الموجود في جدول Table1 وقلنا له اجعل مفتاح التشفير هو الرقم 10 وفائدة ذلك هو لما يقوم شخص بسرقة بياناتك المشفرة ويحاول فك تشفيرها باستخدام الدالة decode فهو لن يعرف مفتاح التشفير المستخدم وبذلك لن يحصل على البيانات
     
    وهنا سوف تستخدم الأمر decode بنفس الطريقة السابقة للحصول على الرقم الأصلي كالتالي 
    decode(Table1.[impnumber],10)  
    في الكود الذي ارفقته انت لاحظ ان المبرمج استخدم مفتاح التشفير التالي 
    DLookup("[text3]", "text2")  
     
    ارجو ان يكون الشرح وافي 
     
    تحياتي
×
×
  • اضف...

Important Information