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

د.كاف يار

الخبراء
  • Posts

    1681
  • تاريخ الانضمام

  • تاريخ اخر زياره

  • Days Won

    60

كل منشورات العضو د.كاف يار

  1. في ازرار الترحيل ضع التالي [YEAR] = Null
  2. اتفضل يا بوالحسن DoCmd.RunCommand acCmdSelectRecord DoCmd.RunCommand acCmdDeleteRecord On Error Resume Next If IsNull(Select3) Then a2.Visible = True MsgBox "يجب تمكين الحذف ", vbCritical + vbMsgBoxRight, "تنبيه" Exit Sub End If If Not IsNull(Select3) Then a2.Visible = False End If DoCmd.SetWarnings False DoCmd.RunCommand acCmdSelectRecord DoCmd.RunCommand acCmdDeleteRecord DoCmd.Requery DoCmd.SetWarnings True
  3. الجواب موجود في نفس الموضوع Select Case KeyAscii Case 48 To 57 KeyAscii = 0 Exit Sub End Select
  4. الغي كود التحديث الموجود في حدث عن الفتح في التقرير لأني وضعت الكود لك ضمن كود تصدير البيانات اتفضل التعديل 111School_It_0001.zip
  5. اخوي مسفر ايش اصدار الاوفيس الي تستخدمه حبيت اطلع على الملف لكن للأسف ما فتح معي
  6. ضع في القيمة الإفتراضية للحقل التالي =[YEAR] استبدل الكود الموجود في حقل رقم الفاتورة بعد التحديث بالكود التالي On Error Resume Next Dim varFilter As Variant varFilter = Null If Not IsNull(Me.txtsearch) Then varFilter = (varFilter) & "[iBill_Number] LIKE '" & Me.txtsearch & "'" End If If Not IsNull(Me.Combo97) Then varFilter = (varFilter + " AND ") & "[YEAR] =" & Me.Combo97 End If With Me.Form If Not IsNull(varFilter) Then .DataEntry = False .Filter = varFilter .FilterOn = True Else .DataEntry = True .FilterOn = False End If .Requery End With
  7. الصق الجملة التالية في نهاية الكود و هي تعمل على تحديث الصفحة DoCmd.Requery نفس الاجابة اعلاه هذا كود فقط للإضافة كتبته لكي تقرأه و تحاول فهمه لا اكثر
  8. لأن التعديل كان بعد اضافة البيانات دعنا نفكر سويا لماذا لم يتم تحديث البيانات رغم انك قمت بتعديل القيمة الإفتراضية للحقل؟؟ السبب لأن القيمة الإفتراضية توضع عند الإدخال الجديد فقط هذا بإختصار شديد جدا اذا البيانات السابقة يجب ان تحدث قم بإنشاء استعلام تحديث و هنا تكون المشكلة انتهت . نعم صحيح و بما انك قد سألت هذا السؤال اذا فقد بدءت في اول طريق صناعة الكود و مع الاستمرار بالإعتماد على مجهودك سوف تجد ان الموضوع بسيط من الخطأ ان تأخذ السمك و لا تتعلم اصطيادها و بما انك بدءت تقرأ الكود و تفكك اجزائه دعنا نجرب كود الإضافة و عليك ان تبدء بتجربته و ثم كود التحديث اذا هنا بدئنا ننتقل من عملية الاستعلام الجاهزة في الاكسس الى الأكود و العمل الاحترافي Dim db As DAO.Database Dim rs As DAO.Recordset ' فقط تضع اسم الجدول هنا Set rs = CurrentDb.OpenRecordset("table_name") ' هنا تقوم بوضع اسماء الأعماد و الحقول كما هو موضح ادناه rs.AddNew rs.Fields("Column_Name1") = [TextBpox1] rs.Fields("Column_Name2") = [TextBpox2] rs.Fields("Column_Name3") = [TextBpox3] rs.Update rs.Close Set rs = Nothing
  9. طيب اتفضل هذا الكود Dim VarDate As Date Dim enddate As Date Dim SFriday As Integer '=========== ضع حقول التاريخ هنا ========== VarDate = [حقل التاريخ الأول] enddate = [حقل التاريخ الثاني] '===================================== Do While VarDate < enddate VarDate = DateAdd("D", 1, VarDate) If Weekday(VarDate, 2) = vbFriday Then SFriday = SFriday + 1 End If Loop 'حقل النتيجة [TextBox1] = SFriday
  10. تفضل جميع العناصر تبدء من الأعلا و ليس من الأسفل اي ماهي المسافة التي تريدها من رأس النموذج الى الأسفل (1) سم مثلا [TextBox].Top = 1000 تفضل هذا المثال test.accdb
  11. تفضل هذه الطريقة من خلال حلقة تكرارية داخل نطاق تاريخين محددين Dim VarDate As Date Dim enddate As Date Dim SFriday, SSaturday As Integer -===================================== VarDate = #1/1/2022# enddate = #1/31/2022# -===================================== Do While VarDate < enddate VarDate = DateAdd("D", 1, VarDate) If Weekday(VarDate, 2) = vbFriday Then SFriday = SFriday + 1 End If If Weekday(VarDate, 2) = vbSaturday Then SSaturday = SSaturday + 1 End If Loop Dim msg As String msg = "عدد ايام (الجمعة) حسب التواريخ المدخلة" msg = (msg) & " : " & SFriday msg = (msg) & (vbNewLine) & "عدد ايام (السبت) حسب التواريخ المدخلة" msg = (msg) & " : " & SSaturday MsgBox msg, vbInformation + vbMsgBoxRight, "احتساب الأيام المحددة"
  12. استخدم استعلام الحذف او من خلال الجملة التالية Dim db As DAO.Database Dim rs As DAO.Recordset ' قم بتعديل جملة الاستعلام ادناه اضف اسم الجدول و اسم العمود Set rs = CurrentDb.OpenRecordset("SELECT * FROM table_name WHERE yaer=0") If Not rs.BOF And Not rs.EOF Then rs.MoveFirst While (Not rs.EOF) rs.Delete rs.MoveNext Wend End If rs.Close Set rs = Nothing
  13. خذ نفس القيمة الافتراضية في الاعلا و ضعها في الاسفل فقط في ازرار الترحيل اكتب اسم كل حقل و ضع بجواره Null [TextBox1]=Null
  14. تفضل [TextBox].Move (left,top,width,height)
  15. اتفضل يابوالحسن خذ نفس الكود في صفحة الادخال و ضيفه للصفحة 5555DATA14.zip
  16. اتفضل التعديل يابو الحسن 33DATA14.zip
  17. كيف راح يتصل بقاعدة البيانات اذا اختار الأول docmd.RunSQL ؟ لكن في الثاني راح يستخدم ActiveXObject("ADODB.Connection")
  18. ابو الحسن فيه اقتراح جدا جميل بالنسبة للإدخال اقترح عليك ان يكون في جدول رئيسي و جدول ترحيلات الرئيسي يتم عليه كل العمليات التعديل و كل الأمور الترحيلات مع الضغط على ازرار ترحيل تحفظ البيانات بيني و بينك مسافة يجب ان تقل لكي يكون الهدف واحد كثرة الشروط في البرنامج و كثرة الأكواد سوف تعاني منها مستقبلا لذا من الأفضل لك ان تقلل من استخدامك للكود قدر المستطاع ما لم افهمه حتى الأن ماهو سبب تمسكك برسلة الرقم مكرر هل تريد استخدام نفس الرقم لم اجد برامج محاسبية تقوم بتكرر ارقام القيود و لا ان تكون متاحة في جميع الأوقات بعد الترحيل العمليات المنطقية هي اساس نجاح اي برنامج لا تزعل مني يابو الحسن و احنا في شهر فضيل بس لابد انك ترجع و تعيد صياغة برنامجك لأنه في امور كثير غير منطقية فكر فيها راح تجد انها مستقبلا راح تسبب مشكلات كثير في البيانات خاصة مع ارقام الفواتير و التي جعلتها نصية و هذي بحد ذاتها مع كثرة الأرقام و الحروف تجعلك تجد صعوب في استخراج النتائج بسبب التشابه و المطابقة تعلمنا بأن اي برنامج او نظام هو عبارة عن سلسلة تكاملية لكن برنامج يفقد التكاملية بشكل كبير و سوف يجعله عرضة للعطب
  19. تم حل المشكلة DATA14.zip ياليت تشرح هذي بإختصار لأني مافهتها ايش الملطلوب بالتحديد هذا في اي نموذج بالضبط ؟؟ هل تقصد هذا
  20. نعم هناك فرق من ناحية اسلوب الإدخال و التعامل دعنا نتحدث بالأمثلة طلما ان تريد معرفة الإسلوب في البداية كلغة استعلام SQL فلن يتغيير بها شي هي نفسها سواء استخدمت الطرق التي ذكرتها ففي الخيار الأول سوف تقوم من ناحية اضافة البيانات الى الجدول بكتابة الكود بالطريقة التالية DoCmd.RunSQL "INSERT INTO table_name " & _ "(column1, column2,...)" & _ "VALUES (value1, value2,....)" هذا الإسلوب في الإدخال مجهد نوعا ما لأن مضطر لجعل القيم بجانب بعضها و عند الرغبة في التعديل سوف تجد نفسك مضطر لقرآة العبارة كاملة او ان تكون نظرة اكثرة دقة هذه مثلها مثل هذه العبارة Dim db As Database Dim sSQL As String Set db = CurrentDb sSQL = "INSERT INTO table_name " & _ "(column1, column2,...)" & _ "VALUES (value1, value2,....)" db.Execute sSQL الفرق بأن الأولى ستجد نفسك بحاجة الى تعطيل رسائل النظام المزعجة اما في هذه فلن تكون هنالك رسائل نظام مزجعة و لكن يبقى التعامل معها كما في السابق ما يمييز المبرمج المحترف ليس في طول الأكواد و كثرتها فكلما كان الكود مختصر سوف تجد سهولة في التعديل عليه مستقبلا و يكون اكثر مرونة لذا و من وجهة نظهر بأن تستخدم المصفوفات الطريقة المثلى التي قدمتها ما يكروسوفت فهي الأسرع و الأرتب جلب البيانات Dim db As DAO.Database Dim rs As DAO.Recordset ' جلب سطر او سطور حسب المطلوب افضل و اسرع Set rs = CurrentDb.OpenRecordset("SELECT * FROM table_name WHERE column_name = some_value") If Not rs.BOF Then rs.MoveFirst While (Not rs.EOF) [TextBox1] = rs.Fields(0) [TextBox2] = rs.Fields(1) rs.MoveNext Wend End If rs.Close Set rs = Nothing ======================================================================== اضافة البيانات Dim db As DAO.Database Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset("table_name") rs.AddNew rs.Fields(0) = [TextBox1] rs.Fields(1) = [TextBox2] rs.Fields(2) = [TextBox3] rs.Update rs.Close Set rs = Nothing ======================================================================== تعديل البيانات Dim db As DAO.Database Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset("SELECT * FROM table_name WHERE column_name = some_value") rs.Edit rs.Fields(0) = [TextBox1] rs.Fields(1) = [TextBox2] rs.Fields(2) = [TextBox3] rs.Update rs.Close Set rs = Nothing بالنسبة لهذه النقطة فالخيار الثاني هو الافضل لك بلا منازع و دائما تجب الاتصال المستمر بقاعدة البيانت اتصال يكون عند الحاجة فقط ( اضافة \ حذف \ تحديث \ استدعاء سطور محددة حسب الحاجة )
  21. هذا الموضوع انتهينا منه سابقا يابو الحسن ارجع للملفات السابقة هذي انا ولا قربت منها كل الي سويته اضفت مربع نص و داخله تعبير خوارزم يعني ما راح يأثر على اي شي في رأي لابد ترجع ترتب برنامج من خلال المشاركات السابقة و بعدها احذف كل النسخ الي موجودة عندك عشان لا يحصل تضارب بالنسبة لكود البحث ما لاحظت فيه اي مشكلة
  22. الآن فهمت انك تحتاج توليد الرقم داخل نطاق الرقمين اتفضل التعديل توليد رقم عشوائي.accdb
  23. جرب هذا التعديل توليد رقم عشوائي.accdb
  24. جرب استخدمها بدون تكبير للأرقام مثلا متسلسلة Int(Rnd()) + 1
×
×
  • اضف...

Important Information