-
Posts
9981 -
تاريخ الانضمام
-
تاريخ اخر زياره
-
Days Won
406
نوع المحتوي
المنتدى
مكتبة الموقع
معرض الصور
المدونات
الوسائط المتعددة
مشاركات المكتوبه بواسطه jjafferr
-
-
1 ساعه مضت, Moosak said:
عندي سؤال خاطف
1. - ليش تحذف المتغير قبل تعيين قيمة جديدة له ؟
وسؤال آخر ؟
2. - لو خزنا آلاف السجلات في TempVars بيكون عندنا عدد كبير منها ومساحة لا بأس بها في الذاكرة .. ألن يؤثر هذا على الأداء ؟
🙂.
1. هي عادة احاول التمسك بها ، مثل عند الانتهاء من عمل Recordset ، فلا يوجد داعي لإستعمال set rst=Nothing ، ولكنها عادة جيدة خصوصا لما يكون عندك مجموعة من Recordsets 🙂
2.1. الحد الاقصى لـ TempVars هو 255 متغير فقط ،
2.2. هذه الطريقة استعملها فقط لجدول اعدادات البرنامج ، ولا اعتقد انها ستتعدى 30-40 معلومة ، وكما قلت سابقا:
في 27/5/2025 at 19:02, jjafferr said:ولا تنسى ان هذا الجدول لإعدادات البرنامج ، وليست بيانات للتداول بين المستخدمين
-
1
-
-
معلومة قيمة ، شكرا جزيلا 🙂
احنا كل اللي نعرفة عن الشبكة هو ، عندنا DNS وعندنا IP (لما ما يشتغل DNS) للوصول لمجلد المشاركة على السيرفر في الشبكة ، وكله تمام 🙂
-
تم اضافة كود تحديث بيانات الجدول و TempVars ، واتضح انه اسهل مما كنت اتوقع 🙂
Function Update_a_Field(New_Value As String, Field_Name As String) ' ' usage from the Form, for example: ' Call Update_a_Field(Forms!frm_Main!BG_Pixel_Color, "Color_Reference") ' '- update the field value in the table DoCmd.SetWarnings False 'DoCmd.RunSQL ("UPDATE tbl_Settings SET sValue =" & Me.BG_Pixel_Tolerance & " WHERE sName='Color_Tolerance'") DoCmd.RunSQL ("UPDATE tbl_Settings SET sValue =" & New_Value & " WHERE sName='" & Field_Name & "'") DoCmd.SetWarnings True '- update the TempVar TempVars.Remove (Field_Name) '- Remove the field TempVars.Add (Field_Name), New_Value '- add the field with the new value End Function
.
اخوي موسى:
عندي برنامج ، على حاسبتين او ثلاث ، يطبعون منه حوالي 1000 وصل خلال نصف ساعة ، وبه صورتين وبيانات اخرى ، والسيرفر بعيد حوالي كيلومتر او اثنين (اذا تحسب اطوال كيبلات الشبكة) ،
تصور اذا كنا نطلب مسار الصور كلما اردنا طباعة وصل
-
1
-
-
وبعد عدة محاولات ، اتضح ان السطر المذنب هو:
Debug.Print Players, InStr(1, Players, Me.PlayerTxt) في الدالة generateQ()
.
اوقفت عمله ، استمتعت باللعبة 🙂
-
1
-
-
حاولت العب ، بس البرنامج يغلق بعد ان ادخل اسمي !!
-
وعليكم السلام ورحمة الله وبركاته
على طاري الاولاد ، كنت اعمل على نموذج واكتب الكود لاصطياد جميع انواع الاخطاء ، وانتهيت من العمل.
جاء احد الاحفاد ، وما اعرف شو عمل على الشاشة ، واذا يظهر لي خطأ جديد ، ولا عرفت كيفبة ظهوره !!
فكرة جميلة ، شكرا للمشاركة 🙂
-
1
-
-
ولا تنسى ان هذا الجدول لإعدادات البرنامج ، وليست بيانات للتداول بين المستخدمين ،
لذا ، وحتى لو اضطررنا لتحديث معلومة معينة في الجدول (وهو واقع الحال هنا كذلك) ، فهذا لا يؤثر على عمل بقية المستخدمين ، فلكل مستخدم اعداداته ومزاجه في استخدام هذه الاعدادات.
عند تحديث معلومة معينة (مثلا آخر مكان كان فيه كائن المربع Top و Left) :
1. عند تشغيل البرنامج ، انا آخذ هذه المعلومة من الجدول ، ويقوم البرنامج بعرضها على النموذج ،
2. اثناء عمل البرنامج ، واثناء تحريك المربع ، فانا آخذ هذه القيم من الكائن مباشرة ،
3. وعند الخروج من البرنامج ، يتم حفظ هذه المعلومة في الجدول.
نعم لم اتطرق لكود التحديث ، وان شاء الله اضعه هنا حين اكتماله
-
2
-
-
وعليكم السلام اخوي موسى
شكرا على مرورك وملاحظاتك 🙂
1. كلامك صحيح بالنسبة الى معظم البرامج ، ولكن البرنامج الذي اعمل عليه هو يعمل كبرنامج مستقل ، فالبيانات محتاج لقراءتها مرة واحدة عند فتح البرنامج.
2. البرنامج لتصوير الموظفين (قريبا سأعمل موضوع خاص به ان شاء الله) ، فيجب ان اجعله يعمل مع اعدادات المؤسسة (المجلدات) ، ومكان حفظ الصور لا علاقة لها بمجلد البرنامج.
وبما انني لم انتهي 100% من البرنامج ، فلن استغني عن افكاركم 🙂
-
1
-
-
10 دقائق مضت, ابوخليل said:
فتح موضوع جديد لمناقشة التالي :
البحث عن أسهل طريقة ( وبأسهل الادوات المساعدة ) لتطبيق الانتقال بين دفعات الشراء آليا من دون تدخل المستخدم ( ما يدخل اولا يخرج أولا )
على بركة الله
فيه موضوع عمله اخونا ابو جودي ، ما ادري مدى ارتباطة بالموضوع الذي تريد عمله :
-
3
-
-
1 ساعه مضت, ابوخليل said:
والجزء الآخر هو إدارة التخزين لمراعاة نهاية الصلاحية الذي لا يقل أهمية
FIFO = First in, First Out
المادة الداخلة في البداية ، تخرج في البداية
تماما كما تفضلت به اخوي ابوخليل 🙂
-
1
-
1
-
-
السلام عليكم
بالاشارة الى الموضوع التالي ، والطرق التي تمت الاشارة اليها :
في المشاريع اللي احتاج لها اعدادات ، كنت استعمل جدول بسطر واحد ،
ولكن في احد مشاريعي ، هذه الاعدادات وصلت الى 21 ولا تزال في زيادة ، فعملت تغيير في الجدول ، واصبح هناك سجل خاص لكل واحدة من الاعدادات:
.
.
وهذا شكل النموذج المستمر للمستخدم:
.
وبياناته :
.
ونعرف انه في النموذج المستمر ، لا نستطيع التحكم بشكل حقل دون آخر (إلا عن طريق التنسيق الشرطي ، وعن طريق كود خاص يخص مربع الزر 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 Function Update_a_Field(New_Value As String, Field_Name As String) ' ' usage from the Form, for example: ' Call Update_a_Field(Forms!frm_Main!BG_Pixel_Color, "Color_Reference") ' '- update the field value in the table DoCmd.SetWarnings False 'DoCmd.RunSQL ("UPDATE tbl_Settings SET sValue =" & Me.BG_Pixel_Tolerance & " WHERE sName='Color_Tolerance'") DoCmd.RunSQL ("UPDATE tbl_Settings SET sValue =" & New_Value & " WHERE sName='" & Field_Name & "'") DoCmd.SetWarnings True '- update the TempVar TempVars.Remove (Field_Name) '- Remove the field TempVars.Add (Field_Name), New_Value '- add the field with the new value 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 في صفحة الكود هكذا:
.
رجاء ملاحظة ان علامة الاستفهام يجب ان تكون بالانجليزي.
----------------------------------------------------------
30-05-2025
تم اضافة كود تحديث بيانات الجدول و TempVars ، واتضح انه اسهل مما كنت اتوقع 🙂جعفر
-
3
-
1
-
-
وعليكم السلام
اما طريقتي:
1. اعمل مجلد للصور (مثلا اسمه Logo) في نفس مكان وجود قاعدة بياناتك (الكود المسار سيختلف اذا كانت قاعدة بياناتك هي الواجهة او جداول البيانات)،
2. اعمل صورة لإسم الشركة (مثلا img_Company.jpg) ، وصورة اخرى لإسم الفرع ، القسم ، الشعبة ، وهكذا ، صورة لكل شيء تريد عرضه في البرنامج او طباعته)،
3. فب النموذج او التقرير اعمل كائن للصورة (مثلا Company_img)،
4. في حدث OnLoad للنموذج ، او حدث تنسيق قسم التفصيل في التقرير ، اكتب الكود التالي لكل صورةme.Company_img.picture= currentproject.path & "\Logo\img_Company.jpg"
.
-
4
-
-
وانا كذلك،
اصدار المرفق احدث .. لا يمكن فتحه
عندي 2010 32 بت
-
وعليكم السلام
الافكار الجديدة دائما تخلينا نفكر خارج الصندوق، شكرا جزيلا اخوي ابو جودي 🙂
-
1
-
-
الموقع التالي فيه روابط وفيها برنامج اكسس ممكن الاستفادة منه (البرنامج للبيع، بس يمكنك انزاله بلاش) :
https://isladogs.co.uk/32-64-bit-conversion/index.html
-
3
-
-
وعليكم السلام
اهلا اخي فادي 🙂
اهم شيء في هذا الموضوع، هو الرجوع الى تعليمات مايكروسوفت في التعامل مع دوال نواة 64 بت ، في الرابط التالي: https://www.microsoft.com/en-us/download/details.aspx?id=9970
ملف النص في الرابط اعلاه يعطيك تفاصيل الدالة على نواة 64 بت.
المثال الذي استعملته انت، وانا متأكد بأنك كنت حريص في انتقاء الدالة، توجد به 3 فروقات عن الدالة في ملف مايكروسوفت (السطر الثاني من ملف مايكروسوفت) :
والمسألة لا تتوقف عند هذا السطر فقط، فهناك دوال معقدة تحتاج الى استعمال if# في دالتي الخاصة.
رجاء قراءة الموضوعين التاليين ، فطريقة العمل تختلفان ، وفيهما بعض الامثلة المختلفة:
.
.
-
1
-
-
حياكم الله 🙂
-
وعليكم السلام
رجاء اعمل نسخة احتياط من برنامجك ، واحفظها في مكان آمن بعيد عن ملفات عملك.
هذا الموضوع يفيدك في تصدير المرفقات من الجدول الى مجلد في الكمبيوتر
.
وهذا الموضوع لحذف المرفقات من الجداول (ولكن يجب ان تتأكد ان جميع المرفقات تم تصديرها اولا)
-
2
-
-
يا اهلا وسهلا Jo
نعم يمكن ، فقط اعمل مسار الصورة (img_path مثلا) كاملا في الاستعلام مصدر بيانات النموذج، ثم اجعل هذا الحقل مصدر بيانات الصورة.
ومن واقع التجربة ، فستحتاج الى تكبير حجم الحقل (طولا وعرضا) حتى ترى الصورة بحجم مناسب، وتأكد ان احجام الصور لا تكون كبيرة (500x500 يعتبر حجم كبير ومناسب) حتى لا يصبح برنامجك بطيئ.
-
وعليكم السلام
انصحك بقراءة هذه المواضيع:
.
.
.
.
اما بالنسبة الى برنامجك ، فتفضل التصفية بالاستعلام (اما التصفية في النموذج ، فرجاء قراءة اول موضوع اعطيتك رابطه اعلاه).
-
واقعا الموضوع سهل ، اذا بدأنا بطريقة معينة :
1. اجعل النماذج متراكمة ،
2. فقط اجعل النموذج الصغير يكون منبثق ، وافتحه بالطريقة العادية عند فتح النموذج الكبير
-
اما اذا اردت النموذج الصغير دائما في المقدمة ، افتحه بهذه الطريقة
DoCmd.OpenForm "FINISHED CAED",,,,,acDialog بدلا عن DoCmd.OpenForm "FINISHED CAED",acNormal
-
2
-
-
وعليكم السلام
في نهاية كودك ، وقبل الرسالة ، اكتب هذا السطر:
FORMS("FINISHED CAED").setfocus FORMS("FINISHED CAED").Controls("FAL").setfocus
وتقدر تختار اي كائن يصير ال التركيز عليه ، مو شرط الحقل اللي كتبته لك.
-
السلام عليكم
اخوي موسى ، فكرة جملية وتنفيذ اجمل ، شكرا لك.
-
1
-
حقول اعدادات البرنامج
في قسم الأكسيس Access
قام بنشر
في برنامج الصور ، وبسبب شح المعلومات ، كنت اشوف نجوم السماء في كل وقت !!
كل شوي ويتوقف البرنامج ، او النتائج ما تكون صحيحة ، او ...
فكان اعتمادي الكبير على نافذة immediate window لقراءة القيم ، فكان مهم ان تبقى القيم عند توقف البرنامج.
نعم هي الطريقة المتعارف عليها (وعادة هي سجل واحد بعدة حقول) ، والتي ذكرها اخوي موسى كذلك بالتفصيل وبالدوال ،
وانا استعمل هذه الطريقة في برامجي كذلك ، ولكني استدعي بيانات جميع الحقول مرة واحدة (دائما احاول ان اقلل من زيارات الجدول قدر الامكان ، وجعل الجدول جاهز للمستخدمين) ، فانادي القيم هكذا:
.
ولكن ومع استعمال الجدول ذو السجلات الكثيرة ، فعندنا 3 طرق:
1. استعمال الدوال العادية ، وتكون هناك دالة خاصة لكل سجل (لأننا لا نعرف رقم السجل وانما قيمة في حقل) ،
2. استعمال Recordset ،
3. والطريقة الاخيرة هي TempVars.
نعم لكل طريقة ميزة وعيوب ، وبعد ان القيت اقلامي ، اخترت الطريقة الثالثة 🙂