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

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

قام بنشر

السلام عليكم

 

بالاشارة الى الموضوع التالي ، والطرق التي تمت الاشارة اليها :

 

 

في المشاريع اللي احتاج لها اعدادات ، كنت استعمل جدول بسطر واحد ،

ولكن في احد مشاريعي ، هذه الاعدادات وصلت الى 21 ولا تزال في زيادة ، فعملت تغيير في الجدول ، واصبح هناك سجل خاص لكل واحدة من الاعدادات:

image.png.f10eff787b531f13dab6c9b57f34a7d0.png

.

image.png.3fae47571aefc5c0e155b96634476d12.png

.

وهذا شكل النموذج المستمر للمستخدم:

image.png.591605a0cc2ba0d99be8fd580b040bb8.png

.

وبياناته :

image.png.26fe6b0a6d59928af2567b29bc2914c5.png

.

ونعرف انه في النموذج المستمر ، لا نستطيع التحكم بشكل حقل دون آخر (إلا عن طريق التنسيق الشرطي ، وعن طريق كود خاص يخص مربع الزر Command button) ، لذلك كان من المهم ان اكتب عبارة معين في اسم الحقل حتى اميزه عن الآخرين (او ان اعمل حقل اكتب فيه طريقة التعامل مع هذا السجل (استفيد منه في التنسيق الشرطي مثلا)) ، لذا نرى ان زر (command button) جميع الحقول التي بحاجة الى اختيار مجلد لها ، بدأ اسم الحقل بالكلمة Path (طبعا هذا مثال) ، وعليه استطعت ان اخفي الزر لبقية السجلات هكذا:

Private Sub Detail_Paint()

    If Left(Me.sName, 4) <> "Path" Then
        Me.cmd_Path.Transparent = True
    Else
        Me.cmd_Path.Transparent = False
    End If
End Sub

 

 

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

Option Compare Database
Option Explicit



    '
    '- tbl_Settings contain the defaults for this program,
    '- instead of having all these fields in one record,
    '- we have records of these fields sName, sValue, sDataType
    '- so here we deal with these values, read/write
    '
    '- jjafferr
    '- v1. 17/04/2025
    '
    
Function tbl_Settings_Data()

    
    '- load the values for the table to TempVars, for each field
    
    Dim rstS As DAO.Recordset
    Dim RC As Long, i As Long
    
    Set rstS = CurrentDb.OpenRecordset("Select * From tbl_Settings")
    rstS.MoveLast: rstS.MoveFirst: RC = rstS.RecordCount
        
    
    For i = 1 To RC
    
        '- clean the old values of THIS record
        TempVars.Remove (rstS!sName)

        
        '- since TempVars is Variant, lets set the actual field values based on the field sDataType
        If rstS!sDataType = "Number" Or rstS!sDataType = "Yes/No" Then
        
            TempVars.Add (rstS!sName), CLng(rstS!sValue)
            
        ElseIf rstS!sDataType = "Text" Then
        
            TempVars.Add (rstS!sName), CStr(rstS!sValue)
            
        ElseIf rstS!sDataType = "Date/Time" Then
        
            TempVars.Add (rstS!sName), CDate(rstS!sValue)
            
        End If
    
    
        rstS.MoveNext
    Next i
    
    rstS.Close: Set rstS = Nothing
    
End Function


Function ListTempVars()
    
    '- list all TemVars values in this Database
    Dim i As Long
    
    For i = 0 To TempVars.Count - 1
        Debug.Print TempVars(i).Name, TempVars(i).Value, VarType(TempVars(i))
    Next i
    
End Function

.

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

اسم الحقل في الجدول
Path_Employees_Pic_Folder

طريقة طلب القيمة  
TempVars!Path_Employees_Pic_Folder

طريقة استعماله  
Me.Picture = TempVars!Path_Employees_Pic_Folder & Me.Employee_ID & ".jpg"

.

السبب الذي جعلني استخدم TempVars يدلا عن الاكواد العامة او الدوال الخاصة هو ، اني اخذ البيانات من الجدول مرة واحدة فقط عند تشغيل البرنامج ، وهذه البيانات تبقى في ذاكرة البرنامج حتى عند استلام رسالة خطأ (عند ظهور رسالة الخطأ ، يقوم اكسس بحذف جميع المتغيرات التي بذاكرنه ، ما عدا بيانات TempVars) ، وبكل بساطة يمكننا قراءة قيمتها من نافذة immediate window في صفحة الكود هكذا:
image.png.29dd21825faa737fabf608a2dbe3ea50.png

.

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

 

جعفر

  • Like 2
  • Thanks 1
قام بنشر

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

خلاصة تجارب الخبراء .. هي كنوز لنا على طبق من ذهب 😊🌹

 

عندي ملاحظتين في بالي ( أفكار لا تزيد ولا تنقص من روعة الموضوع )😁 :

1- موضوع استخدام ال TempVars جميل جدا للسبب الذي ذكرته أنت (إفراغ الذاكرة عند حدوث خطأ ) ، ولكن كمجرد فضفضة .. موضوع استدعاء البيانات من الجداول مرة واحدة عند تشغيل البرنامج قد يؤثر على أنه لو تم تحديث البيانات بعد التشغيل فهذا لن يحدث البيانات التي في الذاكرة إلا إن تم تشغيل أكواد تخزين البيانات في حواصل المتغيرات مجددا ... وأضنك منتبه لهذه النقطة 🙂👌..

ويسترعي الانتباه أيضا إلى أنك حتى لو عملت لها تحديث بعد تغيير البيانات فإنها ستتحدث عندك في جهازك وقد لا تتحدث عند المستخدمين الآخرين الذين شغلوا أجهزتهم قبلك 😅🖐️ ...

 

2- روابط مواقع حفظ الملفات (Files Paths)  عندما تكتب كاملة كما هي مع اسم القرص ( \:C  أو  \:D ) مثلا تجعل مواقع الملفات غير مقرؤة في حال تم نقل موقع المشروع .. لذلك يفضل أن يتم تخزين موقع هذه الملفات من قاعدة البيانات (سواء كانت تتبع ال FE أو ال BE ) والكود يكمل باقي الرابط بالمواقع المناسب ..

مثال على ما أقصده لو كان الشعار في الرابط التالي :

C:\Project Folder\Project BE\Images\LOGOs\CompanyLogo.PNG

فأنت ستحتفظ في الجدول بالجزء البرتقالي فقط وتترك الباقي للبرنامج ليكمله .. 

 

وسلامتكم 🙂🌹

  • Like 1
قام بنشر

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

شكرا على مرورك وملاحظاتك 🙂

 

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

2. البرنامج لتصوير الموظفين (قريبا سأعمل موضوع خاص به ان شاء الله) ، فيجب ان اجعله يعمل مع اعدادات المؤسسة (المجلدات) ، ومكان حفظ الصور لا علاقة لها بمجلد البرنامج.

 

وبما انني لم انتهي 100% من البرنامج ، فلن استغني عن افكاركم 🙂

  • Like 1
قام بنشر

ولا تنسى ان هذا الجدول لإعدادات البرنامج ، وليست بيانات للتداول بين المستخدمين ،

لذا ، وحتى لو اضطررنا لتحديث معلومة معينة في الجدول (وهو واقع الحال هنا كذلك) ، فهذا لا يؤثر على عمل بقية المستخدمين ، فلكل مستخدم اعداداته ومزاجه في استخدام هذه الاعدادات.

 

عند تحديث معلومة معينة (مثلا آخر مكان كان فيه كائن المربع Top و Left) :

1. عند تشغيل البرنامج ، انا آخذ هذه المعلومة من الجدول ، ويقوم البرنامج بعرضها على النموذج ،

2. اثناء عمل البرنامج ، واثناء تحريك المربع ، فانا آخذ هذه القيم من الكائن مباشرة ،

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

نعم لم اتطرق لكود التحديث ، وان شاء الله اضعه هنا حين اكتماله

  • Like 1

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