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

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

قام بنشر

السلام عليكم

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

منهم من يقتصر فلتره على إظهار  mdb  والآخر على   accdb

المفترض أن البرنامج الناتج يتوافق مع أوفيس 2003  بالإضافة للإصدارات التالية

بالطبع سوف نري مع الشمول البرمجي الناحية الجمالية بأفضل صورة وأنا واثق من هذا

شكراً  لجميع الزملاء مقدماً

وتهنئة لنا بعودة أبو جودي للمنتدى من جديد

تفعيل وإلغاء الشفت1.mdb تفعيل وإلغاء الشفت2.mdb تفعيل وإلغاء الشفت3.mdb

قام بنشر

هو المفروض ان المرفق الثانى بيدعم كل الامتدادت من المرفقات اللى حضرتك شاركتها 

لكن على كل حال اليك المرفق بعد عمل اعادة هيكلة شاملة للكود كاملا 

 

image.png.1b0a9b46cf89cdb43e55d9cd196cdd89.png

تفعيل وإلغاء الشفت.mdb

قام بنشر

معذرة

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

فى الفلترة : يكفى السطر الثالث ( كل الملفات )

أيضاً

هل من الممكن بعد اختيار ملف أكسس :اكتشاف الفاعلية تلقائياً (تمكين ، نعطيل )

وبذلك يكون زر واحد فقط هو من يتم اختياره

بالنسبة لملف   *.accdb   لم ينجح التطبيق فى تغيير الخاصية

img?id=1536173

قام بنشر (معدل)

بناءً على طلبك أخي @أحمد العيسى ، هذه مشاركة بسيطة ، جربها رجاءً على أوفيس 2003 وأخبرني بالنتيجة .. حيث الأكواد في مديول واحد :-

Option Compare Database
Option Explicit

Private mDbPass As String

Public Sub SelectExternalDB(frm As Object)
    Dim fd As Object
    Set fd = Application.FileDialog(3)
    fd.Title = "Select Database"
    fd.Filters.Clear
    fd.Filters.Add "Access Files", "*.accdb;*.mdb"
    If fd.Show = -1 Then
        frm.Controls("Txt_PathDB").Value = fd.SelectedItems(1)
        mDbPass = ""
        CheckShift frm, fd.SelectedItems(1)
    End If
End Sub

Public Sub CheckShift(frm As Object, dbPath As String)
    Dim db As Object, wrk As Object, prp As Object
    Dim isEnabled As Boolean
    Set wrk = DBEngine.Workspaces(0)
    On Error Resume Next
    Set db = wrk.OpenDatabase(dbPath, False, False, "")
    If Err.Number = 3031 Then
        Err.Clear
        mDbPass = InputBox("قاعدة البيانات محمية، يرجى إدخال كلمة المرور:", "كلمة المرور")
        If mDbPass = "" Then Exit Sub
        Set db = wrk.OpenDatabase(dbPath, False, False, ";PWD=" & mDbPass)
    End If
    If db Is Nothing Then Exit Sub
    isEnabled = True
    For Each prp In db.Properties
        If prp.Name = "AllowBypassKey" Then
            isEnabled = prp.Value
            Exit For
        End If
    Next prp
    If isEnabled Then
        frm.Controls("OptMain").Value = 2
        frm.Controls("Btn_Doit").Caption = "إلغاء تفعيل مفتاح الشيفت"
        frm.Controls("Lbl_Info").Caption = "الحالة: مفتاح الشيفت مفعل" & vbCrLf & dbPath
    Else
        frm.Controls("OptMain").Value = 1
        frm.Controls("Btn_Doit").Caption = "تفعيل مفتاح الشيفت"
        frm.Controls("Lbl_Info").Caption = "الحالة: مفتاح الشيفت غير مفعل" & vbCrLf & dbPath
    End If
    db.Close
    Set db = Nothing
End Sub

Public Sub ExecuteToggle(frm As Object)
    Dim dbPath As String
    dbPath = frm.Controls("Txt_PathDB").Value
    If Len(dbPath) = 0 Then Exit Sub
    Dim db As Object, wrk As Object, prp As Object
    Set wrk = DBEngine.Workspaces(0)
    On Error Resume Next
    If Len(mDbPass) > 0 Then
        Set db = wrk.OpenDatabase(dbPath, False, False, ";PWD=" & mDbPass)
    Else
        Set db = wrk.OpenDatabase(dbPath, False, False, "")
    End If
    If db Is Nothing Then Exit Sub
    Dim newState As Boolean
    If frm.Controls("OptMain").Value = 1 Then
        newState = True
    Else
        newState = False
    End If
    db.Properties("AllowBypassKey") = newState
    If Err.Number = 3270 Then
        Err.Clear
        Set prp = db.CreateProperty("AllowBypassKey", 1, newState)
        db.Properties.Append prp
    End If
    db.Close
    Set db = Nothing
    CheckShift frm, dbPath
End Sub

والإستدعاء في زر اختيار الملف :-

Private Sub Btn_Select_Click()
    SelectExternalDB Me
End Sub

وزر التنفيذ :-

Private Sub Btn_Doit_Click()
    ExecuteToggle Me
End Sub

 

وصورة من الأداة :-

image.png.c9652e4e293cdeb1e22e2c19fa5e7217.png

حيث عند اختيارك لأي قاعدة بيانات ، سيتم الكشف عن حالتها ، إن كان مفتاح الشيفت مفعلاً مسبقاً فسيتم تطبيق الإختيار تلقائياً على Disabled - غير مفعلة . وإذا كان مفتاح الشيفت غير مفعل مسبقاً ، فسيتم تطبيق الإختيار على Enabled - مفعلة .

وسيكون التفعيل من خلال زر واحد فقط تتغير تسميته حسب الحالة ..

 

وإذا كانت قاعدة البيانات محمية بكلمة مرور فسيظهر لك رسالة لإدخال كلمة مرور قاعدة البيانات فور اختيارها ، وعند تنفيذ الإجراء الذي تريده للتأكيد ..

 

 

 

ShiftEnabled.mdb

تم تعديل بواسطه Foksh
إضافة آخر سطر
  • Like 1
قام بنشر
في 16‏/4‏/2026 at 06:56, أحمد العيسى said:

فى الفلترة : يكفى السطر الثالث ( كل الملفات )

 

ما هو فى المرفق القديم بتاعى كنت عامل كده
بس يبدو لان حضرتك مأخدتش بالك انا عملتها كده فى المرفق الجديد بس علشان اوضح لحضرتك واثبت لك انها تعمل مع كل الاصدارات :biggrin:
فياريت تتأكد من المرفق باسم : تفعيل وإلغاء الشفت2.mdb اللى حضرتك ارفقته وحتجد اساسا انه مافيهوش اى مشاكل
 

 

في 16‏/4‏/2026 at 06:56, أحمد العيسى said:

بالنسبة لملف   *.accdb   لم ينجح التطبيق فى تغيير الخاصية

img?id=1536173


اسف انا كتبت الكود وجربته وكان شغال على كل الامتدادت لكل الاصدارات 
ولكن عند المراجعة استوقفنى استخدام Workspaces

واعتقد ان استخدام  :DBEngine.Workspaces(0) يرث إعدادات محرك المشغل الحالي لذلك يبدو ان حضرتك تستخدم اصدار اقل من 2007 لذلك حدثت هذه المشكلة على ما يبدو 


ودى المرفق الجديد
 

تفعيل وإلغاء الشفت-V2.mdb

  • Like 1
قام بنشر (معدل)

شكراً  للسادة الأعزاء

Foksh  ، ابو جودي

مبدئياً  .. التطبيقان كل منهما يلبى المطلوب فى بيئة تشغيله

عند التشغيل على أكسس 2003 يقوم باللازم نحو اللاحقة  mdb

وعند التشغيل على أكسس 2007 يتعامل مع الملفات دات اللاحقة  accdb

أحتاج لمزيد من التجارب لاحقاً !!

تم تعديل بواسطه أحمد العيسى
قام بنشر
37 دقائق مضت, أحمد العيسى said:

عند التشغيل على أكسس 2003 يقوم باللازم نحو اللاحقة  mdb

ليس لدي نسخة 2003 حتى أقوم بالتجربة ، ولكن الأمر مرهون بتجربتك على أكثر من إصدار أخي الكريم ..

جرب كلا الحلين وأعتقد أنك سترسو على بر الإجابة بأمان :smile: .

  • Like 1
قام بنشر
18 ساعات مضت, Foksh said:

ليس لدي نسخة 2003 حتى أقوم بالتجربة

بسيطة .. إذا أردت  : فيما يلى رابط لتحميل Portable_Office 2003  من صنعي ، جربه

مطلوب تعديل بسيط على تطبيقك:

عند الضغط على زر تفعيل مفتاح الشيفت / إلغاء مفتاح الشيفت ، يتم التنقل بين عناصر الاختيار      Disable و Enaable

والعكس لا يتم

إذا تم التأشير واختيار عناصر الاختيار لا يتم تغير المسمى على زر تفعيل مفتاح الشيفت طبقاً للإختيار  والمطلوب التعديل هنا

قام بنشر
11 دقائق مضت, أحمد العيسى said:

إذا تم التأشير واختيار عناصر الاختيار لا يتم تغير المسمى على زر تفعيل مفتاح الشيفت طبقاً للإختيار  والمطلوب التعديل هنا

أصغر همومك أخي أحمد .. كمثال ؛ في حدث بعد التحديث للعنصر OptMain ، جرب الفكرة التالية أو كما تريد لحاجتك :-

Private Sub OptMain_AfterUpdate()
    If Me.OptMain.Value = 1 Then
        Me.Btn_Doit.Caption = "إلغاء تفعيل مفتاح الشيفت"
    Else
        Me.Btn_Doit.Caption = "تفعيل مفتاح الشيفت"
    End If
End Sub

 

قام بنشر

استاذ @أحمد العيسى :fff:

خلينى اوضح شئ مهم جدا جدا وانا عدلت الاكواد بسببها 

يستحيل ان اكسس اقل فى اصدار 2007 يقوم بعمل تفعيل او الغاء تفعيل بالشفت  لقواعد بيانات تمت على اصدارات اعلى من او يساوى 2007

السبب: السبب ان الاصدارات الاقل تعتمد على محرك اساسا لا يستطيع التعامل مع قواعد بيانات تمت على اصدارات احدث واللى نتيجتها الرسالة اللى انت شاركتها ولكن العكش ممكن فمحرك قواعد البيانات الحديثة يمكنه التعامل مع قواعد البيانات الاقل من 2007 

جملة الاتصال لتمرير كلمة المرور تختلف بين الاصدارات اقل من 2007 واعلى من او يساوى الاصدار 2007 

واتفضل المرفق :fff:

 

 

  • Like 1
قام بنشر (معدل)

 

 

منذ ساعه, Foksh said:

أصغر همومك أخي أحمد .. كمثال ؛ في حدث بعد التحديث للعنصر OptMain ، جرب الفكرة التالية أو كما تريد لحاجتك :-

Private Sub OptMain_AfterUpdate()
    If Me.OptMain.Value = 1 Then
        Me.Btn_Doit.Caption = "إلغاء تفعيل مفتاح الشيفت"
    Else
        Me.Btn_Doit.Caption = "تفعيل مفتاح الشيفت"
    End If
End Sub

 

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

فى حين أنه يحتوى على نموذج واحد يتيم يمكن وضع كل أوامر الموديول به

ملاحظتك حدث بعد التحديث للعنصر OptMain لم يكن غائباً عنى

ولكن كنت أفكر فى وظيفة التطبيق المتشابكة وأن الحدث هل سوف يؤثر فيها ؟

إقتراحى إذا أعجبك:

وضع زري أمر "إلغاء تفعيل" ، "تمكين تفعيل"  وليس زر واحد مع خفوت أحدهما وقت الحاجة لأحدهما

التعديل فى بيان  "Lbl_Info" بالنموذج  أو الاستغناء عنها

 خد راحتك  .. أعلم أن دماغك متكلفة ويمكنك أن تضيف من إبداعاتك الكثير ،

فى انتظار مرفقك المعدل

تم تعديل بواسطه أحمد العيسى
قام بنشر (معدل)
18 دقائق مضت, ابو جودي said:

استاذ @أحمد العيسى :fff:

خلينى اوضح شئ مهم جدا جدا وانا عدلت الاكواد بسببها 

يستحيل ان اكسس اقل فى اصدار 2007 يقوم بعمل تفعيل او الغاء تفعيل بالشفت  لقواعد بيانات تمت على اصدارات اعلى من او يساوى 2007

تمام  100 %

لماذا أصمم على أن أن يكون التطبيق بأكسس 2003

لأن جميع إصدارات الأكسس التالية تقوم بتشغيل هذا التطبيق ما لم نضيف خصائص عالية من الإصدارات الحديثة

لذلك ذكرت أن تطبيق حضرتك قد نجح فى التأثير  على التطبيقات ذات اللاحقة   accdb  بشرط تشغيله من داخل 2007 فما فوق

لكن فى أكسس 2003  لن يؤثر إلا  فى التطبيقات mdb

تم تعديل بواسطه أحمد العيسى
قام بنشر
8 دقائق مضت, أحمد العيسى said:

تمام  100 %

لماذا أصمم على أن أن يكون التطبيق بأكسس 2003

لأن جميع إصدارات الأكسس التالية تقوم بتشغيل هذا التطبيق ما لم نضيف خصائص عالية من الإصدارات الحديثة

لذلك ذكرت أن تطبيق حضرتك قد نجح فى التأثير  على التطبيقات ذات اللاحقة   accdb  بشرط تشغيله من داخل 2007 فما فوق

لكن فى أكسس 2003  لن يؤثر إلا  التطبيقات mdb

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

 

  • تمت الإجابة
قام بنشر

المرفق 

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

تفعيل وإلغاء الشفت-V2.accdb

  • Like 1
قام بنشر
58 دقائق مضت, ابو جودي said:

المرفق 

بعد التجربة على 2003 لو تمام يبقى ماشئ الحل 
 

الله ينور

بتشغيل المرفق من داخل أكسس 2007  وتطبيقه على ملفين إحداهما حديث  " تجربة.accdb  "  والآخر  قديم تنسيق 2003   " مدرسين.mdb  "

تمام لكلا الملفين ، وأعتقد أنه لا حاجة لتحويل هذا المرفق إلى نظام 2003   لأن المطلوب هو تأثيره على ملفات 2003  بجانب تأثيره على الملفات الأحدث

  • Thanks 1
قام بنشر

من فضلك بس جرب تعمل ملف accde
ومرة كمان مع ملف mde

لانه المفروض يرفض لانهم ما يتعدلوا

وياريتك لو تجرب قواعد Accde , Mdb  بكلمات مرور وطبعا كلمات المرور على القاعدة مش على محرر الاكواد علشان بس تتأكد أن كل شئ شغال معك تمام

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

 

وبغض النظر عن الفكرة الموجودة فى النموذج بالشكل ده 

انا اول تعديل تعديل لى على القاعدة دى قلت انها قاعدة الاستاذة أم عهود مش شغلى ولا افكار انا افتكر بس انا استخدمت فى اول تعديل فيل ديلوج بدل دوال API  وعارف ان الدوال اسرع بس وقتها مكنتش بأعرف احول الدول ل 64 بصراحة

وتانى تعديل وقتها اضافة كلمة المرور 

فلو فى اى شئ مش عاجبك فى الافكار او عاوز تضيف اى شئ او تكستميز اى حاجة بشكل معين قولى 

انا بصراحة واعتذر مكنتش مركز قوى مع المشاركات كنت باشوف اخر واحد واحاول استنتج الوجوار ماشئ ازاى لانى كنت مشغول جدا

 

بصراحة مش حضحك عليك كسلت ادور على دوال API  واحولها بدل الفيل يلدوج والربط المتأخر :biggrin:

قام بنشر (معدل)
28 دقائق مضت, ابو جودي said:

من فضلك بس جرب تعمل ملف accde
ومرة كمان مع ملف mde

ده فعلاً  اللى عملته بالتفصيل : تفعيل ، عدم تفعيل  للملفات   mdb  ، accdb

جربت الآن على ملف  mde 

وكمان عملت له كلمة سر للقاعدة أثناء الفتح الخاص قبل تحويلها

وتم اختبار ظهور وإخفاء كلمة سر القاعدة وتفعيلها وإلغاء تفعيلها  وكله تمام

وأكرر شكري مرة أخرى

 

للعلم فقط

أنا شغال على ويندوز 7    32 بت وعليه أوفيس 2003  أساسي  ، وأوفيس 2007  بورتابل  وهذه بيئة التجارب عندى

قد يكون هناك مشكلة فى أوفيس 2003 البورتابل  الذى رفعته هنا  ، فالجميع يعلم أن التثبيت أفضل طبعاً من ملف بورتابل

تم تعديل بواسطه أحمد العيسى
قام بنشر

مبارك عليك الحل .. وعذراً لعدم المتابعة معك في وقتها ، بس كنت خارج من الشغل للأسف ..

58 دقائق مضت, أحمد العيسى said:

تمام لكلا الملفين ، وأعتقد أنه لا حاجة لتحويل هذا المرفق إلى نظام 2003   لأن المطلوب هو تأثيره على ملفات 2003  بجانب تأثيره على الملفات الأحدث

في المرفق اللي رفعتهولك ، كان فعلاً يتم التنفيذ على الإمتدادين MDB و ACCDB من إصدارات 2007 وما فوق .. لكنك بحثت عن فكرة زرين لكل وظيفة ، وهذا كان يسيراً جداً من خلال الفكرة اللي طرحتها .. ولكن كل الطرق تؤدي إلى روما - ما دامت روما قريبة - :biggrin: ..

 

وفعلاً نسختك اللي رفعتها ما اشتغلتش عندي أنا كمان وده اللي خلاني أطلع وقلت بجرب على كمبيوتر تاني .. 👍🏻

انشئ حساب جديد او قم بتسجيل دخولك لتتمكن من اضافه تعليق جديد

يجب ان تكون عضوا لدينا لتتمكن من التعليق

انشئ حساب جديد

سجل حسابك الجديد لدينا في الموقع بمنتهي السهوله .

سجل حساب جديد

تسجيل دخول

هل تمتلك حساب بالفعل ؟ سجل دخولك من هنا.

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

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

Important Information