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

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

  1. أبوبسمله

    أبوبسمله

    الخبراء


    • نقاط

      15

    • Posts

      3463


  2. الدكتور خضر الرجبي

    الدكتور خضر الرجبي

    المشرفين السابقين


    • نقاط

      10

    • Posts

      919


  3. jjafferr

    jjafferr

    أوفيسنا


    • نقاط

      7

    • Posts

      9935


  4. محمد طاهر عرفه

    محمد طاهر عرفه

    إدارة الموقع


    • نقاط

      5

    • Posts

      8731


Popular Content

Showing content with the highest reputation on 12/28/19 in all areas

  1. اخى مصطفى ولعدم حدوث خطأ ما يمكن استبدال الكود السابق بالمثال بالتالى If Me.mony2 = NZ("",0) Then n2 = (tex_loan * tex_charg / 100) Else n2 = (tex_loan * tex_charg / 100) + Me.mony2 End If End Sub لما قرائته فى هذه المشاركه أولا يوجد 3 أنواع من القيم يجب أن نميز بينها وان كان هناك توضيح اكثر من اخواننا واساتذتنا فليشاركوننا فنحن طلاب علم ونتعلم هذا والله اعلى واعلم وجزاهم الله خيرا اساتذتنا واخواننا اللذين نتعلم منهم تقبل تحياتى وتمنياتى لك وللجميع بالتوفيق طبتم واهتديتم
    3 points
  2. الاخ فارس النايلي ملاحظة قبل تنفيذ التجميع : يجب ان يكون ملف التجميع موجود في نغس فلدر ملفات المصدر وسوف يقوم ملف التجميع بتجميع كل شيتات ملفات المصدر الموجودة في نغس الفولدر شاهد المرفق My_Folder_Xlsm.rar
    3 points
  3. اشكركم جزيلا تم حل الامر ههههههههههههه مع انى كنت عارفه بس الاستعجال وحش سامحونى يجب ان توشر على هذه الخانة ايضا اشكرك استاذ خالد .. تم حل الامر
    2 points
  4. السلام عليكم اتصور ان الرسالة تبين انه انت استخدمت رموز محجوزة للنظام والله اعلم
    2 points
  5. اشكركم جميعا اساتذتي الكرام بارك الله بيكم @عبد اللطيف سلوم @Khalf @خالد سيسكو @أحمد الفلاحجى @ابوآمنة هذا هو المطلوب تحياتي للجميع
    2 points
  6. استاذنا الفاضل / @أحمد الفلاحجى جزاك الله خير وبارك الله فيك على ما تقدمه من مساعدات لى سؤال بسيط وهو هل الكود معناه انه فى حالة ان mony2 يساوي فراغ او صفر ام ماذا ارجو توضيح الكود بارك الله فيك
    2 points
  7. وعليكم السلام فى اداه تابعه لميكروسوفت هى بتقوم بازاله الاوفيس وبتعالج المشاكل دى ارفقها لك ان شاء الله تحللك المشكله تقبل تحياتى setup.rar
    2 points
  8. جزاك الله خيرا اخى خالد جميل اخى اخى خالد كل يوم ارى تركيبه عجيبه لدوال Dlookup واخواتها فى طريقه دمجهم وكل يوم اتعلم شىء جديد جزاك الله خيرا اخى صالح واذا كان فى كتاب لشرح مبسط DAO عند احد اخواننا فياريت يشاركنا تقبلوا تحياتى وتمنياتى لكم وللجميع بالتوفيق طبتم واهتديتم
    2 points
  9. الشكر لله ثم لاخواننا واساتذتنا اللذين تعلمنا ونتعلم منهم والحمدلله الذى بنعمته تتم الصالحات بالتوفيق اخى
    2 points
  10. وعليكم السلام ورحمة الله وبركاته قم بعمل استعلام تحديث لكافة البيانات او قوم بوضع الكود في وحدة نمطية وقم بعمل تشغيل له من زر امر في النموذج او ارفاق مثال لعمل اللازم ملاحظة اخي الكريم : لا يحب تكرار طرح الموضوع ثلاث مرات متتالية فهذا محالف لقوانين الموقع ممنوعات : تعرض المشاركة للالغاء الفوري 1. ممنوع نهائيا وبشكل قاطع تكرار الموضوع نفسه أو فتح موضوع جديد للمطالبة برد في موضوع سابق https://www.officena.net/Tips/Questions.htm تحياتي
    2 points
  11. وعليكم السلام على منا فاهم فالكود فانت جعلت قيمه mony2 = نص فاذا جمعت رقم على نص فكيف يكون ولنفرض قيمه mony2 = 100 + القيمه الاولى = 10 الناتج سيكون 10010 اذا كان حقل mony2 ضعه كما هو من غير علامات التنصيص واذا كان حقل نصى فاستخدم داله لتحويله لرقم ليتم الجمع مثلا val(mony2) والاوجب ارفاق ملف تقبل تحياتى طبتم واهتديتم
    2 points
  12. تفضل 3 طرق لتصفح الانترنت من الاكسس ، والبحث عن اسم الطالب في Google.com . وهذا كود الازرار: Private Sub cmd_FollowHyperlink_Click() url_address = "http://www.google.com/search?lr=lang_ar&cr=&hl=ar&ie=windows-1256&oe=windows-1256&q=" Application.FollowHyperlink url_address & Me!name End Sub Private Sub cmd_ie_Click() Dim ie As Object Set ie = CreateObject("internetexplorer.application") url_address = "http://www.google.com/search?lr=lang_ar&cr=&hl=ar&ie=windows-1256&oe=windows-1256&q=" ie.Visible = True ie.Navigate url_address & Me!name End Sub Private Sub cmd_objIE_Click() 'Reference to Microsfot Internet Controls 'c:\windows\system32\ieFrame.dll Dim web As WebBrowser Set web = Me.objIE.Object url_address = "http://www.google.com/search?lr=lang_ar&cr=&hl=ar&ie=windows-1256&oe=windows-1256&q=" web.Silent = True 'stop script errors web.Navigate url_address & Me!name End Sub جعفر 255.web.accdb.zip
    2 points
  13. من هنـــــــــــــــــــــــا مع ملاحظة أن بعض جمل الاس كيو ال لا تظهر سليمة فى الاكسبلورر ، لذا يرجي نسخها اذا أردنا تنفيذها أو مشاهدتها فى المثال المرفق Q3.zip
    1 point
  14. واجهتني مشكلة متعلقة في بناء جملة Dsum ولم استطع حلها المشكلة الاولى :- كيفية نقل اجمالي المشتريات والمبيعات الى الجدول الخاص بكل واحدة المشكلة الثانية : خطا في بناء الدالة Dsum تم ايضاح المشكلتين بالصور المرفقة ارجو مساعدتي ولكم كل الشكر والتقدير اخواني الاعزاء حسابات مطبعة.rar ارجو من اخواني مساعدتي في حل هذه المشكلة باسرع وقت ممكن لانني سابجا بالعمل على هذا البرنامج بداية العام الجديد
    1 point
  15. تفضل اخي الكريم تم عمل استعلام تحديث وهو كالتالي UPDATE Table1 SET Table1.m = DateAdd("yyyy",60,[datebirth]-1); Database1(3).rar تحياتي
    1 point
  16. تمام جزاكم الله خيرا نتيجة الاستعجال كان الخطأ
    1 point
  17. [data2] & Chr(13) & Chr(10) &[data1]
    1 point
  18. وعليكم السلام 🙂 استخدم فاصل الاسطر : vBCrLf مثلا : السطر الاول & vBCrLf & السطر الثاني Constant Value Description ---------------------------------------------------------------- vbCr Chr(13) Carriage return vbCrLf Chr(13) & Chr(10) Carriage return–linefeed combination vbLf Chr(10) Line feed vbCr : - return to line beginning Represents a carriage-return character for print and display functions. vbCrLf : - similar to pressing Enter Represents a carriage-return character combined with a linefeed character for print and display functions. vbLf : - go to next line Represents a linefeed character for print and display functions. جعفر
    1 point
  19. نعم انا فهمت السؤال ، وجوابي كان ، اذا ABC = Null فسيكون الجواب len([ABC]) = Null ، بينما نحن نريد الجواب ان يكون len([ABC]) = 0 جعفر
    1 point
  20. الهدف من استعمال سطر واحد بدل عن مجموعة اوامر ، هو لتسهيل الامر والكود علينا ، ومعرفتنا اذا الحقل فيه قيمة ، معناه ان طول القيمة والتي نعرفها عن طريق الامر Len فإننا نريد ان نعرف اذا طول الحقل = 0 او لا اليك نتائج هذه العمليات : Debug.Print Len("234") = 3 Debug.Print Len("") = 0 Debug.Print Len(Null) = Null Debug.Print Len(Null & "") = 0 فالامر Len اعطانا قيمة 0 لما قيمة الحقل تكون "" ولكنه اعطانا Null لما قيمة الحقل تكون Null ، ولكن Null ليس رقم ،مما يجعلنا نضطر نرجع الى الامر IsNull ، معناه انه يجب ان نستخدم اكثر من امر في السطر الواحد (كما اوضحت سابقا). جعفر
    1 point
  21. بارك الله فيك استاذ wahid-chaoui وجزاك الله كل خير على تقديم المساعدة أستاذ hamadaelsamadony كان عليك لزاما قبل رفع المشاركة استخدام خاصية البحث بالمنتدى فهناك مئات المشاركات التى تخص طلبك ويجب عليك توضيح طلبك بشكل كافى ووافى وتدعيم دائما المشاركة برفع ملف اكسيل فلا تنجح اى مشاركة الا برفع الملف وذلك لأنه لا يمكن العمل على التخمين -ومساعدة على عدم اهدار وقت الأساتذة أين الضغط على الإعجاب على الإجابة الممتازة المقدمة من الأستاذ wahid-chaoui ؟!!! 💙
    1 point
  22. اخى الفاضل حياك الله بين اخوانك فى منتدانا العزيز الاكسيس استخدم الكود كالتالى واخبرنا بالنتيجه Me.Project = Me.PRCode.Column(1) ان شاء الله يظبط كما تريد تقبل تحياتى
    1 point
  23. ارجع الى موضضوع الاستاذ محمد عصام أنقر هنا ::بالتوفيق::
    1 point
  24. عليك السلام ورحمة الله وبركاته جرب هذا دوام الموظفين.xlsx
    1 point
  25. استعمل الخاصية Option Explicit قبل كلمة Sub بحيث يظهر لك الكود مكان الخطأ باللون الاصفر
    1 point
  26. بارك الله فيك يا استاذ احمد هو دا اللى انا محتاجه شكرا جزيلا
    1 point
  27. ومشاركة مع الزملاء الكود Private Sub znumbers_BeforeUpdate(Cancel As Integer) Dim Rs As DAO.Recordset Set Rs = CurrentDb.OpenRecordset("wared") Rs.MoveFirst Do Until Rs.EOF If Rs!znumber = [znumbers] And Rs!zdate = Me.zdates Then MsgBox "يجب ألا يتكرر تاريخ ورقم الكتاب معاً", vbExclamation Me.Undo Cancel = True End If Rs.MoveNext Loop Set Rs = Nothing End Sub نظام وارد.saleh101.accdb
    1 point
  28. اخى الحبيب ... حالد بالفعل الاستعلام كان طويل جدا ....وتمت المراجعه وحل المشكله اشكرك جدا على ...مساعدتى فى اكتشاف المشكله جزاك الله خيرا اخى الحبيب
    1 point
  29. السلام عليكم انظر للصورة اخي الكريم
    1 point
  30. ومشاركه مع اخوانى بداله Dcount مع التاريخ محاوله منى على قدى بالتوفيق اخى نظام وارد-1.accdb
    1 point
  31. وعليكم السلام-تفضل نظام_الملاك_2019.xlsm
    1 point
  32. تفضل لقد قمت بالتعديل على الملف ليقوم بضغط الواجهة مباشرة دون ظهور خيارات أخرى mas_backup2.mdb
    1 point
  33. السلام عليكم ورحمة الله وبركاته معادلة التنسيق الشرطي لا تعمل بشكل صحيح ارجو المساعدة بان يكون التنسيق الشرطي للاسماء المكررة حسب الخلية المحددة ولكم وافر احترامي وتقديري التنسيق الشرطي للمكرر.xls
    1 point
  34. السلام عليكم الحمد لله تم عمل المطلوب وذلك باضافة شرط اخر للمعادلة =IF(AND(COUNTIF($D$3:$D$8;$BP$5)>1;D3=$BP$5);TRUE;FALSE) جزاكم الله خيرا وشكرا لجهود الاساتذة الذين فتحوا الملف وارادوا مساعدتي ولكن اعتقد طرحي للسؤال لم يكن بالشكل الصحيح ولذلك تاخر الاساتذة بالرد والاّ جوابه بسيط جدا تحياتي لكم ووافر احترامي معادلة التنسيق الشرطي للمكرر حسب خلايا محددة.xls
    1 point
  35. وعليك السلام ورحمة الله وبركاته جرب هذا لعله يفي الغرض يجب عدم دمج الخلايا في الجزء الخاص بالتعامل بالأكواد البرنامج.xlsm
    1 point
  36. أستاذ / sam_farh بالفعل الملف به ما تريد أنه عند فتحه على أي جهاز يختفي الشريط وإذا أغلق الملف وفتحه مرة أخرى يختفي لأنه الكودي يشتغل في حدث ThisWorkBook عند الفتح ولإثراء الموضوع جرب هذا بإذن الله يفي الغرض Hide.xlsm
    1 point
  37. هذا مثال للكود قم باختيار القاعدة و اضغط على زر الضغط و لاحظ النتيجة Compact.accdb
    1 point
  38. السلام عليكم إخواني وأخواتي ، بارك الله فيكم لتأخذ وقتا مستقطعاً من درس مجموعة التسجيلات والوقوف قليلاً مع الملف المرفق للفائدة والأهمية. مع الاحترام Functions.rar
    1 point
  39. السلام عليكم أخي عبد المانع ، أشكرك إخواني وأخواتي ، بارك الله فيكم جميعاً سنتابع درسنا في Recordsetclone استنساخ مجموعة التسجيلات Recordset وفي هذا الدرس سنتعلم كيف نتعامل مع مجموعة التسجيلات المرتبطة مع نموذج والتي يمكن تحديدها من خاصية record source مصدر السجل في النموذج في وضع التصميم . هذه المجموعة من نوع Dynaset وهو النوع الثاني في تقنية DAO والتي يكافئها في ADO خاصية keyset cursor وهي مجموعة السجلات التي يمكن الأضافة عليها أو التغيير بها أو الحذف منها والمتعلقة بجدول واحد أو مجموعة جداول . من المهم ملاحظة أن نوع مجموعة التسجيلات التي يتم تعريفها في وضع التصميم في قاعدة البيانات mdb. هي بشكل تلقائي DAO Recordset ، أما في مشروع أكسيس فتكون ADO Recordset. وربما يتساءل البعض لماذا نحتاج إلى استنساخ مجموعة التسجيلات المرتبطة بنموذج ما ولماذا لا نتعامل معها مباشرة ، الأسباب كثيرة ومتعددة ، دعوني أقدم لكم سببا بسيطا مثلا خاصية Recordcont ليست متوفرة للنموذج بينما متوفرة لمجموعة التسجيلات ، والخاصية find كذلك ، بالإضافة إلى أن مؤشر مجموعة التسجيلات المستنسخة مستقل ولا علاقة له بمؤشر مجموعة التسجيلات المرتبطة بالنموذج وهذا يمكننا من عمل الأشياء بالخفاء دون ظهور تأثيراتها في النموذج وخصوصا في عملية التنقل بين السجلات التي عادة ما نحتاج لها في معظم الإجراءات والمتطلبات البرمجية لتنفيذ مهمات محددة كما في مثالنا التالي : في مثالنا لهذا الدرس قمت بتصميم زر أمر الذي بضغطه نقوم بقراءة رقم موظف ونطبع كنتيجة أولا عدد السجلات في جدول الموظفين وكذلك عدد الموظفين الذين تحت أمرنه (يعني عدد الموظفين الذين هو مسؤول عنهم) Private Sub example1_Click() Dim rstEmployees As DAO.Recordset Set rstEmployees = Me.Form.RecordsetClone id = InputBox("أدخل رقم المسئول") C = 0 MsgBox "عدد الموظفين " & rstEmployees.RecordCount rstEmployees.MoveFirst Do While Not rstEmployees.EOF If rstEmployees!EmpHead = id Then C = C + 1 rstEmployees.MoveNext Loop If C = 0 Then MsgBox "الموظف صاحب الرقم " & id & "ليس مسؤولا عن أحد" Else MsgBox " عدد الموظفين الذين بأمرة هذا المسؤول " & C End If rstEmployees.Close End Sub ملاحظات : 1. Set rstEmployees = Me.Form.RecordsetClone في هذا الأمر تم استنساخ مجموعة التسجيلات المرتبطة بالنموذج وهي في مثالنا سجلات الموظفين من جدول الموظفين وتم تعيينها لمجموعة التسجيلات rstrecordset التي ليس لها علاقة نهائيا في المجموعة المرتبطة بالنموذج. 2. تم عمل حلقة دورانية تنتهي بالوصول إلى أخر سجل في المجموعة المستنسخة وخلالها نقوم بزيادة العداد بناء على تحقق الشرط الذي بواصطته نحدد أن الموظف الذي أدخلنا رقمه بالمتغير id هو مسؤولا أو لا عن الموظف الذي وصلنا عنده في دورة الحلقة. 3. وفي النهاية يتم بناء على قيمة c وهي عدد الموظفين الذين تم احصائهم طباعة النتيجة. مع الاحترام والتقدير RecordsetLesson.rar
    1 point
  40. السلام عليكم إخواني وأخواتي ، بارك الله فيكم جميعاً قبل أن نكمل درسنا في التعمق في طريقة التعامل مع مجموعات التسجيلات وعرض طرق أخرى لتعريف مجموعة التسجيلات 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
  41. السلام عليكم ، إخوان وأخواتي ، بارك الله فيكم جميعاً في هذا الجزء من الدرس سيتم إلقاء الضوء على تقنيات طرق التعامل مع مجموعات التسجيلات المختلفة في فيجوال بيسك وهي بشكل من الجديد إلى القديم ADO و DAO و RDO : في فيجول بيسك ، يتوفر هذه الواجهات (تقنيات اتصال) للوصول للبيانات : 1. ActiveX Data Objects (ADO) 2. Data Access Objects (DAO) 3. Remote Data Objects (RDO) وكل من هذه الثلاثة تمثل كائن من كائنات الوصول للبيانات بوجوه مختلفة ، وباستخدام VBA بإمكانك برمجيا التحكم بالاتصال ، بنى الجمل ، والبيانات التي سيتم إرجاعها للاستخدام في التطبيق. السؤال هو ؟ لماذا هناك 3 طرق للوصول للبيانات في الفيجوال بيسك ؟ من المعروف أن طريق الوصول للبيانات تتطور بشكل متواصل وكل طريقة من هذه الطرق تمثل مرحلة من المراحل الفنية في هذا التطور . الأخيرة (الأحدث) هي ADO ، والتي من خصائصها البساطة - ورغم البساطة الأكثر مرونة – من كلا RDO أو DAO . للمشاريع الجديدة ، ينصح بشدة اعتماد ADO كواجهة (تقنية) الوصول للبيانات. هذه النصيحة ليست من خضر الرجبي ولكن من ميكروسوفت نفسها وهنا المرجع http://msdn.microsoft.com/library/default....dwithrdodao.asp أما بالنسبة لي فكما ذكرت سابقا أن أنصح الجميع بمعرفة القديم والجديد وقد وضعت المبررات لذلك وأنا ماض بتعريفكم على ADO و DAO بإذن الله كما وعدت سابقا. لماذا نستخدم ADO ؟ تم تصميم ADO بأبسط مستوى اتصال في ميكروسوفت مع OLE DB ، و OLE DB توفر كفاءة عالية في الوصول إلى أي مصدر بيانات ، سواءً في قواعد البيانات العلائقية أو غير العلائقية (لعلمكم يوجد قواعد بيانات تسمى الشبكية و المهيكلة وهي الجيل السابق من قواعد البيانات) ، وكذلك من مصادر البيانات أنظمة الملفات والبريد الإلكتروني ، والبيانات النصية والرسومية ، وكائنات الأعمال المخصصة ، وغيرها من المصادر. ADO صممت لملائمة الحد الأدنى من التراسل عندما نتعامل مع بيئة وسيناريوهات الإنترنت ، وأيضا تضع الحد الأدني من الطبقات بين واجهة التطبيق النهائية يعني للمستخدم وبين مصدر البيانات – كل ذلك ضمن واجهة خفيفة ذات كفاءة عالية. وكذلك ADO تستعمل طرق محادثة وخصائص مشابهة لتلك في DAO و RDO ، مع تبسيط منطق هذه الطرق وذلك من أجل التسهيل على المستخدم . ماذا بشأن DAO و RDO ؟ من أجل التوافقية (compatibility) ولدعم المشاريع السابقة استمرت فيجوال بيسك بدعم DAO و RDO للمشاريع القائمة. مقارنة ADO مع RDO و DAO : ADO ليست متواقة-الكود تلقائيا مع تطبيقاتك التي تستعمل طرق الوصول للبيانات السابقة . بينما كبسلة (encapsulation) تتضمن العمليات المتوفرة في كل من ADO و RDO ، يجب عليك تحويل الكثير من عناصر اللغة لاستعمال قواعد ADO في مشروع كان يستخدم DAO إن أحببت التحويل. في بعض الحالات ، هذا يعني تحويل بعض الإقترانات فقط ، وفي البعض الأخر قد تحتاج لبناء التطبيق كاملا من جديد باستخدام خصائص ADO الجديدة. DAO (Data Access Objects) : هي أول واجهة كائنات-مرئية object-oriented تعامل به محرك قاعدة بيانات ميكروسوفت Jet والتي مكنت مستخدمي فيجوال بيسك من الوصول إلى الجداول الأكسيس مباشرة وكذلك لقواعد بيانات أخرى من خلال ODBC . لا شك أن DAO هي الأنسب لتطبيق يعمل على جهاز واحد وكذلك الأنسب لمؤسسة صغير منفردة. RDO (Remote Data Objects) : هو كائن-مرئي يستخدم في التواصل مع ODBC بشكل موحد ومستثمرا لسهولة DAO، للكائن RDO حدوديات ، ورغم ذلك ، أثبت أفضلية استعماله مع بعض المحركات المشهورة مثل SQL Server, Oracle . ADO هو الجيل الجديد واللاحق DAO/RDO . عمل ADO أقرب ما يكون من RDO ، وعادة يوجد الكثير من التشابه في طرق الاستعمال. نستطيع القول بأن ADO حل محل الكائنين معا . ومن الممكن في البداية أن تظن أن التعامل مع ADO صعبا إلا أنك ستكتشف بإن طريقة بناءه المهيكلة ستجعل من السهولة بمكان التعامل مع ببساطة شديدة . من المهم ملاحظة أيضا أن ADO حالياً لا يدعم جميع إقترانات DAO ، وهو يحتوي اسلوب الدعم أكثر المتوفر في RDO للتفاعل مع مصادر بيانات OLE DB بالإضافة لدعم المصادر البعيدة وكذلك تكنولوجية DHTML. بشكل عام ، ربما ما زال مبكرا الرحيل إلى استعمال ADO بشكل كامل (بإستثناء أولئك الذين يستعملون ODBCDirct) ، حيث أن ADO لا تدعم بشكل كامل data definition (DDL)، المستخدمين, المجموعات ، على كل الأحول إذا كنت تستخدم DAO فقط في تطبيقات client-server الخادم-الزبون ولا تعتمد عليه في لغة تعريف البيانات بشكل اساسي ، فربما حان الوقت. خلاصة القول : وهذا رأيي الشخصي ، أنه قد حان الوقت بالتأكيد لمن لم يعرف عن الاثنين للتعرف على الاثنين معا حتى يواكب القديم والحالي والقادم من التطبيقات . ولكم مني كل الاحترام والتقدير
    1 point
  42. السلام عليكم إخواني وأخواتي ، بارك الله فيكم جميعاً أرحب بكم بهذا الدرس "التعامل مع مجموعات التسجيلات" أملا أن يكون فيه الفائدة لكم. قبل أن نخوض في تفاصيل وطرق التعامل مع مجموعة التسجيلات يجب أن نعرف ما هو المقصود بمجموعة التسجيلات والتي يسميها البعض أيضا بمجموعة السجلات ، والتي هي عبارة عن مجموعة السجلات محور الإهتمام في نموذج أو تقرير أو عنصر تحكم في مربع نص أو عنصر تحكم مربع تحرير وسرد أو متغير في وحدة نمطية ، (والحقيقة لا أجد لها أماكن استخدام غير الخمسة المذكورة) وهذه السجلات في شكلها البسيط ممكن أن تكون جدول واحد مؤلف من عدة حقول ، وممكن أن تكون مبنية من عدة جداول وبناء على شروط قد تكون معقدة، وتعتبر جميع نتائج الاستعلامات أو تعليمات SQL مجموعات تسجيلات. مجموعة التسجيلات Recordset هي كائن ، يعتبر من أكثر وأهم الكائنات استعمالا في VBA، ولذا أعزائي الأعضاء ، أحببت أن يكون شرحه في مقدمة دروسنا في VBA. ودرسنا اليوم تحديداً عن الكائن Recordset في DAO : Data Access Object. يوجد في هذا الكائن المهم أكثر من 30 خاصية و 18طريقة (أمر) وتقريباً كل قوة محرك بيانات أكسيس Jet ، في عمليات الإضافة والحذف والتعديل والبحث والفرز والتصفية على البيانات تكمن في الكائن Recordset. وقبل البدء بشرح كيفية التعامل مع مجموعة التسجيلات أرجو منكم أن تحفظوا الجملة التالية التي لن نفهمها تماماً إلا بعد اتمام الدرس كاملا والذي هو طويل نوعاً ما وتجدر الإشارة إلى هذه الجملة المهمة الأن وقبل البداية : " إن سلوك القراءة والكتابة في مجموعة التسجيلات يعتمد على نوع الكائن (ADO أو DAO) ويعتمد كذلك على نوع البيانات (Jet أو ِSQL) المعرفة بواسطة الكائن Recordset" وسأراجع معكم هذه الجملة في أخر الدرس التي بإذن الله عندها ستكون من الخبراء في استعمال مجموعات التسجيلات . وبكل تأكيد أن التعامل مع مجموعة التسجيلات بتقنية ADO هي الأحدث ولن نغفل ذلك نهائيا وسأحاول (حيثما أمكن ) وضع الأمثلة بطريقة ADO وكذلك DAO وما هذه إلا البداية والله الموفق ، علما أنني بذلك أحاول ربط القديم بالجديد وفي ذلك فوائد عديدة منها إلقاء الضوء على الطريقتين وتشجيع البعض ممن لم يتعامل مع أحدى التقنيات أن يستعملها أو على الأقل يستفيد منها في فهم الأمثلة التي تملىء المنتديات والتي فيها مزيجا من هذه التقنيات ولا أخفيكم أن هذه الفكرة قد تبادرت إلى ذهني بعد التفكير ملياً بأحسن الوسائل لطرح الموضوع بما فيه مصلحة الأعضاء العامة وبتشجيع من إخواني الخبراء في جامعة أهلا عرب وبعد استشارة أخي أبا هادي من أوفيسنا جزاهم الله خيراً. يوجد أربعة أنواع من مجموعات التسجيلات في DAO 1. النوع Table: ويستخدم لتحديد جدول في قاعدة البيانات الحالية فقط ، ولا يمكن استخدامه لتحديد استعلام أو جدول مرتبط من قاعدة أخرى ، ويمكن أن يستخدم هذا النوع للإضافة، الحذف ، التعديل ، أو البحث في الجدول، وعندما نستخدم هذا النوع فإن التغيرات والتعامل تكون مع الجدول مباشرة ، ومن مميزاته الحسنة أنه يسمح باستخدام أسرع طريقة للبحث عن التسجلات بالأمر seek الذي يبحث في الفهارس المعرفة على الجدول. إخواني وأخواتي ، لا أريد أن أطيل عليكم بالتفاصيل النظرية عن جميع الأنواع والنظريات المتعلقة بالموضوع لأنه طويل جدا وستملون الموضوع بك تأكيد ، لذا سأنتقل مباشرة إلى التطيبق العملي حتى نفهم ما توصلنا إليه حتى الأن ونستوعبه ونطبقه عملياً . تجدون في المرفق قاعدة بيانات فيها 3 جداول فقط ا الموظفين (employees) والأقسام (departments) والوظائف (jobs) بحيث أن لكل قسم مسؤولا (موظفاً) واحدا فقط ولكل موظف مسئول مباشر عنه وكل موظف يتبع لقسم ما ولكل موظف وظيفة محددة. إذا كنت لا تعرفون الكثير عن الجداول والعلاقات وطريقة التحليل والتصميم للوصول إلى النتيجة التالية كما في الصورة فيجب مراجعة الموضوع التالي وفهمه جيداً هنا الموضوع : أرجو منكم تفحص تصميم الجداول وخصائص الحقول جيداً. ما سبق هو ليس موضوعنا الأساسي ... الآن ننتقل إلى الموضوع : في مثالنا الأول نريد أن نبحث عن رقم موظف وإذا كان موجودا في جدول الموظفين نطبع اسم الموظف وعائلته وإذا لم يكن موجودا نطبع أن الرقم المدخل غير موجود ، ومن هنا نبدأ فهمنا لمجموعة التسجيلات ... Private Sub example1_Click() Dim MyDb As Database Dim rstEmployees As Recordset Set MyDb = CurrentDb Set rstEmployees = MyDb.OpenRecordset("employees") id = InputBox("أدخل رقم الموظف") rstEmployees.Index = "PrimaryKey" rstEmployees.Seek "=", id If rstEmployees.NoMatch Then MsgBox "هذا الرقم غير موجود" Else MsgBox rstEmployees!EmpFirst & " " & rstEmployees!empfamily End If rstEmployees.Close End Sub وإليكم الملاحظات المهمة التالية : 1. بناء المتغير من نوع recrodset هو عن طريق OpenRecordset ويوجد لها شكلان واحد لبناء مجموعة التسجيلات من قاعدة البيانات كما في مثالنا والثاني لبناء مجموعة التسجيلات من TableDef أو QueryDef أو من Recordset وأعدكم أنني لن أتشعب كثيرا حيث الموضوع طويل وسأركز حديث في الغالب حول الأمثلة التي أطرحها ، وبإمكانكم بعد فهم الأساسيات التوسع بالموضوع بكل سهولة. الشكل العام لطريقة بناء المتغير والتي استعملناها في مثالنا هي : set rst = database.openrecordset(source,type,options,lockedits) حيث 1- rst اسم المتغير من النوع recrodset 2- database اسم المتغير من نوع database 3- source متغير نصي ، اسم جدول أو استعلام او أمر sql ترجع سجلات. أما في مثالنا حيث النوع هو table ، فيجب أن يكون source اسم جدول 4- type وهو ثابت رقمي يحدد نوع المجموعة من (dbopentable،dbopendynaset، dpopensnapshot، dbopenforwardonly) ويوجد نوع خامس يستخدم فقط مع ODBCDIRECT وهو dbopendynamic مع ملاحظة أنه إذا فتحنا مجموعة سجلات بدون أن نحدد نوعها كما في مثالناً فإن المحرك Jet سينشىء المجموعة بشكل تلقائي من النوع table ، إذا كان المصدر جدولا ، أما إذا كان المصدر استعلاما أو جدولا مرتبطا فإن النوع سيصبح dynaset. 5- options هي مجموعة من الثوابت الإختيارية التي تحدد خصائص مجموعة التسجيلات في بيئة تعدد المستخدمين. 6- lockedits أيضا ثابت اختياري يحدد قفل التسجيلات أو لا. 2. تحديد الفهرس تمهيدا لإستخدام الأمر seek وإذكر مرة أخرى هنا أن هذه الطريقة تستخدم للبحث عن تسجيلة في مجموعة التسجيلات من النوع Table ولا يمكن استعمالها مع باقي الأنواع، وتقوم هذه الطريقة بالبحث فقط وفقاً لفهارس الجدول المعرفة أو التي يمكن تعريفها أيضا برمجياً وقبل كل شيء لنلقي نظرة على فهارس جدول الموظفين كما في الصورة : ولهذا قمنا بوضع اسم الفهرس PrimaryKey علما أننا نستطيع تغيير هذا الأسم في وضع تصميم الجدول ومن نافذة الفهارس كما في الصورة. لاحظوا أيضا أن rstemployees.Index تدعى خاصية الفهرس ومرة أخرى أذكر أن للكائن recordset ولاي كائن يوجد خصائص (properties ) و طرق (Methods) يعني أوامر. السؤال الذي يطرح نفسه هنا ماذا يحدث لو لم نقم بضبط خاصية الفهرس قبل استخدام الأمر seek ، سينتج الخطأ التالي : Operation invalid without a current index وعلماً أنه يمكن البحث عن تسجيلة وفق فهرس يتألف من أكثر من حقل (حتى 13 حقلا) وسنأخذ مثال على ذلك لاحقاً بإذن الله. 3. الأن الوضع مرتب لإجراء البحث ويتم ذلك من خلال الطريقة (الأمر) method واسمها seek بالطرية التالية rstEmployees.Seek "=", id حيث id هي القيمة التي تم قراءتها والأن سنبحث عنها ويمكن البحث بعدة طرق "=" ، ">" ، "<" ، "=>" ، "=<" 4. بعد الأمر السابق وهو أمر البحث يتم عمل شيئين بشكل تلقائي وفي الخفاء وهما: - يتم الإنتقال غلى التسجيلة التي وجدت حسب البحث (إن وجدت) - يتم تعريف قيمة الخاصية nomatch بناء على النتيجة إذا وجد السجل يكون فيها false وإذا لم يوجد يكون فيها true 5. الأن الأمر اصبح في غاية البساطة ولأننا نبحث في مفتاح رئيسي فلا حاجة للبحث إلا مرة واحدة فإن وجد الرقم فالسجل موجود وإلا فغير موجود. 6. في نهاية العمل لا تنسوا دائما إغلاق مجموعة التسجيلات بإستخدام الأمر close. أتمنى لكم وقتا سعيدا وممتعا مع هذا الدرس وإلى لقاء بإذن الله قريباً مع الاحترام والتقدير RecordSets.rar
    1 point
  43. السلام عليكم إخواني وأخواتي ، بارك الله فيكم جميعا الملحق 2 : نهاية درس الحلقات التكرارية . 1. يجدر الإشارة إلى تركيب أخر دوراني يندر استعماله حيث أن كفاءة الدورانات السابقة أكثر منه ولأنه لا يحتوي على طريقة للخروج إلا بتحقق شرطه وهو التركيب التالي : While condition [statements] Wend ويعمل طالما تحقق الشرط condition وبقي محققا يعني true فسيستمر تنفيذ التعليمات statements وعندما يصبح الشرط false يتنهي الدوران ولنأخذ مثالا عليه : لو أردنا أن نقوم بقراءة مجموعة كلمات وطباعة هذه الكلمات في النهاية على شكل جملة بحيث تنتهي القراءة عند إدخال كلمة توقف فيكون المثال كما يلي : Private Sub PrintStatement_Click() Dim W, Stat As String Stat = "" W = "" While Not W = "توقف" W = InputBox("أدخل كلمة") Stat = Stat & " " & W Wend MsgBox Left(Stat, Len(Stat) - 4) End Sub لاحظوا أننا طبعنا في النهاية قيمة state المتغير النصي الذي سيحتوي على كل الكلمات ولكن - 4 أي بدون الأربعة الحروف الأخيرة لأنها ستكون الكلمة توقف . 2. الخروج من الحلقات الدورانية: بشكل عام وكما لاحظنا في الدرس الأول فإن الخروج من الحلقة المشروطة يتم عندما يتحقق الشرط المطلوب للخروج وكذلك الحال بالنسبة للحلقات غير المشروطة for ... next فإن الخروج يتم عند اتمام عدد المرات للدوران. يمكن في كل الأحول ما عدا في (while ... wend) استخدام الخروج المباشر exit for أو exit do ومن أي مكان داخل الحلقة ، ويتم الخروج إلى الجملة التي تلي الحلقة مباشرة. فمثلا في مثال تحديد فيما إذا كان نموذج ما (معروف اسمه) مفتوحا أو لا سيترتب علينا عمل دورة ندور بها في كل النماذج ونفحص بها إذا كان النموذج مفتوحا أو لا ، والسؤال المفيد الذي يطرح نفسه هنا لماذ نستمر في الدوران إذا وجدنا النموذج المطلوب مفتوحاً، بكل تأكيد أن الجواب هو لا داعي للإستمرار في الدوران لأن ذلك سيكون مضيعة للوقت ، ويجب الخروج الفوري من الدوران . وللنظر إلى الإقتران التالي : Function IsOpen(ByVal MyFormName As String) As Boolean Dim i IsOpen = False For i = 0 To Forms.Count - 1 If Forms(i).FormName = MyFormName Then IsOpen = True Exit For End If Next i End Function وطريقة طلب الإقتران ستكون كما يلي : Private Sub FormCmd_Click() MsgBox IsOpen("form1") End Sub لاحظ أيضا أن هذا المثال يبين أنه يمكن استخدام exit من داخل if ، وكذلك يمكن استعمالها داخل جملة select إذا كان داخل دوران. 3. التكرار (الدوران) المتداخل Nested Loops مما لا شك فيه أن الدوران يمكن أن يتداخل ولنأخذ مثال على ذلك : نريد أن نقرأ من المستخدم كلمة فإذا كانت واحد يطلب منا إدخال رقم وإذا كانت أثنين يطلب منا إدخال رقمين وهكذا حتى خمسة وإذا طبعنا أي شيء غير واحد إلى خمسة يتوقف العمل وفي النهاية يطبع لنا مجموع جميع الأرقام التي تم إدخالها Private Sub AddAll_Click() Dim w As String Dim out As Boolean sum = 0 Do w = InputBox("الرجاء إدخال عدد الأرقم التي تريد جمعها واحد إلى خمسة أو اي شيء اخر للخروج") Select Case w Case "واحد": last = 1 Case "اثنين": last = 2 Case "ثلاثة": last = 3 Case "اربعة": last = 4 Case "خمسة":: last = 5 Case Else: last = 0 out = True End Select For i = 1 To last sum = sum + InputBox("أدخل رقم") Next i Loop Until out MsgBox "المجموع هو " & sum End Sub لاحظوا أنه في case else 1> تم تعيين قيمة out = true وذلك للخروج من الحلقة الخارجية المسؤولة عن إدخال الكلمات حيث ان هذه الحالة case يتم الدخول إليها في حال أدخلنا كلمة غير من واحد إلى خمسة. 2> تم تعيين قيمة last =0 حتى لا يتم تنفيذ الدوران for .. next لأنه يبدأ من 1. أترككم الآن مع هذا الدرس وسأذهب لأعد لكم درس جديد سيكون عن مجموعة التسجيلات فانتظروني ... :d مع الاحترام والتقدير ex1_re2.rar
    1 point
  44. السلام عليكم إخواني ، بارك الله فيكم وشكراً على تثبيت الموضوع ملحق الدرس الأول : بالنسبة للحلقات المشروطة لا يوجد طرق أخرى . وقاعدة كتابة هذه الجمل بشكلها المتكامل هو كما يلي : Syntax Do [{While | Until} condition] [statements] [Exit Do] [statements] Loop Or, you can use this syntax: Do [statements] [Exit Do] [statements] Loop [{While | Until} condition] بالنسبة للحلقات غير المشروطة على غرار for ... next يوجد أيضا تركيب أخر مهم لا نستطيع تجاهله وهو for each ... next وكمثال عليه أقدم لكم ما يلي : هذا الموضوع يتماشى مع Access 2002 و Access 2003 يستفاد من هذا الموضوع معرفة طريقة إضافة الطابعات المحملة (المعرفة) لجهاز الحاسوب إلى مربع تحرير وسرد (combo box) باستخدام البرمجة بلغة(VBA) . خطوات الطريقة هي : 1. ندخل إلى خصائص مربع التحرير والسرد ونضغط لسان التبويب الكل (All tab). 2. نغير قيم الخصائص كما يلي : نضع في خاصية الاسم (Name) الاسم dPrinter نختار في خاصية نوع مصدر الصف (Row Source Type) قائمة الحقول (Value List) نضع في حدث عند التحميل للنموذج (On Load) الكود التالي: Private Sub Form_Load() Dim prt As Printer For Each prt In Application.Printers Me!dPrinter.AddItem prt.DeviceName Next End Sub ملاحظة(1): عندما نضيف (نحمل) عناصر لمربع التحرير والسرد بالبرمجة (كما في المثال السابق) فإن العناصر لا تترتب أبجديا وإنما حسب ترتيب التحميل طبعا هناك حل لهذا الأمر أيضا، أرجو من الإخوة الأعضاء التفكير في الحل. ملاحظة(2): انتبه إلى طريقة استخدام (AddItem). الخلاصة : تم إضافة الطابعات المعرفة إلى مربع التحرير والسرد برمجيا وهذا مجرد مثال لأفكار كثيرة يمكن تطبيقها بنفس التقنية والشيء الممتع في هذه التقنية أن نتيجتها متواصلة التغير (Dynamic) أي كلما تغيرت تعريفات الطابعات تتغير محتويات مربع التحرير والسرد. مع الاحترام والتقدير
    1 point
  45. فى التقرير توجد خاصية Running Sum للحصول علي المجموع التراكمي للسجلات أما فى النماذج ، فللحصول علي المجموع التراكمي ، فهذا ملف مرفق به مثالين للأخوة حارث و أبو هاجر Cum____.rar
    1 point
  46. هذا مثال علي حساب التراكمي الكامل و التراكمي حتي القيمة السابقة فى النموذج ، ثم اضافة سجل جديد الي الجدول به القيمة و التراكمي و التراكمي حتي السجل السابق أرجو التجربة مع تحياتي PrevCum.rar
    1 point
  47. السلام عليكم يمكنك تطبيق مثال الأخ حارث وابو هاجر ولكن .. مع تعديل استثناء السجل الحالي مثلا فى مثال الاخ حارث =DSum("[price]";"[table2]";"[num1]<=[forms]![MForm1]![TSForm1]![num1]") تصبح =DSum("[price]";"[table2]";"[num1]<[forms]![MForm1]![TSForm1]![num1]") و أيضا اضافة شرط الاسم الي جزء الشرط فى معادلة ال Dsum اذا أردت التراكمي السابق لكل شخص علي حدة
    1 point
  48. مثال للأخ حارث قم بتشغيل الزر فى النموذج يقوم بانشاء جدول به الأخطاء و أرقامها errortable_harith.zip
    1 point
  49. سؤال الأخ ابو وليد هو ماار يده عند اختيار الاسم من جميع مربعات التحرير والسرد ان يقوم بالبحث في الجدول aa وينظر من يحمل أكبر رقم من الموجودين في مربعات التحرير والسرد ويضع اسمه في مربع النص mix اتمنى ان تكون المعلومة وصلت ؟ سؤال اخر لو حبيت اضيف واحد جديد على الجدول وابغى رقمه يكون مثلا 6 كيف اخلي رقم 6 يصير 7 وهكذا للي بعده يعني 7 يصير 8 ........الخ واسماء مربعات التحرير والسرد هي كالتالي p11 - p12 - m11 - m12 - b11 - b12 - f11 - f12 يمكن عمل ذلك عن طريق استخدام الدالة Dmax وتجد شرح مفصل لها هنا بقسم خلاصة مشاركات الأكسس اضغط هنا -------------------------------------------------------- ويتم تطبيق ذلك عند وضع الكود التالي عند حدث زر الامر mix = DMax("[الاسم]", "aa", "[الاسم] = forms!mana!p11 or [الاسم] = forms!mana!p12 or [الاسم] = forms!mana!m11 or [الاسم] = forms!mana!m12 or [الاسم] = forms!mana!b11 or [الاسم] = forms!mana!b12 or [الاسم] = forms!mana!f11 or [الاسم] = forms!mana!f12") -------------------------------------------------------- بالنسبة للسؤال الثاني ... تم وضعه بمشاركة مستقلة منعاً لتداخل الأسئلة اضغط هنا
    1 point
×
×
  • اضف...

Important Information