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

بناء قاعدة بيانات عهدة أجهزة من الصفر(الجداول)


samisalim

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

10 ساعات مضت, ابوخليل said:

تمام  اخوي سامي

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

واصبحت اكثر احكاما واتقانا

80% من العمل سيكون على هذا النموذج

نعم وهذا بفضل الله ثم بفضلكم

 

10 ساعات مضت, ابوخليل said:

هل لاحظت اننا لم نعمل او نحتاج لأي استعلام خارجي

نعم استاذ خليل وبهذا الطريقة نجعل البرنامج اخف واسرع 

10 ساعات مضت, ابوخليل said:

يمكننا ايضا ان نختزل النماذج المساعدة ( المتشابههة في عدد الحقول) 

ذكرت لك هذا لاني رأيتك طالب علم شغف بالتعلم

مثال على ذلك الجداول التالية

معرف نوع الجهاز-الماركة-الموديل-المورد نختزلهن في جدول واحد. 

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

تم تعديل بواسطه samisalim
رابط هذا التعليق
شارك

بالنسبة للجداول لن تتغير ابدا

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

لو جعلنا الحذف حقيقي ( واصبح المصدر حر بدون معيار) لأمكن دمج النماذج المتشابهة مع بعضها كنموذج واحد .

لهذا عملت لك تجميع المتشابه ضمن مكان واحد .. انظر فورم frmBasicInformation ويمكن اضاقة نماذج اخرى داخله حسب الرغبة .

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

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

0- جدول للمستخدمين

1- نموذج الدخول بكلمة مرور فقط

2- نموذج لتغيير كلمة المرور وهي نفسها لتسجيل مستخدم جديد

3 - نموذج بداية ويشتمل على  ازرار التنقل 

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

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

 

 

‏‏‏‏devicesdb12.rar

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

7 ساعات مضت, ابوخليل said:

بالنسبة للجداول لن تتغير ابدا

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

لو جعلنا الحذف حقيقي ( واصبح المصدر حر بدون معيار) لأمكن دمج النماذج المتشابهة مع بعضها كنموذج واحد .

لهذا عملت لك تجميع المتشابه ضمن مكان واحد .. انظر فورم frmBasicInformation ويمكن اضاقة نماذج اخرى داخله حسب الرغبة .

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

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

0- جدول للمستخدمين

1- نموذج الدخول بكلمة مرور فقط

2- نموذج لتغيير كلمة المرور وهي نفسها لتسجيل مستخدم جديد

3 - نموذج بداية ويشتمل على  ازرار التنقل 

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

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

 

 

‏‏‏‏devicesdb12.rar 89.92 kB · 4 downloads

أحسنت استاذ أبو خليل وفكرة ممتازة في تجمبع النماذج 

طرأت على بالي فكرة في دمج حقول جدولي القسم والدائرة في جدول اسم المستخدم 

بعدهها نتخلص من جدولين ونموذجهما 

بحيث يكون ادخال البيانات عن طريق نموذج الموظفين

مع استخدام خاصيةSELECT DISTINCT في حقلي الدائرة والقسم. 

هل ياتراه سوف تنجح الفكرة أو الاحسن في نظرك نحط الجدولي كما هما للخدمة. 

 

 

 

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

اعجبتك فكرة الدمج

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

بل بقاؤها افضل فيما لو احتجنا اليها داخل الاستعلامات .. حيث لو اردنا ادراج معايير فستكون العملية افضل .

انا مع الدمج اذا تحقق شرط الدمج .. وهو الاتفاق في المعنى الذي وجد من اجله

فمثلا الموظفون والمدارس والمستعيرون والمستودع  يشملهم معنى واحد وهو اشتراكهم باستلام الاجهزة وتسجيلها كعهدة عندهم .

القسم والدائرة ينتسب لها الموظف او المستعير الذي الجهاز في عهدته

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

 

 

 

 

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

5 ساعات مضت, ابوخليل said:

اعجبتك فكرة الدمج

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

بل بقاؤها افضل فيما لو احتجنا اليها داخل الاستعلامات .. حيث لو اردنا ادراج معايير فستكون العملية افضل .

انا مع الدمج اذا تحقق شرط الدمج .. وهو الاتفاق في المعنى الذي وجد من اجله

فمثلا الموظفون والمدارس والمستعيرون والمستودع  يشملهم معنى واحد وهو اشتراكهم باستلام الاجهزة وتسجيلها كعهدة عندهم .

القسم والدائرة ينتسب لها الموظف او المستعير الذي الجهاز في عهدته

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

نعم استاذ أبو خليل 

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

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

اعمل ما يحلو لك .. حسب ما تراه مناسبا

اذا اكتملت النماذج لديك ؛ ادخل بيانات متنوعة كاملة وابدأ في تصميم تقاريرك

ملحوظة :

ارى ان تؤجل عمل نموذج البداية والصلاحيات الى انتهاء البرنامج

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

3 دقائق مضت, ابوخليل said:

اعمل ما يحلو لك .. حسب ما تراه مناسبا

اذا اكتملت النماذج لديك ؛ ادخل بيانات متنوعة كاملة وابدأ في تصميم تقاريرك

ملحوظة :

ارى ان تؤجل عمل نموذج البداية والصلاحيات الى انتهاء البرنامج

بإذن الله تعالى 

جزاك الله خيرا أخي ومعلمي الغالي أبو خليل 

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

 

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

  • 2 weeks later...

السلام عليكم ورحمة الله وبركاته

  • تم إضافة جداول مساعدة (للولاية - القرية - معالج الجهاز )
  • تم إضافة في جدول نوع المستخدم سجل (الإحلال والأقسام)
  • تم إضافة نماذج (المستودع - معالج الجهاز)
  • تم إضافة نموذج خاص لإضافة جهة التي سوف يتم صرف الأجهزة التعليمة عند صرف الاجهزة التعليمية مثل الطابعة - وآلة النسخ وتصوير - وغيرها ) إلى قسم معين
  • تم دمج النماذج (بيانات الأجهزة - نوع الجهاز - الماركة - الموديل - نظام التشغيل - المعالج - المورد ) في نموذج واحد بأسم frmBasicDeviceInfrmation
  • تم دمج النماذج (الموظفين - المدارس - اسم المستعير - الدوائر - الأقسام - القسم / المرفق المدرسي) في نموذج واحد بأسم  frmBasicUserInfrmation
  • تم إضافة التقارير التالية       
  1. حصر بيانات أجهزة الحاسب الآلي بمكاتب المديرية(rptComputerDataInDirectorateOffices)
  2. حصر بيانات أجهزة الحاسب الآلي بمكاتب المدرسية(rptComputerDataInSechoolOffices)
  3. حصر بيانات الأجهزة التعليمية المديرية والمدرسية(rptEducationalDevicesDataInSechoolAndDirectorate )

 

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

‏‏‏‏devicesdb12 -6.rar

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

52 دقائق مضت, samisalim said:

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

 

تحتاج الى معيار يضبط العملية

المعيار على ارض الواقع ان الذي سجل له تاريخ تسليم الجهاز  لا يظهر وانما الذي يظهر هو من  سجل له تاريخ استلام فقط ولم يسجل له تاريخ تسليم

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

وتضع له المعيار التالي

Is Null

 

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

7 ساعات مضت, ابوخليل said:

تحتاج الى معيار يضبط العملية

المعيار على ارض الواقع ان الذي سجل له تاريخ تسليم الجهاز  لا يظهر وانما الذي يظهر هو من  سجل له تاريخ استلام فقط ولم يسجل له تاريخ تسليم

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

وتضع له المعيار التالي

Is Null

 

جزاك الله خير استاذ ابو خليل جربت المعيار والامور طيبة

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

السلام عليكم 🙂

 

اخوي ابوخليل ، الله يعطيك الصحة والعافية ، شغل جميل وخفيف 🙂

 

اخوي سامي ، طبعا هذه ملاحظات عامة ، واهميتها هي لتسريع عمل البرنامج ، وتجنب الاخطاء 🙂

 

تركت ملاحظتي سابقا

في ٨‏/١‏/٢٠٢٢ at 13:34, jjafferr said:

اما فهرست الحقول ، فهذا يتم على خطوتين:

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

ثم لاحقا ، لكل حقل نعمل له فرز ، او تصفية (بمعيار) ، سواء في الاستعلام او الكود 🙂

والآن الى التفاصيل من واقع مرفقك في مشاركتك الاخيرة اعلاه ، وبدون ترتيب:

 

الكود :


1. كل مكان عندك الامر Dcount ، مثل

DCount("aaa","ttt") او DCount("aaa","ttt","ccc="& ddd) ،

احذف aaa واستعمل النجمة * ، يعني Dcount("*","ttt")

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


2. كل مكان عندك الامر

DCount("aaa","ttt","ccc="& ddd) ،

الحقل ccc يجب ان يكون مفرس في الجدول (تسمح بالتكرار او لا ، يعتمد على دور الحقل في الجدول) ، وهذا ينطبق على الاوامر Dlookup و Dmax وووو ، فالمثال التالي ، الحقل ename يجب ان يكون مفهرس
DCount("ename", "tblUsersName", "[ename]= '" & Trim(Me.ename) & "'")

3. في كل مكان في الكود ، اذا كنت ستستخدم اسم احد حقول النموذج ، فاستخدم كلمة .Me او !Me قبل الاسم ، حتى بعد سنين لما ترجع للكود ، تعرف ان هذا ليس متغير وانما هو اسم حقل.

4. في راس كل صفحة الكود استخدم السطرين
Option Compare Database
Option Explicit

حتى تضطر ان تصرح عن المتغير المستعمل عن طريق Dim ، حتى يعمل الكود بطريقة اسرع ، وانت تعرف نوع المتغير وتعرف مكان الخطأ.

5. عند كتابة الكود ، وبين كل فترة واخرى استعمل Debug>Compile ، حتى ترى اذا كان الكود فيه اخطاء (انا عملت اختصار له في القائمة) ،
انظر احد الاخطاء الموجود عندك مثلا:

image.png.558fe067d762fcd6981baa46d3578203.png

.

6. من الجميل عمل تنسيق الكود ، حتى تعرف من رؤيته ، بداية ونهاية الحلقات ، مثلا ،

بدلا عن
Private Sub cmdremove_Click()
If MsgBox("هل تريد حذف السجل?", _
    vbExclamation + vbOKCancel, _
    "warning") = vbOK Then
Me.deleteBox = True
Else
Exit Sub
End If
Me.Requery
End Sub

اكتب
Private Sub cmdremove_Click()
    If MsgBox("هل تريد حذف السجل?", _
            vbExclamation + vbOKCancel, _
            "warning") = vbOK Then
        Me.deleteBox = True
    Else
        Exit Sub
    End If
    Me.Requery
End Sub


7. اختصر الكلمات الطويلة ، حتى تستطيع ان تقرأها بسهولة :

 فبدلا عن
Forms!frmdevDetails!frmDetails!userType.Enabled = False
Forms!frmdevDetails!frmDetails!users.Enabled = False
Forms!frmdevDetails!frmDetails!receiveDate.Enabled = False
Forms!frmdevDetails!frmDetails!idOffice.Enabled = False
Forms!frmdevDetails!frmDetails!dateHireEnd.Enabled = False
Forms!frmdevDetails!frmDetails!returnDate.Enabled = True

استخدم
with Forms!frmdevDetails!frmDetails
    !userType.Enabled = False
    !users.Enabled = False
    !receiveDate.Enabled = False
    !idOffice.Enabled = False
    !dateHireEnd.Enabled = False
    !returnDate.Enabled = True
end with


وبدلا عن
Private Sub zerClose_Click()
If IsNull(Forms!frmdevDetails!frmDetails!receiveDate) And Not IsNull(Forms!frmdevDetails!frmDetails!users) Then
MsgBox "لطفاً أدخل تاريخ التسليم"
ElseIf Forms!frmdevDetails!frmDetails!userType = 4 And IsNull(Forms!frmdevDetails!frmDetails!dateHireEnd) Then
MsgBox "لطفاً أدخل تاريخ نهايةالإعارة"
ElseIf IsNull(Forms!frmdevDetails!frmDetails!userType) And Not IsNull(Forms!frmdevDetails!frmDetails!receiveDate) Then
MsgBox "لطفاً أدخل نوع المستخدم"
ElseIf IsNull(Forms!frmdevDetails!frmDetails!users) And Not IsNull(Forms!frmdevDetails!frmDetails!receiveDate) Then
MsgBox "لطفاً أدخل المستخدم"
Exit Sub
Else
DoCmd.Close
End If
End Sub

استخدم
Private Sub zerClose_Click()
    with Forms!frmdevDetails!frmDetails
        If IsNull(!receiveDate) And Not IsNull(!users) Then
            MsgBox "لطفاً أدخل تاريخ التسليم"
        ElseIf !userType = 4 And IsNull(!dateHireEnd) Then
            MsgBox "لطفاً أدخل تاريخ نهايةالإعارة"
        ElseIf IsNull(!userType) And Not IsNull(!receiveDate) Then
            MsgBox "لطفاً أدخل نوع المستخدم"
        ElseIf IsNull(!users) And Not IsNull(!receiveDate) Then
            MsgBox "لطفاً أدخل المستخدم"
            Exit Sub
        Else
            DoCmd.Close
        End If
    end with

End sub

 

8. لا تستعمل الكلمات المحجوزة للأكسس في تسمية اي كائنات او متغيرات ، واذا اضطررت ان تستعملها:

مثلا: لا تستعمل Me.section ، وانما استعمل Me![section]

 

الاستعلامات :

 

9. كل مرة نستخدم معيار او فرز ، وفي اي مكان في البرنامج ، يجب فهرست الحقل ، مثل :

image.png.dd2982bc838449b174a81488ca5ce37a.png

.

وحتى في مربع القائمة المنسدلة :

image.png.88b41ab30991366717ab9420a6ab725a.png

.

الحقل UsrType يجب ان يكون مفهرس

image.png.87e8245b5d1760686c0936f671811550.png

.

10. لما تربط النموذج الرئيسي بالنموذج الفرعي ، فيجب ان يكون بينهما علاقة ، وكلا الحقلين يجب ان يكونا مفهرسين :

image.png.62b1c1b34fe0c864cc7720c752d6e2d7.png

.

11. الصور في البرنامج ، ولحفظ حجم البرنامج صغيرا ،

يجب ان تكون الصور موجودة في مجلد في الكمبيوتر ، وليست في الجداول ولا مضمنه في النماذج والتقارير ،

وانا استعمل المجلدات بهذه الطريقة ، فحتى لما تنقلها لكمبيوتر آخر ، كل شيء يشتغل بدون مشاكل:

image.png.7bf3b7969183f1875dbaa8a4e975ad61.png

.

وقد عملت نسخة من الصور الثلاث الموجودة في التقارير ، ووضعتها في المجلد images ،

وفي التقارير ، تعمل تغيير في الاعدادات ، بدلا عن Embedded ، نعملها Linked :

image.png.88f2667de1ee4463f92c1d505d444e91.png

.

حجم ملفك الاصل بعد الضغط والاصلاح:

image.png.e4d8825c98473af43a2f23008f6c72e6.png

.

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

Private Sub ReportHeaderSection_Format(Cancel As Integer, FormatCount As Integer)
On Error GoTo err_ReportHeaderSection_Format

    Me.img_Ministry_of_Education.Picture = Application.CurrentProject.Path & "\images\Ministry_of_Education.jpg"
    Me.img_Oman_Vision_2040.Picture = Application.CurrentProject.Path & "\images\Oman_Vision_2040.jpg"
    Me.img_Quality_Management_System.Picture = Application.CurrentProject.Path & "\images\Quality_Management_System.jpg"
    
Exit_ReportHeaderSection_Format:

    Exit Sub
err_ReportHeaderSection_Format:

    If Err.Number = 2220 Then
        'image not found
        Resume Next
    Else
        MsgBox Err.Number & vbCrLf & Err.Description
        Resume Exit_ReportHeaderSection_Format
    End If
    
End Sub

.

عليه اصبح حجم الملف ، حوالي النصف :

image.png.d60e48062d4512b41eb01574f2764f00.png

.

 

12. لما تكون عندك علاقة في الاستعلام بين الجداول ، بهذه الطريقة مثلا :

image.png.01d615df333784ca6b3d2ca7a8c020d3.png

.

ففعلا انت محتاج الى عمل علاقة بين الجداول (خارج الاستعلام) ، والتي ستجبرك على عمل فهرسة مسبقا لحقل من جانب واحد ، او عمل فهرسة للجانبين ، بمعنى: اذا عملت فهرسة لحقل في جدول واحد ، ثم عملت علاقة بين هذا الحقل A وحقل B في جدول آخر ، فيمكنك ان لا تفهرس الحقل B في الجدول ، لأن العلاقة تلقائيا تجعله مفهرسا ، والاكسس يفهم هذا.

 

بعض الملاحظات اعلاه تقدر تقوم بها مباشرة الآن ، ولكن لا تعمل العلاقات إلا بعد ان يعطيك اخوي ابوخليل الضوء الاخضر 🙂

 

جعفر

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

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

بالنسبة للعلاقات فرأيي ان الأخ سامي طالب علم يحسب خطواته فنتركه على سجيته يعمل ما يشاء ، فالتعلم بالبحث والاكتشاف ارسخ

 

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

18 دقائق مضت, ابوخليل said:

فنتركه على سجيته يعمل ما يشاء ، فالتعلم بالبحث والاكتشاف ارسخ

بالبحث والاستكشاف لساعات ، ياما نلتفت ، واذا بعمود الفجر قد ظهر 🙂

 

جعفر

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

23 ساعات مضت, jjafferr said:

السلام عليكم 🙂

 

اخوي ابوخليل ، الله يعطيك الصحة والعافية ، شغل جميل وخفيف 🙂

 

اخوي سامي ، طبعا هذه ملاحظات عامة ، واهميتها هي لتسريع عمل البرنامج ، وتجنب الاخطاء 🙂

 

تركت ملاحظتي سابقا

والآن الى التفاصيل من واقع مرفقك في مشاركتك الاخيرة اعلاه ، وبدون ترتيب:

 

الكود :


1. كل مكان عندك الامر Dcount ، مثل

DCount("aaa","ttt") او DCount("aaa","ttt","ccc="& ddd) ،

احذف aaa واستعمل النجمة * ، يعني Dcount("*","ttt")

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


2. كل مكان عندك الامر

DCount("aaa","ttt","ccc="& ddd) ،

الحقل ccc يجب ان يكون مفرس في الجدول (تسمح بالتكرار او لا ، يعتمد على دور الحقل في الجدول) ، وهذا ينطبق على الاوامر Dlookup و Dmax وووو ، فالمثال التالي ، الحقل ename يجب ان يكون مفهرس
DCount("ename", "tblUsersName", "[ename]= '" & Trim(Me.ename) & "'")

3. في كل مكان في الكود ، اذا كنت ستستخدم اسم احد حقول النموذج ، فاستخدم كلمة .Me او !Me قبل الاسم ، حتى بعد سنين لما ترجع للكود ، تعرف ان هذا ليس متغير وانما هو اسم حقل.

4. في راس كل صفحة الكود استخدم السطرين
Option Compare Database
Option Explicit

حتى تضطر ان تصرح عن المتغير المستعمل عن طريق Dim ، حتى يعمل الكود بطريقة اسرع ، وانت تعرف نوع المتغير وتعرف مكان الخطأ.

5. عند كتابة الكود ، وبين كل فترة واخرى استعمل Debug>Compile ، حتى ترى اذا كان الكود فيه اخطاء (انا عملت اختصار له في القائمة) ،
انظر احد الاخطاء الموجود عندك مثلا:

image.png.558fe067d762fcd6981baa46d3578203.png

.

6. من الجميل عمل تنسيق الكود ، حتى تعرف من رؤيته ، بداية ونهاية الحلقات ، مثلا ،

بدلا عن
Private Sub cmdremove_Click()
If MsgBox("هل تريد حذف السجل?", _
    vbExclamation + vbOKCancel, _
    "warning") = vbOK Then
Me.deleteBox = True
Else
Exit Sub
End If
Me.Requery
End Sub

اكتب
Private Sub cmdremove_Click()
    If MsgBox("هل تريد حذف السجل?", _
            vbExclamation + vbOKCancel, _
            "warning") = vbOK Then
        Me.deleteBox = True
    Else
        Exit Sub
    End If
    Me.Requery
End Sub


7. اختصر الكلمات الطويلة ، حتى تستطيع ان تقرأها بسهولة :

 فبدلا عن
Forms!frmdevDetails!frmDetails!userType.Enabled = False
Forms!frmdevDetails!frmDetails!users.Enabled = False
Forms!frmdevDetails!frmDetails!receiveDate.Enabled = False
Forms!frmdevDetails!frmDetails!idOffice.Enabled = False
Forms!frmdevDetails!frmDetails!dateHireEnd.Enabled = False
Forms!frmdevDetails!frmDetails!returnDate.Enabled = True

استخدم
with Forms!frmdevDetails!frmDetails
    !userType.Enabled = False
    !users.Enabled = False
    !receiveDate.Enabled = False
    !idOffice.Enabled = False
    !dateHireEnd.Enabled = False
    !returnDate.Enabled = True
end with


وبدلا عن
Private Sub zerClose_Click()
If IsNull(Forms!frmdevDetails!frmDetails!receiveDate) And Not IsNull(Forms!frmdevDetails!frmDetails!users) Then
MsgBox "لطفاً أدخل تاريخ التسليم"
ElseIf Forms!frmdevDetails!frmDetails!userType = 4 And IsNull(Forms!frmdevDetails!frmDetails!dateHireEnd) Then
MsgBox "لطفاً أدخل تاريخ نهايةالإعارة"
ElseIf IsNull(Forms!frmdevDetails!frmDetails!userType) And Not IsNull(Forms!frmdevDetails!frmDetails!receiveDate) Then
MsgBox "لطفاً أدخل نوع المستخدم"
ElseIf IsNull(Forms!frmdevDetails!frmDetails!users) And Not IsNull(Forms!frmdevDetails!frmDetails!receiveDate) Then
MsgBox "لطفاً أدخل المستخدم"
Exit Sub
Else
DoCmd.Close
End If
End Sub

استخدم
Private Sub zerClose_Click()
    with Forms!frmdevDetails!frmDetails
        If IsNull(!receiveDate) And Not IsNull(!users) Then
            MsgBox "لطفاً أدخل تاريخ التسليم"
        ElseIf !userType = 4 And IsNull(!dateHireEnd) Then
            MsgBox "لطفاً أدخل تاريخ نهايةالإعارة"
        ElseIf IsNull(!userType) And Not IsNull(!receiveDate) Then
            MsgBox "لطفاً أدخل نوع المستخدم"
        ElseIf IsNull(!users) And Not IsNull(!receiveDate) Then
            MsgBox "لطفاً أدخل المستخدم"
            Exit Sub
        Else
            DoCmd.Close
        End If
    end with

End sub

 

8. لا تستعمل الكلمات المحجوزة للأكسس في تسمية اي كائنات او متغيرات ، واذا اضطررت ان تستعملها:

مثلا: لا تستعمل Me.section ، وانما استعمل Me![section]

 

الاستعلامات :

 

9. كل مرة نستخدم معيار او فرز ، وفي اي مكان في البرنامج ، يجب فهرست الحقل ، مثل :

image.png.dd2982bc838449b174a81488ca5ce37a.png

.

وحتى في مربع القائمة المنسدلة :

image.png.88b41ab30991366717ab9420a6ab725a.png

.

الحقل UsrType يجب ان يكون مفهرس

image.png.87e8245b5d1760686c0936f671811550.png

.

10. لما تربط النموذج الرئيسي بالنموذج الفرعي ، فيجب ان يكون بينهما علاقة ، وكلا الحقلين يجب ان يكونا مفهرسين :

image.png.62b1c1b34fe0c864cc7720c752d6e2d7.png

.

11. الصور في البرنامج ، ولحفظ حجم البرنامج صغيرا ،

يجب ان تكون الصور موجودة في مجلد في الكمبيوتر ، وليست في الجداول ولا مضمنه في النماذج والتقارير ،

وانا استعمل المجلدات بهذه الطريقة ، فحتى لما تنقلها لكمبيوتر آخر ، كل شيء يشتغل بدون مشاكل:

image.png.7bf3b7969183f1875dbaa8a4e975ad61.png

.

وقد عملت نسخة من الصور الثلاث الموجودة في التقارير ، ووضعتها في المجلد images ،

وفي التقارير ، تعمل تغيير في الاعدادات ، بدلا عن Embedded ، نعملها Linked :

image.png.88f2667de1ee4463f92c1d505d444e91.png

.

حجم ملفك الاصل بعد الضغط والاصلاح:

image.png.e4d8825c98473af43a2f23008f6c72e6.png

.

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

Private Sub ReportHeaderSection_Format(Cancel As Integer, FormatCount As Integer)
On Error GoTo err_ReportHeaderSection_Format

    Me.img_Ministry_of_Education.Picture = Application.CurrentProject.Path & "\images\Ministry_of_Education.jpg"
    Me.img_Oman_Vision_2040.Picture = Application.CurrentProject.Path & "\images\Oman_Vision_2040.jpg"
    Me.img_Quality_Management_System.Picture = Application.CurrentProject.Path & "\images\Quality_Management_System.jpg"
    
Exit_ReportHeaderSection_Format:

    Exit Sub
err_ReportHeaderSection_Format:

    If Err.Number = 2220 Then
        'image not found
        Resume Next
    Else
        MsgBox Err.Number & vbCrLf & Err.Description
        Resume Exit_ReportHeaderSection_Format
    End If
    
End Sub

.

عليه اصبح حجم الملف ، حوالي النصف :

image.png.d60e48062d4512b41eb01574f2764f00.png

.

 

12. لما تكون عندك علاقة في الاستعلام بين الجداول ، بهذه الطريقة مثلا :

image.png.01d615df333784ca6b3d2ca7a8c020d3.png

.

ففعلا انت محتاج الى عمل علاقة بين الجداول (خارج الاستعلام) ، والتي ستجبرك على عمل فهرسة مسبقا لحقل من جانب واحد ، او عمل فهرسة للجانبين ، بمعنى: اذا عملت فهرسة لحقل في جدول واحد ، ثم عملت علاقة بين هذا الحقل A وحقل B في جدول آخر ، فيمكنك ان لا تفهرس الحقل B في الجدول ، لأن العلاقة تلقائيا تجعله مفهرسا ، والاكسس يفهم هذا.

 

بعض الملاحظات اعلاه تقدر تقوم بها مباشرة الآن ، ولكن لا تعمل العلاقات إلا بعد ان يعطيك اخوي ابوخليل الضوء الاخضر 🙂

 

جعفر

وعليكم السلام ورحمة الله وبركاته

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

بارك الله فيكم على جهودكم الجبارة في خدمة طالب العلم

23 ساعات مضت, ابوخليل said:

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

بالنسبة للعلاقات فرأيي ان الأخ سامي طالب علم يحسب خطواته فنتركه على سجيته يعمل ما يشاء ، فالتعلم بالبحث والاكتشاف ارسخ

 

جزاك الله خيرا استاذ ابو خليل على متابعتك المستمرة وبإذن الله اكون على حسن الظن

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

في 5‏/2‏/2022 at 22:53, jjafferr said:

السلام عليكم 🙂

 

اخوي ابوخليل ، الله يعطيك الصحة والعافية ، شغل جميل وخفيف 🙂

 

اخوي سامي ، طبعا هذه ملاحظات عامة ، واهميتها هي لتسريع عمل البرنامج ، وتجنب الاخطاء 🙂

 

تركت ملاحظتي سابقا

والآن الى التفاصيل من واقع مرفقك في مشاركتك الاخيرة اعلاه ، وبدون ترتيب:

 

الكود :


1. كل مكان عندك الامر Dcount ، مثل

DCount("aaa","ttt") او DCount("aaa","ttt","ccc="& ddd) ،

احذف aaa واستعمل النجمة * ، يعني Dcount("*","ttt")

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


2. كل مكان عندك الامر

DCount("aaa","ttt","ccc="& ddd) ،

الحقل ccc يجب ان يكون مفرس في الجدول (تسمح بالتكرار او لا ، يعتمد على دور الحقل في الجدول) ، وهذا ينطبق على الاوامر Dlookup و Dmax وووو ، فالمثال التالي ، الحقل ename يجب ان يكون مفهرس
DCount("ename", "tblUsersName", "[ename]= '" & Trim(Me.ename) & "'")

3. في كل مكان في الكود ، اذا كنت ستستخدم اسم احد حقول النموذج ، فاستخدم كلمة .Me او !Me قبل الاسم ، حتى بعد سنين لما ترجع للكود ، تعرف ان هذا ليس متغير وانما هو اسم حقل.

4. في راس كل صفحة الكود استخدم السطرين
Option Compare Database
Option Explicit

حتى تضطر ان تصرح عن المتغير المستعمل عن طريق Dim ، حتى يعمل الكود بطريقة اسرع ، وانت تعرف نوع المتغير وتعرف مكان الخطأ.

5. عند كتابة الكود ، وبين كل فترة واخرى استعمل Debug>Compile ، حتى ترى اذا كان الكود فيه اخطاء (انا عملت اختصار له في القائمة) ،
انظر احد الاخطاء الموجود عندك مثلا:

image.png.558fe067d762fcd6981baa46d3578203.png

.

6. من الجميل عمل تنسيق الكود ، حتى تعرف من رؤيته ، بداية ونهاية الحلقات ، مثلا ،

بدلا عن
Private Sub cmdremove_Click()
If MsgBox("هل تريد حذف السجل?", _
    vbExclamation + vbOKCancel, _
    "warning") = vbOK Then
Me.deleteBox = True
Else
Exit Sub
End If
Me.Requery
End Sub

اكتب
Private Sub cmdremove_Click()
    If MsgBox("هل تريد حذف السجل?", _
            vbExclamation + vbOKCancel, _
            "warning") = vbOK Then
        Me.deleteBox = True
    Else
        Exit Sub
    End If
    Me.Requery
End Sub


7. اختصر الكلمات الطويلة ، حتى تستطيع ان تقرأها بسهولة :

 فبدلا عن
Forms!frmdevDetails!frmDetails!userType.Enabled = False
Forms!frmdevDetails!frmDetails!users.Enabled = False
Forms!frmdevDetails!frmDetails!receiveDate.Enabled = False
Forms!frmdevDetails!frmDetails!idOffice.Enabled = False
Forms!frmdevDetails!frmDetails!dateHireEnd.Enabled = False
Forms!frmdevDetails!frmDetails!returnDate.Enabled = True

استخدم
with Forms!frmdevDetails!frmDetails
    !userType.Enabled = False
    !users.Enabled = False
    !receiveDate.Enabled = False
    !idOffice.Enabled = False
    !dateHireEnd.Enabled = False
    !returnDate.Enabled = True
end with


وبدلا عن
Private Sub zerClose_Click()
If IsNull(Forms!frmdevDetails!frmDetails!receiveDate) And Not IsNull(Forms!frmdevDetails!frmDetails!users) Then
MsgBox "لطفاً أدخل تاريخ التسليم"
ElseIf Forms!frmdevDetails!frmDetails!userType = 4 And IsNull(Forms!frmdevDetails!frmDetails!dateHireEnd) Then
MsgBox "لطفاً أدخل تاريخ نهايةالإعارة"
ElseIf IsNull(Forms!frmdevDetails!frmDetails!userType) And Not IsNull(Forms!frmdevDetails!frmDetails!receiveDate) Then
MsgBox "لطفاً أدخل نوع المستخدم"
ElseIf IsNull(Forms!frmdevDetails!frmDetails!users) And Not IsNull(Forms!frmdevDetails!frmDetails!receiveDate) Then
MsgBox "لطفاً أدخل المستخدم"
Exit Sub
Else
DoCmd.Close
End If
End Sub

استخدم
Private Sub zerClose_Click()
    with Forms!frmdevDetails!frmDetails
        If IsNull(!receiveDate) And Not IsNull(!users) Then
            MsgBox "لطفاً أدخل تاريخ التسليم"
        ElseIf !userType = 4 And IsNull(!dateHireEnd) Then
            MsgBox "لطفاً أدخل تاريخ نهايةالإعارة"
        ElseIf IsNull(!userType) And Not IsNull(!receiveDate) Then
            MsgBox "لطفاً أدخل نوع المستخدم"
        ElseIf IsNull(!users) And Not IsNull(!receiveDate) Then
            MsgBox "لطفاً أدخل المستخدم"
            Exit Sub
        Else
            DoCmd.Close
        End If
    end with

End sub

 

8. لا تستعمل الكلمات المحجوزة للأكسس في تسمية اي كائنات او متغيرات ، واذا اضطررت ان تستعملها:

مثلا: لا تستعمل Me.section ، وانما استعمل Me![section]

 

الاستعلامات :

 

9. كل مرة نستخدم معيار او فرز ، وفي اي مكان في البرنامج ، يجب فهرست الحقل ، مثل :

image.png.dd2982bc838449b174a81488ca5ce37a.png

.

وحتى في مربع القائمة المنسدلة :

image.png.88b41ab30991366717ab9420a6ab725a.png

.

الحقل UsrType يجب ان يكون مفهرس

image.png.87e8245b5d1760686c0936f671811550.png

.

10. لما تربط النموذج الرئيسي بالنموذج الفرعي ، فيجب ان يكون بينهما علاقة ، وكلا الحقلين يجب ان يكونا مفهرسين :

image.png.62b1c1b34fe0c864cc7720c752d6e2d7.png

.

11. الصور في البرنامج ، ولحفظ حجم البرنامج صغيرا ،

يجب ان تكون الصور موجودة في مجلد في الكمبيوتر ، وليست في الجداول ولا مضمنه في النماذج والتقارير ،

وانا استعمل المجلدات بهذه الطريقة ، فحتى لما تنقلها لكمبيوتر آخر ، كل شيء يشتغل بدون مشاكل:

image.png.7bf3b7969183f1875dbaa8a4e975ad61.png

.

وقد عملت نسخة من الصور الثلاث الموجودة في التقارير ، ووضعتها في المجلد images ،

وفي التقارير ، تعمل تغيير في الاعدادات ، بدلا عن Embedded ، نعملها Linked :

image.png.88f2667de1ee4463f92c1d505d444e91.png

.

حجم ملفك الاصل بعد الضغط والاصلاح:

image.png.e4d8825c98473af43a2f23008f6c72e6.png

.

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

Private Sub ReportHeaderSection_Format(Cancel As Integer, FormatCount As Integer)
On Error GoTo err_ReportHeaderSection_Format

    Me.img_Ministry_of_Education.Picture = Application.CurrentProject.Path & "\images\Ministry_of_Education.jpg"
    Me.img_Oman_Vision_2040.Picture = Application.CurrentProject.Path & "\images\Oman_Vision_2040.jpg"
    Me.img_Quality_Management_System.Picture = Application.CurrentProject.Path & "\images\Quality_Management_System.jpg"
    
Exit_ReportHeaderSection_Format:

    Exit Sub
err_ReportHeaderSection_Format:

    If Err.Number = 2220 Then
        'image not found
        Resume Next
    Else
        MsgBox Err.Number & vbCrLf & Err.Description
        Resume Exit_ReportHeaderSection_Format
    End If
    
End Sub

.

عليه اصبح حجم الملف ، حوالي النصف :

image.png.d60e48062d4512b41eb01574f2764f00.png

.

 

12. لما تكون عندك علاقة في الاستعلام بين الجداول ، بهذه الطريقة مثلا :

image.png.01d615df333784ca6b3d2ca7a8c020d3.png

.

ففعلا انت محتاج الى عمل علاقة بين الجداول (خارج الاستعلام) ، والتي ستجبرك على عمل فهرسة مسبقا لحقل من جانب واحد ، او عمل فهرسة للجانبين ، بمعنى: اذا عملت فهرسة لحقل في جدول واحد ، ثم عملت علاقة بين هذا الحقل A وحقل B في جدول آخر ، فيمكنك ان لا تفهرس الحقل B في الجدول ، لأن العلاقة تلقائيا تجعله مفهرسا ، والاكسس يفهم هذا.

 

بعض الملاحظات اعلاه تقدر تقوم بها مباشرة الآن ، ولكن لا تعمل العلاقات إلا بعد ان يعطيك اخوي ابوخليل الضوء الاخضر 🙂

 

جعفر

السلام عليكم @jjafferr

استاذ جعفر  عسى اكون قد وفقت في حل الواجب😃وإي ملاحظات أنا مستعد لتعديلها

مرفق لكم ملف التعديل

‏‏‏‏devicesdb12 -9.rar

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

وعليكم السلام اخوي سامي 🙂

 

نظرت في الملف بشكل عام ، ومثل ما قال اخونا العود ابوخليل :

في ١٣‏/١‏/٢٠٢٢ at 15:29, ابوخليل said:

تمام .. عمل جميل .. والى الاحتراف

 

جعفر

 

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

  • 3 weeks later...

السلام عليكم 😇

أستاذ ابو خليل والاستاذ جعفر غبت عنكم كثيرا ورجعت بعد العمل على البرنامج الرجاء منكم إبداء رايكم

اتمنى النظر في نموذج  FrmSubFilterSchool

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

مرفق لكم البرنامج

 

‏‏‏‏devicesdb12 -9.7z

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

16 ساعات مضت, samisalim said:

اتمنى النظر في نموذج  FrmSubFilterSchool

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

 

 

‏‏‏‏devicesdb12 -9.7z 808.33 kB · 7 downloads

الحمدلله تم ربط قائمة المنسدلة مع نموذج الفرعي

احاول الحين في عرض التقرير وطباعته

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

21 ساعات مضت, samisalim said:

السلام عليكم 😇

أستاذ ابو خليل والاستاذ جعفر غبت عنكم كثيرا ورجعت بعد العمل على البرنامج الرجاء منكم إبداء رايكم

اتمنى النظر في نموذج  FrmSubFilterSchool

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

مرفق لكم البرنامج

 

 

مرفق لكم آخر تعديل للبرنامج

‏‏‏‏devicesdb12 -9.7z

تم تعديل بواسطه samisalim
رابط هذا التعليق
شارك

عمل جميل

خاصة الشاشة الرئيسية

النتيجة النهائية هي اخراج التقارير ‘ وقد وصلت اليه

يمكنك اخراج العديد منها .

مثلا

احصائية بعدد الاجهزة قيد الاستخدام

حسب النوع والموديل

حسب الادارة او الجهة

نافذة استعلام عن حالة جهاز محدد

وغيرها مما ترى انك بحاجة اليه ..

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

 

 

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

14 ساعات مضت, ابوخليل said:

عمل جميل

خاصة الشاشة الرئيسية

النتيجة النهائية هي اخراج التقارير ‘ وقد وصلت اليه

يمكنك اخراج العديد منها .

مثلا

احصائية بعدد الاجهزة قيد الاستخدام

حسب النوع والموديل

حسب الادارة او الجهة

نافذة استعلام عن حالة جهاز محدد

وغيرها مما ترى انك بحاجة اليه ..

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

 

 

جزاك الله خيرا استاذي الجليل ابو خليل على دعمك المستمر لطلاب العلم بوركت جهودكم الجبارة

بإذن الله تعالى سوف استمر على هذا النهج...

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

وعليكم السلام 🙂

 

1. لازلت تستخدم بعض الصور المضمنه ، بدل ان تربطها عند حدث تحميل النموذج ،

2. هناك نموذج لا توجد طريقة لإغلاقة ،

3. الالوان وحجم الخط والوان الخط ، مو مناسبين لي (يا اخي انا حر في مزاجي 😁) ، 

4. لما تفتح نموذج ، ويكون امام نموذج آخر ، فيكون فيه تلاحم وتخالط في الالوان ، بينما احب ان يكون النموذج ظاهر وواضح بشخصيته ،

5. النموذج frmReceive&Return ، اسمه غلط ، فلا يجب استعمال علامة & في الاسم ، وكذلك فيه اخطاء ، فإذا ما كنت تريده ، احذفه او اعمل على الاسم علامة مثل frmReceive&Return_OLD وبالتالي تعرف انك استبدلته بنموذج آخر ، وانك تحتفظ به مؤقتا ،

6. صحيح تقدر تستعمل Me.Filter ، ولكن تجربتي جعلتني انتقل الى فلتر/تصفية الاستعلام ، والسبب انك يجب ان تتأكد ان Me.Filter فارغ وقت فتح النموذج ، بينما اذا كان عندك Filter ثم فتحت النموذج في وضع Layout ، فان الاكسس يحفظ معلومات الفلتر ضمن النموذج (نفس الشيء بالنسبة للصور كذلك) ، ويجب عليك حذفه وحفظ النموذج مرة اخرى ،

7. انا مو من محبي Set fso = CreateObject("scripting.filesystemobject") إلا في حالات نادرة (مثل لمعرفة مسار سطح المكتب) ، لأنك تضيف اوامر خارجية على الاكسس ، بينما هناك اوامر من الاكسس نفسه لمعظم اوامر fso (لا تنسى ، كل امر في الكود يستهلك قوة من المعالج CPU ويأخذ حيز من الذاكرة المؤقته RAM ، فلماذا هذه الاضافة) ،

8. اذا بتجعل هذا البرنامج في شبكة ، ويكون فيه واجهة على كل كمبيوتر ، وتكون الجداول على السيرفر/الشبكة ، ففي نفس السيرفر او مسار الجداول نضع مجلد الصور ، فعليه الامر Application.CurrentProject.Path يعطيك مسار الواجهة وليس الجداول ، وللحصول على مسار الجداول ، انظر هنا :

 

 

جعفر

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

7 ساعات مضت, jjafferr said:

2. هناك نموذج لا توجد طريقة لإغلاقة ،

3. الالوان وحجم الخط والوان الخط ، مو مناسبين لي (يا اخي انا حر في مزاجي 😁) ، 

4. لما تفتح نموذج ، ويكون امام نموذج آخر ، فيكون فيه تلاحم وتخالط في الالوان ، بينما احب ان يكون النموذج ظاهر وواضح بشخصيته ،

 

شديد يابو عبدالله .. 

تصدق الوان النموذج مريحة  هادئة لا تشغل البصر

النقطة 4  انا اختلف  .. واوجه دوما بان يكون تصميم النماذج متجانس تماما بكل شيء ، بشرط ان يكون المفتوح له الصدارة . بحيث يكون هناك اطار محدد ثابت للنماذج المنبثقة لتمييزها عن النموذج الرئيس ، وان كان لا بد اختلاف فيكون على الرئيس فقط .. 

ملاحظتي  على التصميم .. انه عطل عنصر تحكم الاطارات بحيث عطل زر الاغلاق والافضل اخفاء زر الاغلاق  و يكون زر الاغلاق المصنوع متشابه في جميع النماذج من حيث النوع والمكان 

ملاحظات الاستاذ جعفر وملاحظاتي  هي وجهة نظر محب ، ولا تنقص من قيمة العمل والجهد الذي بذل في سبيله .

 

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

هلا والله اخوي ابوخليل 🙂

 

انا وياك متفقين دائما ان شاء الله 🙂

بالنسبة للنقطة 4 ، فنعم لو فيه برواز للنموذج الامامي ، فستكون محتويات النموذج واضحة بانتمائها لهذا النموذج ،

وبالنسبة للالوان ، فلون الخط الازرق الفاتح ، يحتاج معالجة شوي ،

وطبعا اتفق معاك ان يكون لجميع النماذج طابع واحد ، من مكان قفل النموذج ، الى سجل جديد ، ووو

 

واما شديد ، فظاهره الشدة وداخله اللين 🙂

 

8 ساعات مضت, ابوخليل said:

ملاحظات الاستاذ جعفر وملاحظاتي  هي وجهة نظر محب ، ولا تنقص من قيمة العمل والجهد الذي بذل في سبيله

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

 

جعفر

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

22 ساعات مضت, jjafferr said:

وعليكم السلام 🙂

 

1. لازلت تستخدم بعض الصور المضمنه ، بدل ان تربطها عند حدث تحميل النموذج ،

2. هناك نموذج لا توجد طريقة لإغلاقة ،

3. الالوان وحجم الخط والوان الخط ، مو مناسبين لي (يا اخي انا حر في مزاجي 😁) ، 

4. لما تفتح نموذج ، ويكون امام نموذج آخر ، فيكون فيه تلاحم وتخالط في الالوان ، بينما احب ان يكون النموذج ظاهر وواضح بشخصيته ،

5. النموذج frmReceive&Return ، اسمه غلط ، فلا يجب استعمال علامة & في الاسم ، وكذلك فيه اخطاء ، فإذا ما كنت تريده ، احذفه او اعمل على الاسم علامة مثل frmReceive&Return_OLD وبالتالي تعرف انك استبدلته بنموذج آخر ، وانك تحتفظ به مؤقتا ،

6. صحيح تقدر تستعمل Me.Filter ، ولكن تجربتي جعلتني انتقل الى فلتر/تصفية الاستعلام ، والسبب انك يجب ان تتأكد ان Me.Filter فارغ وقت فتح النموذج ، بينما اذا كان عندك Filter ثم فتحت النموذج في وضع Layout ، فان الاكسس يحفظ معلومات الفلتر ضمن النموذج (نفس الشيء بالنسبة للصور كذلك) ، ويجب عليك حذفه وحفظ النموذج مرة اخرى ،

7. انا مو من محبي Set fso = CreateObject("scripting.filesystemobject") إلا في حالات نادرة (مثل لمعرفة مسار سطح المكتب) ، لأنك تضيف اوامر خارجية على الاكسس ، بينما هناك اوامر من الاكسس نفسه لمعظم اوامر fso (لا تنسى ، كل امر في الكود يستهلك قوة من المعالج CPU ويأخذ حيز من الذاكرة المؤقته RAM ، فلماذا هذه الاضافة) ،

8. اذا بتجعل هذا البرنامج في شبكة ، ويكون فيه واجهة على كل كمبيوتر ، وتكون الجداول على السيرفر/الشبكة ، ففي نفس السيرفر او مسار الجداول نضع مجلد الصور ، فعليه الامر Application.CurrentProject.Path يعطيك مسار الواجهة وليس الجداول ، وللحصول على مسار الجداول ، انظر هنا :

 

 

جعفر

ياهلا بمعلنا الجليل جعفر احببت ملاحظاتك للبرنامج وانا مطيع لمعلمي :signthankspin:

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

Private Sub Form_Load()
On Error GoTo err_Form_Load
    
    Me.cmdDevDetails.Picture = Application.CurrentProject.Path & "\images\Device_barcode.png"
    Me.cmdBasic.Picture = Application.CurrentProject.Path & "\images\Information.png"
    Me.cmdReport.Picture = Application.CurrentProject.Path & "\images\Report.png"
    Me.cmdSearch.Picture = Application.CurrentProject.Path & "\images\Search.png"
    Me.cmdSetting.Picture = Application.CurrentProject.Path & "\images\Setting.png"
    
Exit_Form_Load:

    Exit Sub
err_Form_Load:

    If Err.NUMBER = 2220 Then
        'image not found
        Resume Next
    Else
        MsgBox Err.NUMBER & vbCrLf & Err.Description
        Resume Exit_Form_Load:
    End If

لكن لاحظت عدم تغير حجم البرنامج هل يحتاج انقله إلى قاعدة بيانات جديدة او ماذا افعل؟؟

2- بحثت عن النموذج الذي لا يمكن اغلاقه ولم احصله هل ممكن اسم النموذج

3- بإذن الله سوف اقوم بتنسيقه فيما بعد.

4- بإذن الله سوف احاول تضبيطه آخر شيء.

5- تم التعديل اسم النموذج frmReceive&Return  إلى frmReceiveReturn مع تعديل مشكلته وهذا النموذج لطباعة استمارات استلام وتسليم الأجهزة ويوجد زر في نموذج حركة الأجهزة 

6- هل تقصد هذا الكود

Private Sub cmbAlwilaya_AfterUpdate()
Me.cmbSchool.Requery
' ابحث عن السجل الذي يطابق عنصر التحكم.
    Dim strFilter As String
    If Not IsNull(Me.cmbAlwilaya) Or Me.cmbAlwilaya <> "" Then
      Me.frmSubSchool.Form.Filter = "[Alwilayas]=" & "'" & Me.cmbAlwilaya & "'"
      Me.frmSubSchool.Form.FilterOn = True
    Else
      Me.frmSubSchool.Form.FilterOn = False

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

7 تم حذف الكود وسوف اضيف كود آخر بعد الانتهاء من تقسيم قاعدة البيانات في حدث الاغلاق

8- جميل جدا هذا يلي احتاجه بإذن الله سوف اقوم بتغير مسار البرنامج بعد تقسيمه وتحميله على السيرفر

أشكركم أستاذ جعفر على ملاحظاتكم وتعاونكم معنا اتمنى تستحملني قليلا واستغل وقتك الثمين

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

 

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

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