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

نجوم المشاركات

  1. محمد أبوعبدالله

    • نقاط

      13

    • Posts

      1,998


  2. أبوبسمله

    أبوبسمله

    الخبراء


    • نقاط

      9

    • Posts

      3,254


  3. احمد بدره

    احمد بدره

    الخبراء


    • نقاط

      9

    • Posts

      979


  4. ابو جودي

    ابو جودي

    أوفيسنا


    • نقاط

      8

    • Posts

      6,818


Popular Content

Showing content with the highest reputation on 25 ينا, 2020 in all areas

  1. السلام عليكم بعد اذن الأساتذة ,يمكنك تجربة هذا استاذى الكريم Uploading to Google drive using VBA?
    3 points
  2. سلمت يداك استاذنا الفاضل @Barna تحياتي
    3 points
  3. السلام عليكم جرب المرفق ListBox Test.rar تحياتي
    3 points
  4. تفضل اخي الكريم Private Sub Command0_Click() If MsgBox("هل تريد اجراء نسخة احتياطية من البرنامج؟", _ vbQuestion + vbYesNo, _ "نسخة احتياطية") = vbYes Then On Error Resume Next Dim OldFile As String, DBwithEXT, DBwithoutEXT, NewFile As String, CopyMyDB Dim fs, cf, strFolder strFolder = CurrentProject.Path & "\Backup" Set fs = CreateObject("Scripting.FileSystemObject") If fs.FolderExists(strFolder) = False Then Set cf = fs.CreateFolder(strFolder) End If OldFile = CurrentDb.Name StrNew = CurrentProject.Path & "\Backup" DBwithEXT = Dir(OldFile) DBwithoutEXT = Left(DBwithEXT, Len(DBwithEXT) - 6) If [BKUP] = True Then NewFile = StrNew & "\" & DBwithoutEXT & "-" & Format(Date, "yyyy-mm-dd") & "-" & Format(Now(), "Hh-Nn-Ss-AMPM") & Right(DBwithEXT, 6) CopyMyDB = "cmd.exe /C copy " & """" & OldFile & """" & " " & """" & NewFile & """" Shell CopyMyDB, 0 Exit Sub End If End If Backup_2.rar تحياتي
    2 points
  5. وعليكم السلام ورحمة الله وبركاته من وجهة نظري البسيطة لو وضعت كود لعمل نسخة احتياطية عند الاغلاق ومسار الحفظ هو google drive سيكون حل مناسب تحياتي
    2 points
  6. وهذه مشاركة مع أخي @محمد ابوعبد الله ....... ListBox Test.rar
    2 points
  7. https://www.officena.net/ib/topic/89446-اضافة-قيم-غلى-listbox-في-اكسيس/ اخي الكريم رجع هذا الربط
    2 points
  8. الله يسعدك ضبط معي الكود ربي يرزقك يا استاذ احمد
    2 points
  9. عليك السلام ورحمة الله وبركاته جرب هذا المصنف2.xlsx
    2 points
  10. بعد إذن أستاذنا الفاضل سليم لإثراء الموضوع جرب هذا عن طريق تكست بوكس البحث.xlsm
    2 points
  11. السلام عليكم ورحمة الله وبركاتة في مووضوع سابق طرحته بالمنتدى حذرت من موضوع اخفاء الجداول المرتبطه لما يسببه من مشاكل وأخطاء تحذير من إستخدام كود إخفاء الجداول المرتبطة فأخذت افكرفي ايجاد طريقة لحماية كائنات قاعدة البيانات كافة من وصول المستخدم ومن ضمنها عدم وصول المستخدم لكلمة سر قاعدة البيانات الخلفية والتي تكون مخزنة بالجدول MsysObjects فلم أجد افضل من طريقة وضع كلمة سر لقاعدة البيانات بشرط أن تكون بصيغة accdb أو accde هنا لن يتمكن المستخدم من تفعيل الشفت ببرنامج خارجي ولن يتمكن من الوصول الى الكائنات وهذا كان سبب طرحي لموضوع هل لديك تجربه لكسر كلمة سر قاعدة بيانات ؟ وقد اكد استاذنا @jjafferr صعوبة الحصول على الرقم السري لمثل هذا النوع من قواعد البيانات فقررت وضع كلمة السر لقواعد البيانات !!!!!!! لكن ماهو الحل مع المستخدم ؟ هل سنقوم بتسليمه كلمة السر ليستخدم قاعدة البيانات اذا كأننا لمن نصنع شئ ففكرت بإيجاد وسيط نقوم بتسليمه كلمة السر ويكون هو الوسيط بين المستخدم والبرنامج ( الواجهة ) اذا الوسيط سنضعه جنب البرنامج ونأمره بفتح البرنامج للمستخدم اذا اراد استخدامه بدون أن يفصح له عن كلمة السر بالمرفق يوجد ملفين ملف قاعدة البيانات الاساس Start محمي بكلمة سر والاخر الوسيط الذي سنقوم بمن خلاله فتح البرنامج StartDatabes. بعد تمرير كلمة السر اليه والملفين تم تحويلهما الى صيغة accde بعد تنزيل المرفق اجعل الملفيين في مجلد واحد وشغل الملف StartDatabes ملاحظة من المحتمل ان تظهر لديك رسالة في بدأ التشغيل لا يمكن قراءة مشروع Vba هنا اعتقد يجب أن يكون الوندوز لديك محدث بأخر تحديث ويجب أن تكون حزمة Microsoft .NET Framework محدثة بأخر اصدار حسب لغة الوندوز ونوعه عندك او كما يوجد لدي انا عندي الحزمة Microsoft .NET Framework 4.5.1 windos 10 office10 أخر تحديث ارجو التجربه ونتمنى الاستفاده للجميع Free.rar -------------------------------------- ملاحظات جعفر 14-7-2021 : بعد ان تم حذف الملف الاصل ، اصبح من الصعب على بعض الاعضاء متابعة الموضوع ، لذا ، وبعد إذن الاخ @kaser906 فعملت ملفاته مرة اخرى وارفقتها هنا: 1. الملف Locked.zip ، وهو الملف النهائي والذي سيتم تسليمه للزبون ، وهو الملف الذي يجب ان يجربه الاعضاء ، وفيه ملفين بصيغة accde ، 2. الملف Locked_Open_Source.zip ، يحتوي على ملفات مفتوحة المصدر ، بصيغة accdb ، والتي حولناها الى ملفي رقم 1 علاه ، 3. الملف Open_Source.zip ،يحتوي على نفس ملفي رقم 2 اعلاه بصيغة accdb ، ولكن بدون تجهيزهم لتحويلهم لصيغة accde . Locked.zip Locked_Open_Source.zip Open_Source.zip
    1 point
  12. السلام عليكم اقدم لكم هذه الطريقة التي اتوقع انها جديدة بحيث يتم تلوين نتيجة البحث في الحقول لتمييزها مرفق صور ومرفق قاعدة البيانات أي سؤال او استفسار جاهزين للاجابة عليه ان شاء الله بحث مع الوان.accdb
    1 point
  13. السلام عليكم ورحمة الله تعالى وبركاته احبائى اقدم لكم هذه الاداة البسيطة ذات الفائدة الكبيرة احيانا تحدث مشكلة عند تشغيل قاعدة بياناتك على بعض الأجهزة وذلك بسبب كتابة الحروف العربية داخل محرر الاكواد اثناء التصميم حتى وإن كانت ملاحظات وتلميحات وتم تعطيلها وبين طيات نقاش طويل بينى وبين استاذى الجليل ومعلمى القدير ووالدى الحبيب الاستاذ @jjafferr نصحنى وشدد على بــــ عدم كتابة اى احرف عربية داخل المحرر حتى وان كانت ملاحظات او تلميحات فسألته : وماذا ان اردنا كتابة رسالة باللغة العربية فأجابنى : بعمل جدول ليتم كتابة ما تريد باللغة العربية وتستدعيه وقت الحاجة فكرت وحاولت وبفضل الله تعالى ثم مساندة أستاذى الجليل فيما تعثرت فيه وتوصلت الى ذلك ولكن هناك شقين 1- الموضوع مرهق قليلا ويتطلب وقت وجهد كبيرين 2- بالرغم من النقطة السابقة الا انه ممتع جدا جدا جدا وبرغم صعوبته اثناء التصميم الا انه يعطى مرونه فى تغيير الرسائل بدون الرجوع الى محرر الاكواد وطبعا قد لا يستطيع البعض تحقيق ذلك لذلك فكرت فى بديل وكانت بفضل الله تلك الاداة البسيطة التى اضعها الان بين اياديكم شرح الاداة نكتب ما نريد فى المكان المخصص للغة العربية ونقوم بتحويل ما كتبناه الى الترميز العالمى نقوم بعمل نسخ الترميز العالمى الى محرر الاكواد داخل قاعدتك فى المكان المحدد لذلك من واقع الصورة الجزء الأيمن 1 >>---> المكان المخصص لكتابة اللغة العربية 2 >>---> زر الامر الذى يقوم بتحويل ما تم كتابتة الى الترميز العالمى Unicode 3 >>---> زر الامر الذى يقوم بنسخ الاحرف التى تم تحويلها الى الترميز العالمي الجزء الأيسر A >>---> لصق الترميز العالمى الذى قمت بنسخه من اى قاعدة بيانات تم استخدام هذا الترميز فيها من قبل B >>---> زر الامر الذى يقوم بتحويل الترميز العالمى Unicode الى اللغة العربية لتستطيع قراته مرفق لكم الاداة + قاعدة تجربة انتظر تجربتكم وافادتكم تم تعديل المرفق فى تمام الساعة 7:44 م بتوقيت القاهرة - تاريخ 23/09/2019 Converter Arabic and Unicode.zip Converter Arabic and Unicode.mdb
    1 point
  14. جميل اخى خالد @خالد سيسكو جزاك الله خيرا تقبلوا تحياتى وتمنياتى لكم وللجميع بالتوفيق
    1 point
  15. السلام عليكم المثال الاول اللي عملته لك كان بشرطين معا ( الاسم والعمر) انظر اخي للمرفق استعلامات بشرط واحد فقط بين الجدولين A- استعلام للاسماء المتشابهه (المكررة). B- استعلام للارقام المتشابهة (المكررة). اتمنى يكون المطلوب التكرار-2.rar
    1 point
  16. سؤال أستاذ أحمد : الأخت زهرة وجدت لها مشاركات في منتدى آخر لا أذكر اسمه فهل لها مشاركات في هذا المنتدى باسم آخر ؟
    1 point
  17. مشكورين جميعا على المرور تم حل الموضوع
    1 point
  18. أحسنت بارك الله فيك وزادك الله من فضله
    1 point
  19. انا اللي بعتذر لحضرتك تعبتك معايا الكود تمام كما هو مطلوب وافضل الحمد لله 🌹 جزاكم الله خيرا
    1 point
  20. اتمنى ان يكون ما تريد في المرفق واعتذر تجربة (2) (2).xlsm
    1 point
  21. استاذ احمد كلام صح انا ذهبت بعيد لان استلام مباشر من الجدول هو الأفضل والأسرع وحل صحيح تماما اتكلم عن المشاركة قبل الاخيرة لأنني لم اري المشاركة الاخيرة بارك الله فيك أخي احمد وشكرا جزيلا
    1 point
  22. سوف اشرح لك الموضوع ببساطة اولا في تطبيق لجوجل درايف يتم تصطيبه علي جهاز الكمبيوتر وبعد تصطيبه تدخل بريدك الالكتروني بعد الفتح اصبح لديك ١٥ جيجا علي جهازك سحابي مثل أي برتشن تقدر تحفظ قاعدة الجداول وترتبط بها من اي جهاز بالعالم وتقدر تحفظ النسخه الاحتياطية مباشرة بدون اكواد مثل ما قال استاذ محمد ابو عبدالله مجرد انك تحدد الرابط ستحفظ به بس مشكلته في المزامنة لازم تغلق وتفتح البرنامج حتي تقدر تشوف البيانات التي تم إدخالها تحياتي
    1 point
  23. السلام عليكم عملت لك 3 جداول فيها بيانات متشابهة وعملت استعلام للبحث عن التكرار بشرطي الاسم والعمر (يمكن اضافة اي حقول اخرى لها) اتمنى ان يكون المطلوب تحياتي التكرار.rar
    1 point
  24. اخى الفاضل يرجى تعديل بياناتك بالموقع حتى نعرف كيف نناديك باسمك يرجى وضع مثال للعمل عليه لتسهيل الامور على اخوانك واساتذتنا فى مساعدتك ارفق لك مثال اطلع عليه لعلك تستفيد منه فى طلبك وجزاها الله خيرا ام عهود تقبل تحياتى وتمنياتى لك وللجميع بالتوفيق za-test-UP.rar
    1 point
  25. جزاكم الله خيرا اخوانى واساتذتى @محمد ابوعبد الله و @Barna اخى محمد البرناوى ماذا يعنى حرف s بالكود Private Sub القائمة7_DblClick(Cancel As Integer) For Each s In القائمة7.ItemsSelected Items = Items & القائمة7.ItemData(s) & "-" Next End Sub لم انتبه للحرف فبدايه داله الفور جزاكم الله خيرا اساتذتى والحمدلله رب العالمين تقبلوا تحياتى وتمنياتى لكم وللجميع بالتوفيق
    1 point
  26. بالاضافة الى ما تفضل به استاذنا الفاضل @أحمد الفلاحجى وله الشكر تفضل اخي الكريم استبدال الاحرف التي يوجد له مشابه كحرف ( ة ) و ( ه ) Private Sub t5_Exit(Cancel As Integer) Me.t5 = Replace([t5], "أ", "ا") Me.t5 = Replace([t5], "إ", "ا") Me.t5 = Replace([t5], "إ", "ا") Me.t5 = Replace([t5], "آ", "ا") Me.t5 = Replace([t5], "ة", "ه") Me.t5 = Replace([t5], "ي", "ى") Me.salah.Form.Filter = "ForSearch([TitleBook]) Like '*' & '" & t5 & "' & '*'" Me.salah.Form.FilterOn = True End Sub 1029.نموذج بحث.rar تحياتي
    1 point
  27. ما رائيك اخى الفاضل امير باختصار الكود الى الكود الرائع لاستاذنا جعفر @jjafferr جزاه الله خيرا هو وجميع اساتذتنا الافاضل الذين تعلمنا ونتعلم منهم كل يوم وفى حدث قبل التحديث Private Sub Itemcode_BeforeUpdate(Cancel As Integer) On Error Resume Next LN = DLookup("[itemCode] & '|' & [NameItem] & '|' & [الوحدة] & '|' & [سعر الشراء] ", "المواد", "[itemCode]='" & [itemCode] & "'") If IsNull(LN) Then MsgBox " كود_الصنف_المدخل غير صحيح", vbCritical, "مراقب حركة الادخالات" DoCmd.CancelEvent Else X = Split(LN, "|") Me.[itemName] = X(1) Me.[الوحدة] = X(2) Me.[سعر الشراء] = X(3) End If End Sub تقبلوا تحياتى وتمنياتى لكم وللجميع بالتوفيق
    1 point
  28. شرح عمل تكست بوكس داخل ورقة العمل أولا ظهور قائمة المطور كما بالصورة ثانيًا كيفية إدارج تكست بوكس في ورقة العمل كما بالصورة الثانية ثالثا كيفية وضع الكود في الصورة الثالثة الكود موجود في الملف السابق
    1 point
  29. اخي أبو أشرف بيض الله وجهك والله يسعدك في الدنيا والاخره😘
    1 point
  30. هذا العمود هو ترجمة لعمود التواريخ ( فترة الدراسة ) وهو اسلوب مستحدث حتي ابتعد عن صيغ التواريخ المتعددة التي تختلف في بعض الأحيان في سلوكها مع الأكود فتربك الكود وهذ العمود هو الاساس الذي يعمل عليه الكود وعند ادخال بيانات جديده لا تعمل له حساب بتاتا اعتبره غير موجود فهو في كل مره يعمل الكود ينشيء هذا العمود الا اذا كنت في المستقبل سوف تحتاج اضافة عمود جديد للداتا فيمكنني ان يكون هذا العمود متحرك اي يكون بعد اي عدد من اعمدة الدتا هو الاخير دائما لعلي استطعت توضيح الأمر لك تحياتي لك
    1 point
  31. عليكم السلام ورحمة الله وبركاته تم تعديل مادة اللغة العربية في شهادات نصف العام أما بالنسبة للأوائل لم أرى خطأ في الترتيب شاهد المرفق ثانية(1).rar
    1 point
  32. تحت امرك اخي لم يكن هناك اي ازعاج تحياتي لك
    1 point
  33. هذه معادلة ضفيف ويمكنك تعديل المدي في المعادلة وطبعا الاقواس ستنحذف يمكنك ارجاع الاقواس بالضغظ على ctrl+shift+enter تحياتي
    1 point
  34. أ.عبدالعزيز محمد جرب المرفق عسى أن يكون ما طلبت .. عذرا إن كانت الطريقة قديمة شويتين .. ولكن الجودة بالموجوده 😃 Aziz.accdb
    1 point
  35. وعليكم السلام 🙂 الآن نظرت الى الموضوع بالكامل ، واضطررت ان اغير الامر ، لأن الامر السابق يصدر تسمية الحقول (باللغة العربية) ، بينما لما نستوردهم ، لما يعمل مقارنة اسماء الحقول بالتي موجودة في الجدول ، يرى انها مختلفة ، فتظهر رسالة تقول بأن الحقل الفلاني غير موجود في الجدول !! هذا الكود الجديد: Private Sub cmd_Delete_Records_Click() Dim strSQL As String strSQL = "DELETE [tbl_Teacher].* FROM [tbl_Teacher];" DoCmd.SetWarnings False DoCmd.RunSQL strSQL DoCmd.SetWarnings True End Sub Private Sub cmd_Export_Click() Dim ImportFileName As String ImportFileName = CurrentProject.Path & "\tbl_Teacher" & ".xls" DoCmd.TransferSpreadsheet acExport, 8, "tbl_Teacher", ImportFileName, True End Sub Private Sub cmd_Import_Click() Dim ImportFileName As String ImportFileName = CurrentProject.Path & "\tbl_Teacher" & ".xls" DoCmd.TransferSpreadsheet acImport, 8, "tbl_Teacher", ImportFileName, True End Sub جعفر 1153.db2.zip
    1 point
  36. السلام عليكم المطلوب : تنفيذ امر الاخفاء والاظهار بزر امر واحد بحيث اول كبسة على الزر يقوم بالاخفاء ويتغير اسم الزر الى اظهار الكبسة الثانية على نفس الزر يقوم بالاظهار ويتحول اسمه الى اخفاء hide_show.accdb
    1 point
  37. السلام عليكم ورحمة الله تعالى وبركاته اولا وللامانة وإحقاقا للحق وحتى يأخذ كل ذى حق حقه الفضل بعد رب العباد سبحانه وتعالى يعود الى استاذى الجليل ومعلمى القدير صاحب اللمسات الرمهانية والغالى على قلبى واخى الحبيب الاستاذ @رمهان والذى بت افتقده كثيرا وافتقد لمساته وانتظرها دائما بلهفة مشتاق الشرح نظريا للطريقة الرمهانية وهو كالاتى ننشئ الاستعلام كما نريد بالحقول التى نريد فى مكان المعيار للحقل المطلوب نكتب مثلا >>----> [Insert value] كما فى الصورة الاتيه يمكنكم تغيير المعيار [Insert value] مع مراعاة تغييره بالكود الذى سيأتى بعد قليل ونقوم باغلاق الاستعلام ونسميه على سبيل المثال >>----> qryJudy يمكنكم تغيير الاسم مع مراعاة تغييره بالكود الذى سيأتى بعد قليل نذهب الى النموذج الذى نريد فتح الاستعلام من خلاله ونريد تمرير قيمة المعيار من احد كائناته الى الاستعلام الذى انشأناه نقوم بعمل زر امر ونسند اليه الكود الاتى DoCmd.SetParameter "[Insert value]", [رقم النموذج] DoCmd.SetWarnings False DoCmd.OpenQuery "qryJudy" DoCmd.SetWarnings True نلاحظ فى السطر الاول من الكود DoCmd.SetParameter >>----> هذا الجزء من الكود هو الذى يختص بتعيين القيمة المعلمة والتى نريد تمريرها الى المعيار فى الاستعلام [Insert value] >>----> هذا اسم المعيار كما كتبناه فى الاستعلام تمام [رقم النموذج] >>----> هذا اسم الكائن على النموذج الذى نريد تمرير قيمته الى المعيار فى الاستعلام السطر الثانى من الكود DoCmd.SetWarnings False >>----> لايقاف رسائل الاكسس الافتراضية و التى تأتى لتأكيد تشغيل الاستعلام السطر الثالث من الكود DoCmd.OpenQuery "qryJudy" >>----> تشغيل الاستعلام ونكتب اسم الاستعلام كما انشئناه تماما السطر الرابع من الكود DoCmd.SetWarnings True >>----> ارجاع الوضع الافتراضى للاكسس بتشغيل رسائل الاستعلام مرة اخرى المثال المرفق هو بناء على طلب اخونا الحبيب الاستاذ @محمد القدسي الكود تم وضعه على زر امر بعنوان >>----> Run Query داخل نموذج باسم >>----> عملية انتاج طريقة أخرى ممكن استبدال المعيار داخل الاستعلام بالمعيار الاتى [TempVars]![x] وكذلك يتم استبدال الكود على زر الامر بالكود الاتى TempVars.Add "x",[رقم النموذج].Value DoCmd.SetWarnings False DoCmd.OpenQuery "qryJudy" DoCmd.SetWarnings True فتح النموذج بنافذة اخرى.accdb
    1 point
  38. جزاكم الله خيرا تم اضافة طريقة ثانية الى المشاركة الاصلية باستخدام دالة >>----> TempVars
    1 point
  39. جزاك الله خير يا اباجودي على الدعاء الطبيب اسأل الله ان يتقبل منا ومنكم صالح الاعمال وكلامك الجميل هذا تواضع منكم اخي الحبيب نحن هنا نتعلم من بعض والنقاش مثل ما ذكروا اساتذتنا الكبار يثري الموضوع تحياتي وتقديري
    1 point
  40. الله يسعدك ويزرقك ويجعلك للمتقين اماما ً اسأل الله تعالى ان يحسن اليكم كما تحسنون الى طلاب العلم امثالى شكر الله لكم استاذى الجليل
    1 point
  41. الحمد لله تعالى الذى تتم بنعمته الصالحات الحمد لله الذى هدانا وما كنا لهتدى لولا ان هدانا الله عزوجل سبحانك لا علم لنا يارب لك الحمد كما ينبغى لجلال وجهك ولعظيم سلطانك هذا فضل الله تعالى Database6 (3).accdb والله عملتها كده وحصل شئ غلط مش فاكر ايه
    1 point
  42. الله يسعدك كما اسعدتنى جزاكم الله خيرا انا والله قمت بازالة الاوفيس 2013 وقمت بتنصيب 2010 وعمل بنجاح ولكم بعد الرد الاخير من الاستاذ مصطفى والله كنت افكر اصطب 2003 واريح نفسي جزاكم الله خيرا كثيرا على دعواتكم الطيبات واسال الله ان يرزقكم مثلها اضعافا كثيره
    1 point
  43. تمت التجربة بــــــنجاح وإضافة جميلة لقائمة أعمالك المبهرة في المنتدى . جعل الله ما تقدمه في ميزان حسناتك حين تلقاه . وجميع المسلمين .
    1 point
  44. السلام عليكم إخواني وأخواتي ، بارك الله فيكم جميعاً الدرس الأول : الحقات التكرارية (الدورانية) : Looping في كثير من الأحيان يحتاج المبرمج إلى تكرار تنفيذ مجموعة من التعليمات عدداً من المرات، ويوجد طرقتين أساسيتين للتكرار في حالة كان عدد مرات التكرار معروفة مسبقا حيث يجب استخدام For ... Next ، وإذا كان عدد مرات التكرار غير محددة مسبقاً ومبنية على تحقق شرط معين (شرط إنتهاء الدوران أو البقاء به) فهنا نستخدم Do ... Loop . يوجد أربع أشكال لحقات الدوراان التكرارية المبنية على شرط وبجميعها يكون هناك شرط يحدد استمرار التكرار أو توقفه. وقيمة الشرط ستكون إما True أو False ، أو تعبير يرُُجع قيمة رقمية حيث تعتبر القيمة التي لا تساوي صفراً True وإلا False. أشكال البنى التكرارية الأربعة : 1. تنفيذ التعليمات statments هنا سيستمر حتى يتحقق الشرط condition . Do Until condition Statments Loop وعندما يصل أكسيس لتفيذ هذا الدوران ، فإنه سيبدأ وقبل كل شيء بفحص قيمة الشرط conditon، فإذا كان True ، سيتم الإنتقال فوراً إلى ما بعد التكرار أي أنه لن يتم الدخول للحلقة. أما إذا كان False ، فسيتم تنفيذ التعليمات satments ،ثم يرجع للسطر DO Until ، للقيام بفحص الشرط ثانية، وهكذا ... إذاً ، سيتم تكرار الحلقة عدداً من المرات ، طالما بقي الشرط conditon قيمته False . ولن ينفذ ولو مرة واحدة إذا كان الشرط True. ويجب في الحقات التكرارية المبني إنتهائها على شرط أن نلاحظ أنها لن تنتهي ما لم يتحقق الشرط ويجب العمل على تحقيقه في داخل الحلقة في لحظة ما وإلا سيستمر الدوران إلى ما لا نهاية ويعلق الجهاز. ولنأخذ مثالاً حتى نفهم كيف سيتم التعامل مع هذا الشكل من أشكال الحلقات الدورانية: نريد أن نجمع مجموعة من الأرقام المدخلة إلى الحاسوب ونطبع نتيجة جمعها . عندما ندخل العدد 999 نتوقف عن الإدخال. sum = 0 x= InputBox("أدخل الرقم ") do until x=999 sum = sum+x x= InputBox("أدخل الرقم ") loop Msgbox sum مع ملاحظة ما يلي : 1. أننا قمنا أولا بتحديد قيمة المجموع وهي بالبداية صفراً 2. ثم قمنا بإدخال القيمة الإبتدائية قبل الدخول للحلقة وهي X ويتم إدخالها من قبل المستخدم عند تشغيل البرنامج. 3. بناء على قيمة x فإذا كانت 999 يكون الشرط true ولا ندخل للحلقة وإلا يكون false وندخل في داخل الحلقة نقوم بزيادة قيمة sum االمجموع بمقدار القيمة المدخلة وهي x . 4. ثم تأتي عملية الإدخال من جديد داخل الحلقة والتي بدونها لن ينتهي التكرار حيث من خلال هذه الجملة سيتم وقف التكرار وذلك عند إدخال القيمة 999. 5. وفي نهاية البرنامج نطبع القيمة المطوبة وهي مجموع الأرقام التي تم إدخالها. 2. الشكل الثاني من أشكال الحلقات سيقوم بتنفيذ الدوران على الأقل مرة واحدة حيث يتم الدخول للحلقة أولا ثم في نهاية الحلقة يتم فحص الشرط : Do Statements Loop Until condition عندما يصل أكسيس لهذه الحلقة يتم الدخول فيها فورا وتنفيذ الجمل statements وبعد تنفيذها يتم فحص الشرط condtion فإذا كان true يخرج من الدوران وإلا يبقى وينفذ مرة أخرى وهكذا ... ولنأخذ المثال التالي : نريد أن نحسب مساحة مجموعة من الدوائؤ وعندما ندخل أن نصف القطر للدائرة صفراً تتوقف الحقلة (الدوران). Private Sub ex2_Click() Do r = InputBox("أدخل نصف القطر") a = r ^ 2 * 22 / 7 MsgBox "المساحة= " & a Loop Until r=0 End Sub وأرجو ملاحظة ما يلي : 1. تم الدخول للحلقة مباشرة دون شرط أو قيد ولهذا سيتم تنفيذ الحلقة على الأقل مرة واحدة 2. تم إدخال نصف القطر r حيث سليزم لحساب مساحة الدائرة والتي تساوي مربع نصف القطر مضروبا في النسبة التقريبية ط والتي تساوي 22/7. 3. يتم احتساب مساحة الدائة وطباعة النتيجة وذلك داخل الحلقة ايضاً. 4. في نهاية الحقلة يتم السؤال عن الشرط فإذا كانت قيمة نصف القطر r=0 فسنخرج من الحلقة والا ننتقل لإدخال نصف قطر جديد وحساب مساحة جديد وهكذا .. 3. في الشكل الثالث من أشكال الدوران ، تنفذ التعليمات طالما أن قيمة الشرط condition صحيحة true وإلا يتم التوقف عن الدوران في الحلقة التكراارية. do while condition statements loop عندما يصل الأكسيس إلى هذه الحلقة يفحص قيمة الشرط أولا وقبل الدخل للدوران فإذا كان صحيحاً يستمر في الدوران وإلا يخرج من الدوران. ولنأخذ المثال التالي : نريد أن نقرأ مجموعة من الأسماء ونطبعها وإذا كان الحرف الأول في الكلمة ع (حرف العين) نتوقف. Private Sub ex3_Click() na = InputBox("أدخل أسم") Do While Left(na, 1) <> "ع" MsgBox na na = InputBox("أدخل أسم") Loop End Sub ومن المهم ملاحظة ما يلي : 1. يتم إدخال اسم ابتدائي قبل الدخول للحلقة حيث سيتم فحص الشرط مباشرة 2. لاحظ أن الشرط هو بالسؤال عن الحرف الأول من اليسار Left للاسم وإذا لم يكن يساوي حرف العين نستمر في الدوران وعندما ندخل اسم يكون أول حرف فيه عين يتم التوقف والخروج من الدوران. 3. في داخل الدوران سيتم طباعة النتيجة المطلوبة وهي الأسم ثم سيتم السؤال عن الأسم التالي تمهيدا لتنفيذ الدورة الثانية وهكذا ... 4. الشكر الرابع والأخير من أشكال الحلقات الدورانية المشروطة يتم فيه تنفيذ التعليمات مرة واحدة على الأقل وهو كما يلي : Do statements Loop While condition وهنا عندما يثل الأكسيس إلى الحلقة يتم الدخول مباشرة لها وتنفيذ الجمل التي بها statements ثم يتم الؤال عن صحة الشرط condtion حيث إذا كان true يستمر في الدوران وإلا يتم الخروج منه. ولنأخذ المثال التالي وهو حساب مجموع مربعات (تربيع) الأعداد المدخلة . نتوقف عن الحساب ونطبع النتيجة المجموع عندما ندخل العدد 0. Private Sub ex5_Click() sum = 0 Do x = InputBox("أدخل رقم") sum = sum + x ^ 2 Loop While Not x = 0 MsgBox "مجموع مربعات الأعداد المدخلة هو " & sum End Sub لاحظ أن شرط الإنتهاء هو not x = 0 وهو مكافىء للشرط x<> 0 حيث الرمز <> يعني لا يساوي. لاحظ أيضا أنه في جميع الأشكال الأربعة الساقة لم يحدد في الأمثلة عدد مرات التنفيذ وهكذا تستخدم الحلقات الدورانية في هذه الأشكال عندما لا يعرف عدد مرات التنفيذ (الدوران) مسبقاً. أما إذا كنا نعلم عدد مرات التنفيذ (الدوران) فإنه من غير المفضل نهائياً استخدام الأشكال السابقة ويجب استخدام الشكل الخاص بالتكرار المروف مرات الدوران مسبقا وهو For .. do التالي : For counter = start to end [Step increment] statments Next [Counter] حيث أن : counter : متغير (عداد الحلقة التكرارية) start : القيمة الإبتدائية للدوران end : القيمة النهائية للدوران increment : مقدار الزيادة في كل مرة من مرات الدوران وإذا لم يوضع تكون الزيادة بشكل معياري هي 1 ويمكن أن يكون increment موجب أو سالب فإذا كان سالب يجب أن تكون القيمة النهائية أضغر من الإبتدائية. وإليكم كيفية تعامل أكسيس مع هذا النوع من الحلقات : 1. عند الدخول للدوران for يتم وضع قيمة counter تساوي القيمة الإبتدائية start . 2. يتم ومباشرة وقبل تنفيذ الجمل التي تلو for إذا كانت قيمة العداد counter أكبر من القيمة النهائية end فإن كانت كذلك يتم إنهاء الدوران والخروج منه . أما إذا كانت قيمة Increment سالبة فإن الفحص يتم بطريقة عكسية حيث يتم التأكد فيما إذا كانت قيمة العداد counter أقل من القيمة الإبتدائية start وإذا كانت كذلك يتم الخروج من الحلقة. 3. يتم تنفيذ الجمل التي في الحلقة 4. يتم زيادة قيمة العداد بمقدا واحد أو increment إذا كان محدداً. 5. وهكذا يتم تكرار الخطوات من 2 إلى 4 في كل مرة. ولنأخذ المثال التالي نفرض أننا نريد جمع الأعداد الزوجية من 1 - 100 وطباعة النتيجة : Private Sub ex6_Click() sum = 0 For i = 1 To 100 Step 2 sum = sum + i Next i MsgBox "المجموع هو " & sum End Sub وفي مثالنا الثاني نريد أن نقرأ سام نموذج فإذا كان مفتوح نطبع أن النموذج مفتوح وإلا نطبع غير مفتوح Private Sub ex7_Click() n = InputBox("أدخل اسم النموذج") IsOpen = False For i = 0 To Forms.Count - 1 If Forms(i).FormName = n Then IsOpen = True End If Next i If IsOpen Then MsgBox " النموذج مفتوح" Else MsgBox "النموذج غير مفتوح" End If End Sub لاحظ أن للنماذج المفتوحة رقم يبدأ من صفر forms.count ولاحظ اسم النموذج forms(I). formname أما باقي الأمور في الحلقة فأعتقد أنه سهلة. مع الاحترام والتقدير =الدروس= looping.rar
    1 point
  45. السلام عليكم إخواني وأخواتي ، بارك الله فيكم جميعاً درسنا اليوم حول نفس الموضوع السابق وهو استنساخ مجموعة التسجيلات بواسطة Recordsetclone ولكن هذه المرة مع ADO . قد يظن البعض أن الأمر في غاية البساطة وذلك باستخدم نفس المثال السابق مع تغيير السطر التعريف الأساسي Dim rstEmployees As DAO.Recordset إلى Dim rstEmployees ADODB.Recordset حسناً هكذا يبدو الأمر ، جربوه ولن ينجح حيث ستحصلون في الجملة Set rstEmployees = Me.Form.RecordsetClone على الخطأ Type mismatch أي أن الأنواع غير متوافقة يعني المجموعة المستنسخة من نوع أخر وهذا صحيح ! ، أنسيتم السطرين السابقين باللون الأحمر ، فأنا لم ألونهما جزافاً واعيدهما هنا مرة أخرى للتذكير من المهم ملاحظة أن نوع مجموعة التسجيلات التي يتم تعريفها في وضع التصميم في قاعدة البيانات mdb. هي بشكل تلقائي DAO Recordset ، أما في مشروع أكسيس فتكون ADO Recordset إذاً هذا هو السبب أن مصدر السجلات الذي عرفنه في النموذج والذي سيمثل مجموعة التسجيلات سيكون من النوع DAO . حسناً ، الحل بسيط نرجع للمراجع ونجعل مرجع ADO يسبق مرجع DAO بالتعريف وهكذا يتم تحديد نوع مجموعة التسجيلات من نوع ADO ، جربوه وللأسف لن ينجح ، و ياليت الحل كان بهذه البساطة! ماذا نجري الأن ؟ لم يبقى لنا إلا أن نفعل شيء واحد ونأمل أن ينجح وهو حذف المرجع DAO (عدم اختياره من ضمن المراجع) ، جربوا ذلك ، ويا للعجب ، حتى أننا بعد حذف المرجع كاملا لم يتم تعريف مجموعة التسجلات المرتبطة بالنموذج من نوع ADO . ماذا سنعمل إذن ، أولا سنحفظ القاعدة التي في اللون الأحمر حتى لا نتعب أنفسنا أكثر حيث لا يوجد طريقة نهائيا في وضع التصميم لجعل النموذج يرتبط بمجموعة تسجيلات غير DAO . ثأنيا ، لا تبتأسوا كثيرا حيث يوجد حل وهو رائع جدا وهو كما يلي وأيضاً يمكن اعتباره قاعدة ويجب حفظه غيباً. إذا أردنا أن نجعل مجموعة التسجيلات لنموذج في قاعدة mdb. تعمل بتقنية ADO يجب عمل الخطوات الثلاث التالية. 1. في وضع التصميم للنموذج نلغي مصدر السجل Record source للنموذج (أي نجعله بدون مصدر) . 2. في حدث الفتح للنموذج نضع الكود التالي بدون تغيير سوى بمصدر السجل الذي هو في مثالنا جدول employees : Private Sub Form_Open(Cancel As Integer) Dim rst As ADODB.Recordset, cn As ADODB.Connection Set rst = New ADODB.Recordset rst.ActiveConnection = CurrentProject.Connection rst.CursorType = adOpenDynamic rst.CursorLocation = adUseClient rst.Open "employees", , adOpenKeyset, adLockOptimistic, adCmdTable Set Me.Recordset = rst End Sub 3. في حدث الإغلاق للنموذج نضع الكود التالي : Private Sub Form_Close() Dim cn As ADODB.Connection Set cn = Me.Recordset.ActiveConnection cn.Close Set cn = Nothing End Sub وبعدها سيختفي الخطأ Type mismatch الذي تحدثنا عنه في بداية الدرس وإليكم الحل كاملا كما طرحته تماما هنا في المرفق التالي : مع احترامي وتقديري لكم RecordsetLesson2.rar
    1 point
  46. السلام عليكم إخواني وأخواتي ، بارك الله فيكم جميعاً قبل أن نكمل درسنا في التعمق في طريقة التعامل مع مجموعات التسجيلات وعرض طرق أخرى لتعريف مجموعة التسجيلات recordset بأستخدام الكيان DAO ، أود أن نلقي الضوء قليلا وعلى نفس المثال السابق وهو الوصول إلى سجل محدد ولكن هذه المرة باستخدام تقنية ADO ، ولكن قبل عمل ذلك أود أن أشير إلى أهمية الانتباء إلى المراجع حيث مرجعي ADO و DAO يوجد بهما نفس التسمية للكيانات مثل recordset وكيف نتغلب على تشابه التسمية. في الصورة السابقة ومن شاشة محرر فيجوال بيسك (ALT+F11) ... ثم tools ... ثم References يظهر لنا الصندوق الحواري كما في الصورة لاحظوا أننا اخترنا DAO وكذلك ADO في نفس الوقت وهذا يعني أنه يمكن استخدام جميع الكيانات فيهما الأثنين ومنها الكيان recordset فماذا سيعتبر في البرنامج (الوحدة النمطية) هل سيتبع إلى DAO أو إلى ADO ، في الحقيقة أن أسهل طريقة وحتى لا يحدث لبس هي تعريفه بالشكل التالي ADODB.Recordset أو DOA.Recordset أم أذا عرفنه بدون تحديد فهو سيتبع للمرجع الذي يظهر أولا وفي هذه الحالة كما في الصورة سيتبع إلى DAO حيث هو المعرف قبل ADO. الآن أنتقل بكم مباشرة إلى تطبيق المثال المكافىء للمثال الأول وعلى نفس القاعدة السابقة قاعدة الموظفين التي تم إرفاقها وللحصول على معلومات الموظف مباشرة ولكن بإستخدام تقنية ADO . Private Sub example1_Click() Dim Cnn As ADODB.Connection Dim rstEmployees As ADODB.Recordset Dim strCnn As String Set Cnn = New ADODB.Connection strCnn = CurrentProject.Connection Cnn.Open strCnn Set rstEmployees = New ADODB.Recordset rstEmployees.Open "employees", Cnn, 3, 1, adCmdTableDirect 'read only and allow indexing id = InputBox("أدخل رقم الموظف") rstEmployees.Index = "PrimaryKey" rstEmployees.Seek id, adSeekFirstEQ If rstEmployees.EOF Then MsgBox "الرقم غير موجود" Else MsgBox rstEmployees!empfirst & " " & rstEmployees!empfamily End If rstEmployees.Close Set Cnn = Nothing Set rstEmployees = Nothing End Sub الملاحظات : 1. تمهيدا للوصول للجدول employees الموجود في قاعدة البيانات الحالية وليست في مصادر بيانات خارجية أو قاعدة أخري نعرف أولا ما يسمى نص الإتصال connection string وهو مصدر البيانات وهنا الأمر في غاية البساطة فهو في نفس القاعدة ولذا أشرنا له بالنص currentproject.connection والمكافئة تماما في تقنية DAO للنص CurrentDb ومن الضروري جدا فتح الاتصال وهذا تم في الجملة Cnn.Open strCnn 2. ثم نقوم بفتح (تعريف) مجموعة التسجيلات والتي تتم من خلال الخاصية OPEN كما في rstEmployees.Open "employees", Cnn, 3, 1, adCmdTableDirect 'read only and والشكل العام لخاصية الفتح هو recordset.Open Source, ActiveConnection, CursorType, LockType, Options علماً أن كلمة cursor هنا يعنى بها عنصرا من قاعدة البيانات التي تتحكم في التنقل بين السجلات ، تعديل البيانات ، وظهور التغيرات من المستخدمين للقاعدة. وطبعا يوجد هنا كما في DAO أيضا أربعة طرق مختلفة لفتح مجموعة التسجيلات وهي CursorType : adOpenDynamic = 2، adOpenForwardOnly= 0 ، adOpenKeyset = 1 ، adOpenStatic = 3 ، والتي سنتعرض لها بالتدريج ، ما تم استخدامه في هذا المثال هو 3 وهو يسمى static cursor وهو عبارة عن نسخة ساكنة عن السجلات للوصول وإيجاد البيانات دونما الأهتمام برؤية الإضافات والتغييرات والحذف الآني من المستخدمين. LockType : نوع إقفال السجلات وما استخدامناه في مثالنا هو 1 adLockReadOnly ويعني أن البيانات للقراءة فقط ولا نستطيع التعديل عليها . options : الخيارت التي تحدد كيف سيقو مزود البيانات بمعالجتها وفي مثالنا استخدمنا adCmdTableDirect وبهذا الخيار فقط يمكن استعمال الخاصية seek في ADO وقيمة هذا الثابت ، يعني adCmdTableDirect هي 512 . تذكروها جيدا حيث لا يوجد طريقة غيرها . 3. الآن البيئة مهيئة تماما لما نريد تحقيقه في المثال نقوم بتحديد الفهرس كما في خاصية الفهرس rstEmployees.Index = "PrimaryKey" ولا تنسوا حكاية اسم الفهرس فهي نفس الحكاية التي تم شرحها أعلاه في DAO . 4. ثم نقوم بقراءة رقم الموظف وحاولة الوصول إليه من خلال الخاصية rstEmployees.Seek id, adSeekFirstEQ 5. لاحظوا هنا الفرق بين هذه الطريقة وطريقة DAO حيث المعاملات تم عكسها علما أن عمليات المقارنة كانت هناك "=" بينما هنا أصبحت كما يلي وحسب مثالنا : adSeekFirstEQ 1 البحث عن أول موظف له الرقم المحدد. 6. بالنسبة nomatch لا توجد هذه الخاصية في ADO وعوضا عنها نستخدم فكرة أن البحث إذا لم يسفر عن نتيجة فإن مؤشر القراءة الوهمي سيصبح نهاية الملف وهكذا نتصرف ونسأل عن خاصية نهاية الملف rstEmployees.EOF إذا كانت true فهذا يعني أننا لم نجد أي سجل يوافق البحث . 7. هذا كل شيء لا تنسوا إغلاق مجموعة التسجيلات في نهاية العمل كما فعلنا أيضا مع DAO . أليست البرمجة رائعة ؟؟ مع احترامي وتقديري لكم جميعاً. FindEmp_ADO_DAO.rar
    1 point
×
×
  • اضف...

Important Information