اذهب الي المحتوي

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


Popular Content

Showing content with the highest reputation since 16 يون, 2018 in all areas

  1. 4 points
    وعليكم السلام انزلت مرفق اخي kanory مما شجعني على الرد ، بنفس طريقته تقريبا ، ولكن بكود مختلف ومختزل Private Sub cmd_Go_Click() Dim rst As DAO.Recordset Dim rst2 As DAO.Recordset Dim db As DAO.Database Dim RC As Integer Dim i As Integer Dim j As Integer Dim x() As String Set db = CurrentDb db.Execute ("Delete * From tbl_temp") Set rst2 = db.OpenRecordset("Select * From tbl_temp") Set rst = db.OpenRecordset("Select * From Table1 Where [mawad] is not null") rst.MoveLast: rst.MoveFirst RC = rst.RecordCount For i = 1 To RC x = Split(rst!mawad, "/") For j = LBound(x) To UBound(x) rst2.AddNew rst2!mawad = x(j) rst2.Update Next j rst.MoveNext Next i rst.Close: Set rst = Nothing rst2.Close: Set rst2 = Nothing db.Close DoCmd.OpenQuery "qry_Statistics" End Sub جعفر 932.count_.mdb.zip
  2. 4 points
    والآن اجيب على اسئلتك: 1. هناك نوعين من Recordset ، نوع يخص DAO وآخر يخص ADO ، ومع تشابههما ، إلا ان هناك الكثير من الاوامر التي تختلف بينهم ، فإذا لم نخصص نوع الـ Recordset ، فالاكسس يستعمل مكتبة الاولى في القائمة ، مثلا ، في الصور التالية ، مكتبة ADO قبل مكتبة DAO ، فعند كتابة Recordset فقط ، فالاكسس يعتبرها تابعه لـ ADO: في الاكسس 2003 . وفي الاكسس 2010 فما فوق تم دمج مكتبة DAO في MS Office 14 Access Database engine object . 2. هذا امر OpenRecordset ، فيه عدة اختيارات ، والمبرمج اختار هذه لأسبابه ، ويمكنك الاستغناء عن الجزئين الاخيرين منها ، حيث هذا يكفي: (Set rst = db.OpenRecordset(strSQL . 3. المؤشر في سجلات Recordset يكون كما في القائمة التالية: BOF Record1 Record2 .. .. EOF حيث BOF = Begining Of File EOF = End Of File فإذا كنا على BOF او EOF فلا يوجد هناك سجلات ، فالسطر معناه ، اننا مادمنا لسنا قبل بداية ولا بعد نهاية الـ Recordset ، فقم بالخطوة التالية ، 4. انتقل الى اول سجل تصادفه (رجاء متابعة النقطة التالية) ، 5. اذا اردنا ان نجعل الـ Recordset بالكامل في ذاكرة الكمبيوتر ، فعلينا ان نأخذ المؤشر الى آخر سجل ، ثم عندما نأخذ المؤشر الى اول سجل ، فيعرف البرنامج عدد سجلات هذا الـ Recordset ، بينما في الرقم#4 اعلاه ، فنحن طلبنا منه البدء من اول سطر وبدون معرفة عدد السجلات ، والنقطتين معناها سطر جديد في الكود ، يعني: بدل كتابة For i = 1 To RC childrst.Delete childrst.MoveNext Next i يمكننا كتابة For i = 1 To RC: childrst.Delete : childrst.MoveNext : Next i . ولكننا اذا عملنا هذا الشيء لكل الكود ، فلن نعرف كيف نتصيد الخطأ ، ولا نستطيع استعمال Goto ، فنحن نستعمله في نطاق نعمل انه لن تكون لدينا اخطاء فيه جعفر
  3. 4 points
    وعليكم السلام وبعد التحية والسلام على اخوي محمد سلامة وشفان تستطيع استعمال طريقتي في اي مكان كان ، وحتى في وحدة نمطية مستقله ، مثلا: public function Check_Records() dim rst as dao.recordset dim RC as integet set rst=currentdb.openrecordset("Select * From Table_Name") rst.movelast:rst.movefirst:RC=rst.recordcount if RC=>10000 then هنا تكتب ما تريد من الاوامر لوقف البرنامج endif end function . اما مثال اخوي شفان ، فيكون في النموذج فقط (هكذا بعد التعديل ، لكي تحصل على عدد السجلات الصحيح) Private Sub Form_Current() Me.RecordsetClone.movelast If Me.RecordsetClone.RecordCount >= 10 Then ' Me.Names.Enabled = False ' Me.ID.Enabled = False ' Me.PhoneNumber.Enabled = False Me.Form.AllowAdditions = False Else ' Me.Names.Enabled = true ' Me.ID.Enabled = true ' Me.PhoneNumber.Enabled = true Me.Form.AllowAdditions = True End If End Sub جعفر
  4. 4 points
    السلام علكم ورحمة الله وبركاتة بمناسبة العودة الميمونة لاستاذي ومعلمي القدير الاستاذجعفر @jjafferr اقدم لكم هذه الهدية المتواضعه جدا تطبيق نظام الصلاحيات على ازرار التحكم نظام صلاحيات المستخدمين يقوم بالتحكم في صلاحيات المستخدم من حيث الاضافة والتعديل والحذف لكن عند تنفيذ احد هذه الاوامر عن طريق زر تحكم فأنه يتم تنفيذه دون الرجوع او الاتصال بالوحدات النمطية الخاصة بتطبيق نظام الصلاحيات لذا رأيت عمل هذاتعديل غلى نظام صلاحيات المستخدمين الذي قام بعمله الاستاذ مهند عبادي اذا لم تخذلني الذاكرة وقام بتطويره عدد من الاساتذة نسحه بعد نسخه قمت باضافة بعض الاكواد على ازرار التحكم والتي يمكن من خلالها تطبيق نظام الصلاحيات للمستخدمين على ازرار التحكم عن طريق الاتصال بالوحدة النمطية قبل تنفيذ الامر للتأكد من وجود صلاحية للاجراء المطلوب تنفيذه مثلا اذا كان المطلوب اضافة سجل عند التركيز على زر الامر يتم الاتصال بالوحدة النمطية للتأكد هل المستخدم لديه صلاحية اضافة سجلات اذا كان نعم يتم تنفيذ الامر واذا كان لا فيتم اظهار رسالة تفيده بأنه ليست لديه صلاحية لهذا الاجراء يوجد ايضا بالامثال بعض الاكواد لتأمين و الغاء تأمين الحقول دفعة واحدة اترككم مع المثال اترككم مع المثال اسم المستخدم لمسؤول النظام : 1 الباسورد:1 اسم المستخدم: 100 الباسورد: 100 Usrse.rar
  5. 3 points
    اخي @نادر نادر1 انظر للمرفق هل هذا ما تريد Ka_date.mdb علما أن الروابط في الموقع المذكور تعمل بشكل جيد والشرح فيه أكثر من رائع
  6. 3 points
    اخي @نادر نادر1 المعذرة المطلوب غير مفهوم ... فهم السؤال نصف الاجابة
  7. 3 points
    حياك الله اذا نظرت في مشاركة ام ناصر الثانية ، انظر في الكود ، فسترى انها وضعت هذه الارقام ، فأعتقدت بأنها تسأل عنها ، فأجبتها جعفر
  8. 3 points
    وعليكم السلام أخي @ali2017 هل هذا هوطلبك Ka_count.mdb
  9. 3 points
    وعليكم السلام ضعي هذا الكود على زر: Dim strSQL As String Dim rst As DAO.Recordset Dim childrst As DAO.Recordset Dim db As DAO.Database Dim RC As Integer Dim i As Integer 'from https://stackoverflow.com/a/42239279 strSQL = "SELECT * FROM Table1 WHERE Not (Table1.image.FileData) Is Null;" Set db = CurrentDb Set rst = db.OpenRecordset(strSQL, dbOpenDynaset, dbSeeChanges) If Not rst.BOF And Not rst.EOF Then rst.MoveFirst End If Do Until rst.EOF Set childrst = rst.Fields("image").Value childrst.MoveLast: childrst.MoveFirst RC = childrst.RecordCount For i = 1 To RC 'Debug.Print rst!ID & " > " & childrst.Fields("FileName") 'If childrst.Fields("FileName") = "11.jpg" Then childrst.Delete 'End If childrst.MoveNext Next i rst.MoveNext Loop . جعفر
  10. 3 points
    ,تفضل أخي @Elsayed Bn Gemy مرفق البحث.accdb
  11. 3 points
    وعليكم السلام تفضل ، جرب هذا التعديل: Private Sub cmd_Do_The_Changes_Click() 'make Reference to Microsoft DAO x.xx Object Library Dim rst As DAO.Recordset Dim biggest_Number As Long Dim i As Integer Dim j As Integer Dim RC As Integer Dim Multiply_by As String biggest_Number = Len(DMax("[ID]", "Data")) 'what number to multiply with Multiply_by = 1 For i = 1 To biggest_Number Multiply_by = Multiply_by & "0" Next i 'we have to do this in two steps: '1 based on the Biggest Number, lets multiply it by 10, so that No number id duplicated '2 then Seq based on the required Seq '1 Set rst = CurrentDb.OpenRecordset("Select * From Data") rst.MoveLast: rst.MoveFirst RC = rst.RecordCount For i = 1 To RC 'change the existing numbers to BIGGER NUMBERS rst.edit rst!ID = rst!ID * Val(Multiply_by) rst.Update rst.MoveNext Next i '2 rst.MoveFirst For i = 0 To RC - 1 'change the BIGGER NUMBERS to the new Seq rst.edit rst!ID = Me.int_Start + i rst.Update rst.MoveNext Next i rst.Close: Set rst = Nothing MsgBox "Done" End Sub جعفر 927.1.Access2.accdb.zip
  12. 3 points
    وعليكم السلام رجاء اخذ نسخة اضافية من بياناتك قبل العمل الطريقة التي عملتها هي: تغيير الارقام الى ارقام كبيرة غير موجوده في القائمة ، ثم تغيير الارقام الى التسلسل المطلوب تفضل . والكود خلف الزر: Private Sub cmd_Do_The_Changes_Click() 'make Reference to Microsoft DAO x.xx Object Library Dim rst As DAO.Recordset Dim biggest_Number As Long Dim i As Integer Dim j As Integer Dim RC As Integer Dim Multiply_by As String biggest_Number = Len(DMax("[ID]", "Data")) 'we have to do this in two steps: '1 based on the Biggest Number, lets multiply it by 10, so that No number id duplicated '2 then Seq based on the required Seq '1 Set rst = CurrentDb.OpenRecordset("Select * From Data") rst.MoveLast: rst.MoveFirst RC = rst.RecordCount For i = 1 To RC 'what number to multiply with Multiply_by = 1 For j = 1 To biggest_Number - Len(rst!ID) Multiply_by = Multiply_by & "0" Next j 'change the existing numbers to BIGGER NUMBERS rst.edit rst!ID = rst!ID * Val(Multiply_by) rst.Update rst.MoveNext Next i '2 rst.MoveFirst For i = 0 To RC - 1 'change the BIGGER NUMBERS to the new Seq rst.edit rst!ID = Me.int_Start + i rst.Update rst.MoveNext Next i rst.Close: Set rst = Nothing MsgBox "Done" End Sub . وبسبب وجود علاقة بين الجدولين Data و tell عن طريق الحقل ID ، فلما الكود يغير قيمة الحقل ID في الجدول Data ، فتلقائيا نجد ان القيمة قد تغيرت في الحقل ID في الجدول tell . جعفر 927.Access.accdb.zip
  13. 3 points
    حيا الله اخوي شفان الامر Recordset او Recordsetclone هما من عائلة DAO ، فإذا طلبت عدد السجلات مباشرة ، فستحصل على 0 (اي لا سجلات) ، او رقم (ولكن ليس عدد السجلات الصحيح) ، بينما اذا كان عندنا عدد كبير من السجلات ، فاكسس لا يجلب جميع هذه السجلات الى النموذج ، والامر RecordCount. كذلك لا يجلب عدد هذه السجلات ، والسبب ان اكسس يعرض لك عدد معين من السجلات بسرعة وبإستخدام ذاكرة اقل ، واذا اردت الحصول على عدد السجلات الصحيح ، فيجب ان تستخدم MoveLast قبل استعمال RecordCount جعفر
  14. 3 points
    اتفضل اليك مثال على ذلك بطريقة اخرى Private Sub Form_Current() If Me.RecordsetClone.RecordCount >= 10 Then ' Me.Names.Enabled = False ' Me.ID.Enabled = False ' Me.PhoneNumber.Enabled = False Me.Form.AllowAdditions = False Else ' Me.Names.Enabled = true ' Me.ID.Enabled = true ' Me.PhoneNumber.Enabled = true Me.Form.AllowAdditions = True End If End Sub فقط استقبال 10 سجلات في النموذج.accdb
  15. 3 points
    السلام عليكم ومشاركة مع استاذي جعفر يمكن وضعه في حدث الحالي.. او علي حسب طريقة عمل النموذج تحياتي
  16. 3 points
    وعليكم السلام اقدر اعملها بطريقتين: الاولى: عن طريق نموذج كائن نموذج فرعي (هو نموذج فرعي لا يوجد به نموذج) . حيث نعامل كل شيء في هذا الكائن كأنه نموذج فرعي ، عليه ، فأول مرة نفتح النموذج ، نضع فيه نموذج الازرار: Private Sub Form_Load() Rem===== DoCmd.Maximize Me.sfrm.SourceObject = "frm_1" End Sub . وعند النقر على زر-هيكلية المدرسة ، نفتح النموذج Form100 هكذا: Private Sub ComdIntOrg_Click() 'Call ActiveCommand Me.Parent!sfrm.SourceObject = "Form100" End Sub . يعني : بدل استعمال الكود التالي لفتح النموذج docmd.openform "Forms100" نستعمل Me.Parent!sfrm.SourceObject = "Forms100" . وبما ان هذه الطريقة غير مألوفة ، فيحتاج لك تمرين الى ان تأخذ يدك عليه المرفق فيه مثال. الطريقة الثانية: استعمل الكود التالي لفتح كل نموذج: docmd.openform "Form100" DoCmd.MoveSize 1440, 2400, 2000, 2000 والامر عبارة عن حجم النموذج ومكانه DoCmd.MoveSize(Right, Down, Width, Height) . والارقام هذه بمقياس twips c1 cm = 567 twips c1 in = 1440 twips المشكلة في هذه الطريقة هو معرفة حجم شاشة/شاشات الزبون وتحديد المكان على اساسها جعفر 915.Aziz.accdb.zip
  17. 3 points
    السلام عليكم من باب المشاركة فقط ردا علي أخونا khalid2117 السنة الكبيسة ليست بصفة عامة صحيح تقبل القسمة علي 4 لكن لها استثناء إن كانت تقبل القسمة علي 100 ، مثلا 2100 - 2200 - 2300 كلها سنوات بسيطة ، فبراير بها 28 يوم وليس 29 وهذا الاستثناء له استثناء وهي السنوات تقبل القسمة علي 400 فهي كبيسة أي أن فبراير بها 29 مثل 2400 - 2800 ويرجع هذا إلي أن السنة بالضبط لاتساوي 365.25 يوم كما هو شائع بل إنها 365.2422
  18. 2 points
    وعليكم السلام وبتغيير بسيط على الكود: نصل الى: Private Sub cmd_Go_Click() Dim rst As DAO.Recordset Dim rst2 As DAO.Recordset Dim db As DAO.Database Dim RC As Integer Dim i As Integer Dim j As Integer Set db = CurrentDb db.Execute ("Delete * From bayan1") Set rst2 = db.OpenRecordset("Select * From bayan1") Set rst = db.OpenRecordset("Select * From bayan") rst.MoveLast: rst.MoveFirst RC = rst.RecordCount For i = 1 To RC For j = 0 To rst.Fields.Count - 1 If Len(rst.Fields(j).Value & "") = 0 Then GoTo Next_j rst2.AddNew rst2!a1 = rst.Fields(j).Value rst2.Update Next_j: Next j rst.MoveNext Next i rst.Close: Set rst = Nothing rst2.Close: Set rst2 = Nothing db.Close End Sub جعفر
  19. 2 points
    يقولون لايفتى ومال في المدينة ما دام الاستاذ @jjafferr دخل على الموضوع فيجب علينا ان نصمت فكرتي عن الموضوع تتلخص بالتالي عندما سألت السؤال في مشاركتك الأولى كان يخطر في بالي نفس الحل الذي قدمه لك الاخ @AlwaZeeR وهو يعتمد نفس المبدأ الوقوف على كل سجل بالنموذج وبما ان هذه الطريقة لا تريدها دعنا نترك التعامل مع الحقل غير المنظم الموجود بالنموذج ونقوم ونتعامل معه مباشرة عن طريق الاستعلام لاستخلاص نفس النتيجة لذلك سنقوم بعمل جدول مؤقت بأسم Table1_Temp ونعمل زر أمر بالنموذج ونضع خلفه هذا الكود Private Sub cmd_Click() DoCmd.SetWarnings False DoCmd.RunSQL "DELETE Table1_Temp.* " & vbCrLf & _ "FROM Table1_Temp;" DoCmd.RunSQL "INSERT INTO Table1_Temp ( name11, frequency ) " & _ " SELECT Table1.name11, Count(Table1.ID) AS CountfromID " & _ " FROM Table1 LEFT JOIN Table1_Temp ON Table1.ID = Table1_Temp.ID " & _ " GROUP BY Table1.name11;" DoCmd.RunSQL "UPDATE Table1 INNER JOIN Table1_Temp ON Table1.name11" & _ "= Table1_Temp.name11 SET Table1.frequency = [Table1_Temp]![frequency];" Me.Refresh End Sub ::بالتوفيق:: إذا كنت ترى أن هذه المشاركة مفيدة فلا تنسى التقيم Database88-906.rar
  20. 2 points
    السلام عليكم ورحمة الله اكتب الكود الاول فى موديول عادى اما الكود الثانى فضعه فى حدث ولرقة العمل Sub SortData() Range("C2:E" & Range("D" & Rows.Count).End(xlUp).Row).Sort key1:=Range("E2"), _ order1:=xlDescending, key2:=Range("D2"), order2:=xlAscending End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 5 Then Call SortData End If End Sub
  21. 2 points
  22. 2 points
    وعليكم السلام اخوي حمدي النموذج الفرعي subfrmTimeTable يأخذ بياناته من الجدول Ashgal ، واللي الكود ادخل بياناته ، فإذا الكود لم يُدخل البيانات الصحيحة ، فأكيد النتيجة لن تكون صحيحة!! يتطلب الامر النظر في كود التوزيع ، وانا لا علم لي بهذا الكود ، فيجب الرجوع الى مصدر الكود الاصل والذي يعمل بطريقة صحيحة في برنامج/بيانات اخرى ، ومن ثم يمكننا تغييره ليناسب بياناتك جعفر
  23. 2 points
    وعليكم السلام تفضل جعفر 912.كفالة.accdb.zip
  24. 2 points
    كل عام أنتم بخير تفضل المطلوب ملحوظة يجب عدم مسح أو حذف الخلايا التي بها بيانات وموجودة في الجزء المظلل كل ما عليك تشغيل الماكرو المسمى بفرز ملحوظة 2 عمود A المسلسل خارج الفرز بمعنى سيكون رقم المسلسل كما هو حتى لا يعاد ترتيب المسلسل مرة أخرى شئون عاملين تحت التعديل.rar
  25. 2 points
    الافضل تضعه على الشاشة الرئيسية enter face حدث عند التحميل on load ليظهر لك بمجرد فتح البرنامج ... او تقوم بالتالي عمل استعلام يكون فيه حقل المدة المتبقية = تاريخ الاستحقاق - تاريخ اليوم وتضع فيه معيار اقل من 10 اي ان المدة المتبقية اقل من 10 ايام على ان يحتوي الاستعلام على اسم العميل و المبلغ المستحق و المدة المتبقية وتضع ماكرو اجرائي يقوم بفتح الاستعلام او النموذج المبني على الاستعلام عند الفتح او التحميل في الشاشة الرئيسية ليظهر لك كافة العملاء الذين اقترب ميعاد سدادهم للكمبيالات او الشيكات المستحقة


×