ازهر عبد العزيز قام بنشر فبراير 18, 2022 قام بنشر فبراير 18, 2022 (معدل) السلام عليكم لدي نموذج fxy يحتوي على نموذجين fx , fy احتاج عند الضغط على اي حقل في النموذج fx يبحث عن قيمة هذا الحقل في النموذج fy ثم ينقل التركيز للتشابه ان وجد وفي حال لم يكن هناك قيمة مشابهة تظهر سالة بعدم وجود تشابة fxy.accdb تم تعديل فبراير 18, 2022 بواسطه ازهر عبد العزيز
jjafferr قام بنشر فبراير 18, 2022 قام بنشر فبراير 18, 2022 وعليكم السلام 🙂 عملتها بطريقة تختلف ، عن طريق التنسيق الشرطي: في النموذج fy اضفت حقل مخفي غير مربوط بمصدر بيانات ، اسميته tmp_yyy وفي التنسيق الشرطي للحقل yyy استعملت : . بينما في النموذج fx ، وعلى حدث الحالي ، ارسل قيمة الحقل الذي انقر عليه ، الى الحقل tmp_yyy في النموذج fy : Private Sub Form_Current() On Error GoTo err_Form_Current Me.Parent!fy!tmp_yyy = Me.xxx Exit_Form_Current: Exit Sub err_Form_Current: If Err.Number = 2455 Then 'could not see othe Form on startup Resume Next Else MsgBox Err.Number & vbCrLf & Err.Description End If End Sub جعفر 1470.fxy.accdb.zip 1
ازهر عبد العزيز قام بنشر فبراير 18, 2022 الكاتب قام بنشر فبراير 18, 2022 الاستاذ المبدع @jjafferr شكرا لمرورك جميل جدا 👌 لكني اريد ان ينتفل التركيز الى الحقل المشابة مع رسالة في حالة وجود نشابة او لم يكن هناك تشابة
Eng.Qassim قام بنشر فبراير 18, 2022 قام بنشر فبراير 18, 2022 الفكرة بسيطة ورائعة ولاتخطر على بال احد ...الا القليلين امثال استاذ @jjafferr عاشت ايدك استاذ 1
ازهر عبد العزيز قام بنشر فبراير 18, 2022 الكاتب قام بنشر فبراير 18, 2022 7 دقائق مضت, Eng.Qassim said: الفكرة بسيطة ورائعة ولاتخطر على بال احد ...الا القليلين او المشعوذبن
Eng.Qassim قام بنشر فبراير 18, 2022 قام بنشر فبراير 18, 2022 8 دقائق مضت, ازهر عبد العزيز said: او المشعوذبن 😂 قصدك جماعة البخور 1
jjafferr قام بنشر فبراير 19, 2022 قام بنشر فبراير 19, 2022 12 ساعات مضت, ازهر عبد العزيز said: لكني اريد ان ينتفل التركيز الى الحقل المشابة مع رسالة في حالة وجود نشابة او لم يكن هناك تشابة اذا تغير النماذج الفرعية ، بدل ان تكون نموذج بيانات الى نموذج مستمر ، فالحل سيكون اسهل للجميع 🙂 1
ازهر عبد العزيز قام بنشر فبراير 19, 2022 الكاتب قام بنشر فبراير 19, 2022 (معدل) 2 ساعات مضت, jjafferr said: اذا تغير النماذج الفرعية ، بدل ان تكون نموذج بيانات الى نموذج مستمر ، فالحل سيكون اسهل للجميع 🙂 🌼 تم تعديل فبراير 19, 2022 بواسطه ازهر عبد العزيز
أفضل إجابة jjafferr قام بنشر فبراير 19, 2022 أفضل إجابة قام بنشر فبراير 19, 2022 تفضل 🙂 ضع هذا الكود في النموذج 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 . جعفر 2
ازهر عبد العزيز قام بنشر فبراير 19, 2022 الكاتب قام بنشر فبراير 19, 2022 جزاك اللة عني كل خير وحفظك ورعاك
jjafferr قام بنشر فبراير 19, 2022 قام بنشر فبراير 19, 2022 حياك الله 🙂 عملت تغيير طفيف في الكود اعلاه ، حتى يصبح اسرع ، واخف على الكمبيوتر 🙂 جعفر 1
ازهر عبد العزيز قام بنشر فبراير 19, 2022 الكاتب قام بنشر فبراير 19, 2022 استاذ @jjafferr في حال لايوجد بيانات في النموذج FY يظهر ERROR وضعت هذا الامر ل rst_fy.OpenRecordset بدل هذا الجزء rst_fy.MoveFirst هل صحيح هذا التغير ام توجد طريقة افض
ازهر عبد العزيز قام بنشر فبراير 19, 2022 الكاتب قام بنشر فبراير 19, 2022 6 دقائق مضت, Eng.Qassim said: مشاركة مع استاذي جعف ر جميل استاذ Eng.Qassim لكن لاحظت ان نقل التركيز بطئ
ازهر عبد العزيز قام بنشر فبراير 19, 2022 الكاتب قام بنشر فبراير 19, 2022 (معدل) Dim rst_fy As DAO.Recordset Dim rs As DAO.Recordset Dim IsExists As Boolean Set rs = [Forms]![fxy]![fy].Form.RecordsetClone With rs If Not (.BOF And .EOF) Then .MoveFirst Do While Not .EOF IsExists = (!yyy = Me.xxx) If IsExists Then Exit Do .MoveNext Loop .Close End With Set rs = Nothing If IsExists Then MsgBox "الرقم موجود" & Me.xxx Set rst_fy = Forms!fxy!fy.Form.RecordsetClone Me.Parent!fy.Form.Bookmark = rst_fy.Bookmark Me.Parent!fy.SetFocus Else MsgBox " الرقم غير موجود" End If مع دمج الكودين الاستاذ @jjafferr الاستاذ @Eng.Qassim اعتقد اني استحق افضل اجابة 😁 تم تعديل فبراير 19, 2022 بواسطه ازهر عبد العزيز 1
Eng.Qassim قام بنشر فبراير 19, 2022 قام بنشر فبراير 19, 2022 10 دقائق مضت, ازهر عبد العزيز said: لاحظت ان نقل التركيز بطئ اعتقد لانه ينفذ امر التطابق ثم ينفذ امر التنسيق الشرطي 4 دقائق مضت, ازهر عبد العزيز said: مع دمج الكودين ممتاز ..فكرة جيدة وبهذا لاتحتاج للتنسيق الشرطي 1
jjafferr قام بنشر فبراير 19, 2022 قام بنشر فبراير 19, 2022 1 ساعه مضت, ازهر عبد العزيز said: ي حال لايوجد بيانات في النموذج FY يظهر ERROR هناك عدة طرق للتعامل مع رسائل الخطأ ، الطريقة اللي انا استعملها ، هي اصطياد رقم الخطأ ، ثم التعامل معه ، فعليه ، يصبح الكود : 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 والسلام : 3 ساعات مضت, jjafferr said: '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 . السبب هو : رجاء ، لما تشتغل على اي برنامج ، ابدا لا تنظر للبرنامج بعدد بياناته الآن ، وانما انظر كأنك تتعامل مع 10 او 100 الف سجل ، لهذا السبب رفعت قاعدة بيانات للتجربة: . فلما عندك كود تريد تجربه ، ممكن تجربه على هذا العدد الهائل من البيانات ، فعليه ستعرف اذا الكود الذي عملته بطيء او سريع. لما تستخدم الامر Recordset او RecordsetClone ، فانت تأخذ نسخة من بيانات الجدول/الجداول (اذا كان استعلام) ، وتُبقي هذه البينات في ذاكرة الكمبيوتر المؤقته Ram ، فيصبح التعامل مع البيانات من الذاكرة مباشرة ، لذلك من المهم ان تحذف البيانات لما تنتهي من استعمالها ، وعادة نعمل هذا في آخر الكود بالامر Set rst_fy = Nothing . في حالة برنامجنا اعلاه ، في الكود الذي وضعته انا ، فأنا أخذ بيانات الجدول مرة واحدة فقط ، ويبقى في الذاكرة الى ان نغلق النموذج ، فنحذفه من الذاكرة ، ولكن الكود الذي وضعته انت ، فأنت تأخذ البيانات من الجدول كلما تدخل في الكود (لا تنسى قد تكون الجداول في الشبكة ، وقد تكون سجلات الجدول كبيرة) ، وهذا يجعل البرنامج ابطئ !! جعفر 1 1
الحلبي قام بنشر فبراير 19, 2022 قام بنشر فبراير 19, 2022 الله يفتح عليك استاذنا ومعلمنا الكبير / @jjafferr كذلك الله يبارك فيك استاذ @Eng.Qassim احنا عاوزين دلوقت مثال شامل على كل التغيرات به السرعة وغير بطئ جزاكم الله خيرا
ازهر عبد العزيز قام بنشر فبراير 19, 2022 الكاتب قام بنشر فبراير 19, 2022 بالنسبة لي سوف اعتمد متال الاستاذ جعفر فلم اجد بة مشاكل عند التطبيق مع شكري الجزبل للستاذ قاسم
jjafferr قام بنشر فبراير 19, 2022 قام بنشر فبراير 19, 2022 2 ساعات مضت, الحلبي said: احنا عاوزين دلوقت مثال شامل على كل التغيرات به السرعة وغير بطئ حيا الله دكتور حلبي 🙂 في الواقع هذا سؤال لا حدود له ، فكل شيء في برنامجك وبرمجتة ، يصب فيه !! وفي كل مشاركة اضعها ، اشرح فيها ميزاتها وعيوبها 🙂 خذ مثال من الموضوع الذي نحن به الآن: عادة في استعمال الامر Recordset : المبرمج عادة يستعمل Set rst_fy = currentdb.openRecordset("Select * From tbx") بينما انااستعملت Set rst_fy = Forms!fxy!fy.Form.RecordsetClone . والاثنين يعطون نفس النتيجة ، ولكن الفرق بينهم كبير ، فالطريقة الاولى ، البرنامج يذهب الى الجدول لأخذ جميع بياناته ، ووضعها في المتغير rst_fy ، بينما مفهوم الطريقة الثانية: بما ان النموذج الفرعي fy عند فتحه ، فقد اخذ جميع بياناته من الجدول ، مفلترة وجاهزة ، فلماذا اشغل الشبكة والجدول بأخذ البيانات منه مرة اخرى ، بينما يمكنني اخذ هذه البيانات من النموذج مباشرة ، فهو اسرع (لأنه على كمبيوتري) ، ولا يشغل الشبكة او الجدول 🙂 وهذا مثال اشرح فيه كيف البرمجة لها تأثير في سرعة عمل الاستعلام : جعفر 2 2
الحلبي قام بنشر فبراير 19, 2022 قام بنشر فبراير 19, 2022 حياك استاذنا العظيم / @jjafferr اشكرك على الشرح الوافى والان قد فهمت قصدك الله يزيدك من علمه وينفعك به
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.