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

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

مغلق
بدأه sx1 في 5 مايو 2005 · 7 رد · 898 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

الاخوة / الاخوات الافاضل

ما هو الكود عند فتح اي نموذج ويقوم بالتاكد من عدم وجود اي نموذج اخر مفتوح وان كان هناك نموذج مفتوح يقوم باغلاقه

#2

للرفع

#3

انا لا اعمل على الاكسيس

ولكن على الVB

انا استخدم دالة app.PrevInstance

الايمان +الحلم +العلم +العمل = النجاح

ما اسهل ان تنجح ... وما اصعب ان تحافظ على نجاحك

#4

اليك الطريقة التالية

قم بنسخ الوحدة النمطية التالية و قم بحفظها بأي اسم تريده

Function fIsLoaded(ByVal strFormName As String) As Boolean
    If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> 0 Then
        If Forms(strFormName).CurrentView <> 0 Then
            fIsLoaded = True
        End If
    End If
End Function

بعد ذلك تذهب الى النموذج الذي تريده فتحه و يتحقق في نغس الوقت من وجود نموذج آخر مفتوح ليقوم بغلقه تلقائيا و تضع الكود التالي في حدث عند فتحه مثلا:

If fIsLoaded("frm2") Then
    DoCmd.Close acForm, "frm2"
End If

حيث أن frm2 هو اسم النموذج الذي نريد غلقه تلقائيا اذا كان مفتوحا.

المثال المرفق يوجد به نموذجين قم بفتح النموذج frm2 أولا و قم بتحركه من مكانه قليلا حتى تتمكن من معاينة كيفية غلقه تلقائيا, ثم قم بفتح النموذج tblTimes و لاحظ أنه سوف يقوم بغلق النموذج frm2 .

عدد أيام التأخير.rar

#5

الف شكر اخي الكريم على ردك السريع وعلى مشاركتك الايجابيه لمساعدة المبتدئين امثالي...... هذا فعلا هو المطلوب

ولكن عذرا

هل معنى ذلك انه اذا كان يوجد لدي مثلا 10 نماذج فاني اقوم بتكرار

If fIsLoaded("frm2") Then

DoCmd.Close acForm, "frm2"

End If

اقوم بتكرار هذا المقطع 10 مرات باسماء النماذج كلها

ام ماذا

حيث انني كنت اتصور ان يكون الحل

بواسطة كود شبيه ب For Each بحيث لا احدد له اسم النموذج وانما يقوم الكود بفحص ما اذا وجد نموذج مفتوح يقوم هو باقفاله

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

#6

للرفع

#7

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

Dim obj As AccessObject, dbs As Object

    Set dbs = Application.CurrentProject

    For Each obj In dbs.AllForms
        If obj.IsLoaded = True Then
            If obj.Name <> "tblTimes" Then
                DoCmd.Close acForm, obj.Name
            End If
        End If
    Next obj

و هذا مثال على ذلك ,قم بفتح كل النماذج و من افتح النموذج tblTimes و لاحظ ماذا يحدث.

عدد أيام التأخير.rar

#8

الف الف شكر اخي الكريم biskra

لقد اصبت فعلا .... هذا هو المطلوب تماما

جزاك الله عني كل الخير

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…