-
Posts
9903 -
تاريخ الانضمام
-
تاريخ اخر زياره
-
Days Won
404
نوع المحتوي
المنتدى
مكتبة الموقع
معرض الصور
المدونات
الوسائط المتعددة
كل منشورات العضو jjafferr
-
لا تستعمل DlookUp او DSum واخواتها في استعلام ، واليك البديل
jjafferr replied to jjafferr's topic in قسم الأكسيس Access
الهدف من هذا الموضوع هو ان نتلافى استخدام DlookUp او DSum واخواتها في استعلام 🙂 الاستعلام الفرعي ، نعم ، لا مانع من ذلك 🙂 ولكن رجاء النظر في الرابط التالي ، بحيث ستعرف ان الاستعلامات الفرعية ليست جميعا بنفس السرعة ، لذا يجب عليك تجربة عدة طرق : جعفر -
طريقة احضار حقل الاجمالي من الجدول الى النموذج
jjafferr replied to محمد التميمي's topic in قسم الأكسيس Access
تفضلوا ، وخلونا نناقش الموضوع هناك لو سمحتم 🙂 جعفر -
السلام عليكم 🙂 عند عمل البرنامج ، لا تجرب برنامجك على عدد اقل من 10 الآف سجل ، فسرعة الاستعلام الصحيحة هي لما تجرب البرنامج على اكثر من 10 الآف سجل 🙂 لا تستعمل DlookUp او DSum واخواتها في استعلام ، لأنها تجعل الاستعلام بطيء ، واذا كانت البيانات كثيرة ، فالاستعلام سيكون بطيء بشكل غير مقبول !! وللعلم ، فالاوامر DlookUp او DSum هي واقعا استعلام ، ولكن تم عمله بهيئة دالة ، ترسل لها المتغيرات ، وترج لك النتيجة 🙂 والبديل هو فك كل امر DlookUp او DSum في استعلام مستقل (قد نستطيع جمعهم ، ولكن هذا يعتمد على المعايير) ، بحيث نستخدم معايير الاستعلام بدلا عن معايير الاوامر DlookUp او DSum ، ونستخدم ربط الجداول كنوع من المعيار كذلك. المثال التالي سيوضح قصدي: احد المؤسسات التي اتعامل معها ، ارسلت لي هذا الملف وبه حوالي مليون سجل ، وطُلب مني النظر في بطئ استعلام الحاقي. الجدول التالي يحتوي على 100 الف سجل (حذفت الباقي 🙂) ، وسجلات سنة 2019 = 7 سجلات فقط ، وبقية السجلات لسنة 2018 : . الاستعلام الالحاقي الاصل هو : . ومن اجل هذا المثال ، سنحول الاستعلام الى استعلام عادي ، وسنفك الحقول ، وسنستخدم مجاميع سنة 2019 في استعلام مستقل وكذلك لسنة 2018 : . بالنسبة لسنة 2019 ، بدل عن استخدام الامر DSum (سبب بطئ الاستعلام) ، سنفك الامر DSum الى استعلام مستقل ، هكذا : . ونفس الشيء لسنة 2018 ، والآن نأتي الى المعيار الاخير (3) ، وهو حقل id لجدول var ، يجب ان يساوي حقل المعرف لجدول data ، وانا هنا وضعت استعلام 2019 (والذي يحتوي على 7 سجلات كما رأينا اعلا) ، ووضعت الاستعلام 2018 كذلك ، فيصبح بهذه الطريقة : . هذا الاستعلام يأخذ حوالي ثانيتين في تنفيذه ، ورجاء تجربته 3 مرات للحصول على متوسط وقت التنفيذ 🙂 واترك لكم تجربة الاستعلام qry_DSum_Egaza_9 ، رجاء تجربته 3 مرات كذلك ، وكل من يشارك في هذا الموضوع ، رجاء اعطائنا وقت التنفيذ 🙂 رجاء لا تستخدم الكود في حساب الوقت ، وانما افتح الاستعلام يدويا ، 3 مرات 🙂 اما الاستعلام qry_DSum_Egaza_8 ، فلا انصحك بتجربته ، إلا اذا ما كان عندك شغل آخر تعمله 😁 جعفر استعمل سجلات هذا الملف لتجاربك: --------------------------------------------------------------------------------------------------- هذا مثال آخر يؤيد الفرق في سرعة الاستعلام بين الطريقتين : 1475.Dont_use_DlookUp_DSum_in_Query.accdb.zip
-
semo.pa3x النسخة الثانية من اداة رفع الملفات الى Google Drive
jjafferr replied to SEMO.Pa3x's topic in قسم الأكسيس Access
شكرا جزيلا دكتور حسنين 🙂 جعفر -
طريقة احضار حقل الاجمالي من الجدول الى النموذج
jjafferr replied to محمد التميمي's topic in قسم الأكسيس Access
تفضل . جعفر -
semo.pa3x النسخة الثانية من اداة رفع الملفات الى Google Drive
jjafferr replied to SEMO.Pa3x's topic in قسم الأكسيس Access
الدكتور حسنين 🙂 شكرا لك على الربط بين الاكسس وبعض الامور الاخرى التي لا يمكن استعمالها بواسطة الاكسس مباشرة ، والرابط مثل ما تفضلت هو برمجة من vb.NET مثلا 🙂 اذا ممكن ، ولكي تزداد الفائدة ، رجاء ارفاق كود vb.NET كذلك ، حتى يمكن للاعضاء الاستفادة منه كذلك 🙂 يعني بكلام آخر ، نريد نسخة اخرى من دكتور حسنين تفكر في هذا المجال 😅😁 جعفر -
طريقة احضار حقل الاجمالي من الجدول الى النموذج
jjafferr replied to محمد التميمي's topic in قسم الأكسيس Access
انا اعمل على مثال الآن 🙂 وسأخبركم هنا بالموضوع الجديد ان شاء الله 🙂 جعفر -
برنامج لإظهار رسائل بتنبيهات مختلفة في النص والوقت بعد فتح الحاسب
jjafferr replied to السبيل1's topic in قسم الأكسيس Access
يوما ما ، انا احتجت الى مثل هذا التذكير ، وبعد البحث ، اتضح لي ان الاكسس ليس الاداة المناسبة لهذا العمل ، نعم يمكن تطويعه ، ولكن هناك ادوات افضل ، خليني اشرح الفرق : في الاكسس ، يجب عمل كود لتفقد ساعة الوندوز ، كل دقيقة مثلا ، ولكن هذا الكود واقعا يجعل الاكسس يعمل طوال الوقت في الخلفية ، فهو يتاكد من انتهاء الدقيقة ، وبعدها ينظر للكود لعمل المطلوب. وحتى لو عملت هذا البرنامج ، فسيكون في نسخته الاولى 🙂 بينما هناك برامج للوندوز ، تعمل بساعة الوندوز (حتى والاكسس مغلق) ، ولا تستهلك قوى اضافية من المعالج CPU ولا يأخذ ذاكرة RAM زيادة ، وقد جربه الكثيرون ، ووصلوا بالتعديل عليه الى النسخة الفلانية. اليك روابط بعض هذه البرامج المجانية: https://www.microsoft.com/en-us/p/hourly-reminder/9nblggh0d6rb?activetab=pivot:overviewtab# https://www.wisecleaner.com/wise-reminder.html وقائمة عن برامج اخرى مجانية https://techwiser.com/9-best-reminder-apps-for-windows وقد قام الاخ @Amr Ashraf بعمل موضوع ، ويمكن الاستفادة منه مباشرة لغرضك ، وبدون اكواد ، مجرد اختيارات : ولا ننسى الهاتف الجوال ، فهو كمبيوتر متنقل وشغال 24 ساعة ولا يفارقنا ، وهذا رابط لبرنامج للاندرويد : https://play.google.com/store/apps/details?id=com.kittoboy.repeatalarm&hl=en_US&gl=US قد يكون احتياجك يضطرك لإستخدام الاكسس ، فإن كان كذلك ، فأتمنى ان يهب الاعضاء ممن له الخبرة في هذا المجال للمساعدة 🙂 جعفر -
طريقة احضار حقل الاجمالي من الجدول الى النموذج
jjafferr replied to محمد التميمي's topic in قسم الأكسيس Access
في الواقع الاوامر dlookup او dsum عبارة عن استعلام 😁 افتح موضوع جديد ، و ارفق مثال به بيانات وبه الاستعلام الذي به الاوامر dlookup او dsum ، وضع الرابط هنا ، حتى اعرف الموضوع الجديد ، و ادلو به بدلوي 🙂 جعفر -
طريقة احضار حقل الاجمالي من الجدول الى النموذج
jjafferr replied to محمد التميمي's topic in قسم الأكسيس Access
الظاهر كان المفروض ان اعطي مثال على كلامي 🙂 ومثل ما قال اخي @ABOLO2 ، وهذا مثال آخر : . لا لا لا يا دكتور ، انت وقعت على مشكلة اسوأ ، وهي وجود الاوامر Dlookup و DSum في الاستعلام !! ارسل لي احد اصحابي برنامجه لأعالج بطئ الاستعلام ، واذا به الامر Dlookup ، ومجموع البيانات كانت حوالي 100,000 معلومة !! كنت اشغل الاستعلام ، واروح اعمل شاي ، ولما ارجع بعد 28 دقيقة ، كان عندي وقت كفاية آخذ شفطتين من الشاي ، وبعدين تظهر النتائج 😀 والحل كان ، بأن اعمل استعلام A يظهر البيانات بدل الامر Dlookup ، وفي الاستعلام الاخير B ، اربط معايير الاستعلام A بجداول الاستعلام B ، وتظهر النتائج في وقت جدا قصير 🙂 جعفر -
برنامج لإظهار رسائل بتنبيهات مختلفة في النص والوقت بعد فتح الحاسب
jjafferr replied to السبيل1's topic in قسم الأكسيس Access
وعليكم السلام استاذ وائل 🙂 يا ريت توضح ما الذي تريده بالضبط ، حتى يستطيع الاعضاء مساعدتك 🙂 جعفر -
طريقة احضار حقل الاجمالي من الجدول الى النموذج
jjafferr replied to محمد التميمي's topic in قسم الأكسيس Access
وعليكم السلام 🙂 حيا الله اخوي محمد 🙂 في الواقع عمل هذا النوع من المجاميع في الجدول او الاستعلام ، يبطئ عمل الجدول والاستعلام ، ولا ارى فائدة منه ، إلا اذا تسمح للمستخدم ان يرى البيانات في الجدول ، وهذه كارثة 😱 جعفر -
اضافة بيانات متشابهة لسجلات محددة من خلال زر اختيار
jjafferr replied to سمير1404's topic in قسم الأكسيس Access
هلا ومرحبا 🙂 -
مساعدة في غرض صوره في نفس مجلد قاعدة البيانات
jjafferr replied to ازهر عبد العزيز's topic in قسم الأكسيس Access
وتكملة لكود اخي المهندس قاسم ، في حال لم يكن هناك صورة في المسار: Private Sub Form_Current() on error goto err_Form_Current Dim Path As String Path = Application.CurrentProject.Path & "\img\" Me![صورة0].Picture = Path & "1.jpg" Exit_Form_Current: exit sub err_Form_Current: if err.number=2220 then 'No image in path Me![صورة0].Picture = "" resume next else msgbox err.number & vbcrlf & err.description resume Exit_Form_Current end if End Sub جعفر -
اضافة بيانات متشابهة لسجلات محددة من خلال زر اختيار
jjafferr replied to سمير1404's topic in قسم الأكسيس Access
وعليكم السلام 🙂 علشان تختار اكثر من اسم ، عندك اختيارين: 1. السجل تعمل فيه حقل iSelect من نوع نعم/لا ، ثم تعمل نموذج مستمر ، ويمكنك ان تختار اكثر من سجل/اسم. 2. تعمل مربع خيار ListBox ، ثم تجعل خيارات . فتستطيع بالنقر مرة على الاسم ان تختاره او تلغي الاختيار . وتضع احد الاختيارين في نموذج رئيسي ، وتعمل بقية الحقول المطلوبة ، والتي لا تكون مرتبطة بجدول ، وبعد اختيار الاسماء وتعبئة الحقول ، يكون عندك زر لتفريغ هذه البيانات في الجدول لهذه الاسماء ، سواء ان تُلحق سجل جديد ، او تعمل تحديث لسجل موجود ، كود الزر يعمل حلقة دوران للاسماء ، ويُدخل بيانات الحقول 🙂 جعفر -
وعليكم السلام ورحمة الله وبركاته 🙂 . 1. سبب ظهور هذه الرسالة هو ان برنامج الاكسس على كمبيوتر المكتب (الكمبيوتر الذي عملت عليه البرنامج) ، فيه نسخة احدث من نسخة البيت ، القاعدة العامة هي: اعمل برنامجك على اقل/اصغر/اقدم نسخة ممكنه ، حتى تستطيع النسخ الاكبر/الاحدث ان تفتحه في وضع التصميم. 2. المفروض ان لا يحدث هذا (ولا علاقة لهذا باختلاف النسخ) ، فأكيد هناك كود او استعلام يقوم بهذا !! جعفر
-
وعليكم السلام 🙂 عندك طريقتين لكي "تحدد اليوم الذي يريدة الذي يبدأ الشهر منه" : 1. المعيار في الاستعلام مباشرة (يجب ان تكون الكتابة نفسها في المكانين) : . ولما نستخدم الكلمات العربية : . هذا هو الكود: Between [Please enter FROM date] And DateAdd("m",1,[Please enter FROM date])-1 . 2. في النموذج frm_Main في الحقل Date_From : فيكون المعيار في الاستعلام : . Between [Forms]![frm_Main]![Date_From] And (DateAdd("m",1,[Forms]![frm_Main]![Date_From])-1) . وهذا الكود DateAdd("m",1,[Forms]![frm_Main]![Date_From]) معناه اضف : m = شهر 1 = المدة التي نريد ان نضيفها [Forms]![frm_Main]![Date_From] = على هذا التاريخ فيعطينا شهر واحد بعد هذا التاريخ ، ولكنك تريد شهر ناقصا يوم واحد ، لهذا السبب نضيف 1- في نهاية الامر جعفر
-
وعليكم السلام 🙂 اخي عمر ، هذا سؤالك ، وكلما وضحته اكثر ، وبأمثلة ، سترى ان رد الاعضاء اسرع وادق 🙂 سؤالك مافيه سؤال ولا شرح وانما مجرد نموذج والسلام !! جعفر
-
مساعدة في البحث عن قيمة في نموذج اخر
jjafferr replied to ازهر عبد العزيز's topic in قسم الأكسيس Access
حيا الله دكتور حلبي 🙂 في الواقع هذا سؤال لا حدود له ، فكل شيء في برنامجك وبرمجتة ، يصب فيه !! وفي كل مشاركة اضعها ، اشرح فيها ميزاتها وعيوبها 🙂 خذ مثال من الموضوع الذي نحن به الآن: عادة في استعمال الامر Recordset : المبرمج عادة يستعمل Set rst_fy = currentdb.openRecordset("Select * From tbx") بينما انااستعملت Set rst_fy = Forms!fxy!fy.Form.RecordsetClone . والاثنين يعطون نفس النتيجة ، ولكن الفرق بينهم كبير ، فالطريقة الاولى ، البرنامج يذهب الى الجدول لأخذ جميع بياناته ، ووضعها في المتغير rst_fy ، بينما مفهوم الطريقة الثانية: بما ان النموذج الفرعي fy عند فتحه ، فقد اخذ جميع بياناته من الجدول ، مفلترة وجاهزة ، فلماذا اشغل الشبكة والجدول بأخذ البيانات منه مرة اخرى ، بينما يمكنني اخذ هذه البيانات من النموذج مباشرة ، فهو اسرع (لأنه على كمبيوتري) ، ولا يشغل الشبكة او الجدول 🙂 وهذا مثال اشرح فيه كيف البرمجة لها تأثير في سرعة عمل الاستعلام : جعفر -
مساعدة في البحث عن قيمة في نموذج اخر
jjafferr replied to ازهر عبد العزيز's topic in قسم الأكسيس Access
هناك عدة طرق للتعامل مع رسائل الخطأ ، الطريقة اللي انا استعملها ، هي اصطياد رقم الخطأ ، ثم التعامل معه ، فعليه ، يصبح الكود : Option Compare Database Option Explicit Dim rst_fy As DAO.Recordset Dim rst_n As Integer ' Private Sub xxx_Click() On Error GoTo err_xxx_Click 'take the Recordset one time, use it many times If rst_n = 0 Then Set rst_fy = Forms!fxy!fy.Form.RecordsetClone rst_n = 1 End If rst_fy.MoveFirst rst_fy.FindFirst "yyy='" & Me.xxx & "'" If rst_fy.NoMatch Then MsgBox "لا يوجد تطابق" Else MsgBox "يوجد تطابق" Me.Parent!fy.Form.Bookmark = rst_fy.Bookmark Me.Parent!fy.SetFocus End If Exit_xxx_Click: rst_fy.Close Exit Sub err_xxx_Click: If Err.Number = 3021 Then 'No data Resume Exit_xxx_Click Else MsgBox Err.Number & vbCrLf & Err.Description End If End Sub Private Sub Form_Close() Set rst_fy = Nothing End Sub . اما التنسيق الشرطي الذي يمكن استعماله هنا ، فيكون ابسط : . فيه ملاحظة كتبتها بالانجليزي في الكود ، وعليه قمت بهذا العدد من الاسطر ، بالاضافة الى سطر تعريف المتغير Dim rst_n ، بينما كان ممكن ان اكتب سطر واحد من Set rst_fy = Forms!fxy!fy.Form.RecordsetClone والسلام : . السبب هو : رجاء ، لما تشتغل على اي برنامج ، ابدا لا تنظر للبرنامج بعدد بياناته الآن ، وانما انظر كأنك تتعامل مع 10 او 100 الف سجل ، لهذا السبب رفعت قاعدة بيانات للتجربة: . فلما عندك كود تريد تجربه ، ممكن تجربه على هذا العدد الهائل من البيانات ، فعليه ستعرف اذا الكود الذي عملته بطيء او سريع. لما تستخدم الامر Recordset او RecordsetClone ، فانت تأخذ نسخة من بيانات الجدول/الجداول (اذا كان استعلام) ، وتُبقي هذه البينات في ذاكرة الكمبيوتر المؤقته Ram ، فيصبح التعامل مع البيانات من الذاكرة مباشرة ، لذلك من المهم ان تحذف البيانات لما تنتهي من استعمالها ، وعادة نعمل هذا في آخر الكود بالامر Set rst_fy = Nothing . في حالة برنامجنا اعلاه ، في الكود الذي وضعته انا ، فأنا أخذ بيانات الجدول مرة واحدة فقط ، ويبقى في الذاكرة الى ان نغلق النموذج ، فنحذفه من الذاكرة ، ولكن الكود الذي وضعته انت ، فأنت تأخذ البيانات من الجدول كلما تدخل في الكود (لا تنسى قد تكون الجداول في الشبكة ، وقد تكون سجلات الجدول كبيرة) ، وهذا يجعل البرنامج ابطئ !! جعفر -
مساعدة في البحث عن قيمة في نموذج اخر
jjafferr replied to ازهر عبد العزيز's topic in قسم الأكسيس Access
حياك الله 🙂 عملت تغيير طفيف في الكود اعلاه ، حتى يصبح اسرع ، واخف على الكمبيوتر 🙂 جعفر -
مساعدة في البحث عن قيمة في نموذج اخر
jjafferr replied to ازهر عبد العزيز's topic in قسم الأكسيس Access
تفضل 🙂 ضع هذا الكود في النموذج fx Option Compare Database Option Explicit Dim rst_fy As DAO.Recordset Dim rst_n As Integer ' Private Sub xxx_Click() 'take the Recordset one time, use it many times If rst_n = 0 Then Set rst_fy = Forms!fxy!fy.Form.RecordsetClone rst_n = 1 End If rst_fy.MoveFirst rst_fy.FindFirst "yyy='" & Me.xxx & "'" If rst_fy.NoMatch Then MsgBox "لا يوجد تطابق" Else MsgBox "يوجد تطابق" Me.Parent!fy.Form.Bookmark = rst_fy.Bookmark Me.Parent!fy.SetFocus End If rst_fy.Close End Sub . جعفر -
رفع نسخة احتياطية الى كوكل درايف - رفع ملف الى Google Drive
jjafferr replied to SEMO.Pa3x's topic in قسم الأكسيس Access
بشرك الله بالخير دائما 🙂 همم ، هذه غلطة الدكتور ، ارسل له الفاتورة 😁😅 بالفعل شكرا دكتور حسنين 🙂 جعفر -
مساعدة في البحث عن قيمة في نموذج اخر
jjafferr replied to ازهر عبد العزيز's topic in قسم الأكسيس Access
اذا تغير النماذج الفرعية ، بدل ان تكون نموذج بيانات الى نموذج مستمر ، فالحل سيكون اسهل للجميع 🙂