اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

jjafferr

أوفيسنا
  • Posts

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

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

  • Days Won

    404

كل منشورات العضو jjafferr

  1. طبعا ، الجدول عندك في البرنامج ، واضف ما احببت 1. لوسمحت تعدل في البرنامج ، وتعطيني مثال ، لأن جلب التاريخ بين التواريخ لن يكون سهلا بدون دقة في المعطيات ، وعلى اساس المثال او المثالين (واحد بين تاريخين ، والاخر كل الايام بدون تحديد تواريخ للبداية والنهاية (لازم افهم هذه من مثال واضح لوسمحت) ، 2. تمام جعفر
  2. السلام عليكم وحتى يكتمل الموضوع ، اخذت جزئية من احد برامجي ، وهي لحساب السنه والشهر واليوم ، يعني الحساب بالكامل . وهكذا ننادي الوحدة النمطية . والنتيجة . والوحدة النمطية Public Function YMDDif2(sDate1, sDate2) 'Public Function YMDDif2(sDate1, sDate2, Cont_Type, Res_Date) On Error GoTo err_YMDDif2 'sDate1 earliest date 'sDate2 later date 'Cont_Type = Contract Type 'Res_Date = Resignation Date Dim dInterim1 As Date ' If Cont_Type = "استقالة" Or Cont_Type = "متقاعد" Then ' sDate2 = Res_Date ' End If iMonth = DateDiff("m", sDate1, sDate2) If Day(sDate1) > Day(sDate2) Then iMonth = iMonth - 1 End If dInterim1 = DateAdd("m", iMonth, sDate1) iDay = DateDiff("d", dInterim1, sDate2) D = iDay M = iMonth Mod 12 Y = iMonth \ 12 YMDDif2 = CStr(Y) & " س/" & CStr(M) & " ش/" & CStr(D) & " ي" Exit Function err_YMDDif2: If Err.Number = 94 Then 'ignor, null Resume Next Else MsgBox Err.Number & vbCrLf & Err.Description End If End Function . جعفر 473.2.db.mdb.zip
  3. وعليكم السلام الرابط التالي فيه طريقة وكود لتغيير الصور في جميع النماذج/التقارير ، من مضمنه الى مرتبطة ، . وبتغيير بسيط تستطيع ان تغيره الى طلبك ، ولاحظ ان نوع الخط الجديد هو "Andalus" في المثال Function Convert_img_Embed_to_Link() Dim frm As AccessObject Dim rpt As AccessObject Dim dbs As Object Dim frm1 As Access.Form Dim rpt1 As Access.Report Dim ctl As Access.Control Set dbs = Application.CurrentProject For Each frm In dbs.AllForms DoCmd.OpenForm frm.Name, acDesign Set frm1 = Forms(frm.Name) For Each ctl In frm1.Controls If ctl.ControlType = acComboBox Or _ ctl.ControlType = acCommandButton Or _ ctl.ControlType = acLabel Or _ ctl.ControlType = acListBox Or _ ctl.ControlType = acOptionButton Or _ ctl.ControlType = acTextBox Then Debug.Print frm.Name & " > " & ctl.ControlType & " > " & ctl.Name ctl.FontName = "Andalus" If frm1.DefaultView = 2 Then frm1.DatasheetFontName = "Andalus" 'DataSheetForms End If End If Next ctl DoCmd.Close acForm, frm.Name, acSaveYes Next frm Exit Function For Each rpt In dbs.AllReports DoCmd.OpenReport rpt.Name, acDesign Set rpt1 = Reports(rpt.Name) For Each ctl In rpt1.Controls If ctl.ControlType = acComboBox Or _ ctl.ControlType = acCommandButton Or _ ctl.ControlType = acLabel Or _ ctl.ControlType = acListBox Or _ ctl.ControlType = acOptionButton Or _ ctl.ControlType = acTextBox Then Debug.Print rpt.Name & " > " & ctl.ControlType & " > " & ctl.Name ctl.FontName = "Andalus" If rpt1.DefaultView = 2 Then frm1.DatasheetFontName = "Andalus" End If End If Next ctl DoCmd.Close acReport, rpt.Name, acSaveYes Next rpt End Function جعفر
  4. وعليكم السلام طبعا كمية البيانات لها دور في سرعة اداء الكمبيوتر ، بالاضافة الى ذلك ، اننا عملنا حقل في كل من الاستعلامين ، وربطنا الاستعلامين بهذين الحقلين ، وهذين الحقلين ليسا مفهرسين !! الاقتراح الذي قد يساعد في سرعة البرنامج ، واكيد سيحل مشكلة qry_Union هو ان نغير عمل الاستعلامين: 1. بالنسبة الى الاستعلام الاول (ولا يهم ايهم) ، غيّره الى "استعلام عمل جدول" ، بحيث نتائجه ستحفظ في هذا الجدول الجديد ، ولنسميه tbl_all ، 2. والاستعلام الاخر غيّره الى استعلام "الحاق" ، وتُلحق البيانات الى نفس الجدول الجديد tbl_all ، 3. بهذه الطريقة لن نحتاج الى qry_Union ، واجعل الاستعلام qry_Results يأخذ بياناته من الجدول tbl_all جعفر
  5. لازلت في انتظار الجواب على السؤال اعلاه ، لأنه سيفيدنا في جلب التاريخ الناقص في التقرير (انظر المربع الاحمر في الصورة الاخيرة): الاستعلام التالي تم اخذه من التقرير rpt_Follow4 وتحويله من SQL الى استعلام . ونتائجه 32 سجل . جلبت احد الجداول التي استعملها في الكثير من برامج ، tbl_Months ، وفيه ايام الاسبوع حسب ترقيمهم في الكود . عملت استعلام جديد فيه جميع ايام الاسبوع (ما عدا الجمعة والسبت والسجلات الفاضية) ، ولجلب eSIS من tbl_Follow4 ، وبما اننا سنحتاج الى الاسم ايضا ، فاضطررنا لإستخدام الجدول StudentNames . والنتيجة فيها الايام التي نريدها (الايام التي لا يكون فيها الطالب غائب او متأخر) ، لاحظ عندنا 35 سجل . والان الى الاستعلام الذي سيربط الاستعلامات السابقة ، ولاحظ العلاقة بين الاستعلامات . ونتيجته ، ورجاء الملاحظة اننا من الان سنعتمد على الحقل eSIS وليس IDnum في التقرير . والان نحن بحاجة الى تعديل في التقرير قليلا ليتماشى مع المتغيرات . والنتيجة النهائية للتقرير ، وستلاحظ ان التاريخ غير موجود (طبعا غير موجود ، لأن البرنامج يسجل تاريخ الغياب و التأخير) ، فاذا اردنا الحصول على هذا التاريخ ، فيجب الاجابة على سؤالي في المشاركة السابقة . جعفر 459.1.AbsentLate 2016.accdb.zip
  6. بالنسبة الى ثانيا ، فعندي سؤال: كيف ستطبع التقرير ، هل سيكون بين تاريخين اسبوعيا ، او بين تاريخين شهريا؟ لأن الفكرة التي عندي هي ادخال الايام كلها في التقرير يدويا ، ثم عن طريق الكود ندخل البيانات لليوم الصحيح ، وهذا يعتمد على اجابتك لسؤالي اعلاه جعفر
  7. وعليكم السلام أستاذ علي بالنسبة الى اولا: المفروض ان النموذج الرئيسي يكون غير مضمن وغير مربوط مع الجدول tbl_Follow4 ، لانك لا تستخدمه لإدخال/استخراج بيانات ، لذا احذف اسم الجدول كمصدر للسجلات: . والسبب الاساسي في عمل سجل فاضي ، هو ادخالك معلومة في الحقل Grade في الجدول ، والمعلومة هي "" اي لا شئ ، اي انك حولت الحقل من Null الى Nothing بينما اسم الحقل الذي يجب ان يكون في الكود هو sGrade مثل sSection . جعفر
  8. شكرا اخي شيفان وهذه نتيجة عمل برنامج اخي شيفان جعفر
  9. وعليكم السلام همم ، طيب ايش رايك في هذين الرابطين: و جعفر
  10. هلا والله وهاي الكود الكامل بالتعديلات: Private Sub cmd1_Click() 'التاكد ان الحقول المطلوبة تم اختيارها في النموذج If Len(Me.StarteDate & "") = 0 Then MsgBox "رجاء ادخال تاريخ البداية" Me.StarteDate.SetFocus Exit Sub ElseIf Len(Me.EndDate & "") = 0 Then MsgBox "رجاء ادخال تاريخ النهاية" Me.EndDate.SetFocus Exit Sub ElseIf (Len(Me.iSunday & "") = 0 Or Me.iSunday = 0) And _ (Len(Me.iMonday & "") = 0 Or Me.iMonday = 0) And _ (Len(Me.iTuesday & "") = 0 Or Me.iTuesday = 0) And _ (Len(Me.iWednesday & "") = 0 Or Me.iWednesday = 0) And _ (Len(Me.iThursday & "") = 0 Or Me.iThursday = 0) Then MsgBox "رجاء الاختيار من ايام التدريب" Exit Sub End If Dim rst As DAO.Recordset Set rst = CurrentDb.OpenRecordset("Select * From Tbl_2") 'عدد الايام بين يومي البداية والنهاية How_Many_Days = UmDateDiff("d", Me.StarteDate, Me.EndDate) For i = 0 To How_Many_Days Next_Date = UmDateAdd("d", i, Me.StarteDate) 'التاريخ الهجري التالي Next_Day2 = UmWeekDayName(UmWeekday(Next_Date)) 'اليوم التالي Next_Day = UmWeekday(Next_Date) 'اليوم التالي بالرقم Next_Date = UmFormat(Next_Date, "yyyy/mm/dd") 'تغيير تنسيق التاريخ 'Debug.Print Next_Day & "-" & Next_Day2 'MsgBox Next_Date & " " & Next_Day add_Day = "" 'اذا تم اختيار اليم في النموذج ، ما هو اليوم If Me.iSunday = -1 And Next_Day = 1 Then add_Day = "الاحد" '"Sunday" ElseIf Me.iMonday = -1 And Next_Day = 2 Then add_Day = "الاثنين" '"Monday" ElseIf Me.iTuesday = -1 And Next_Day = 3 Then add_Day = "الثلاثاء" '"Tuesday" ElseIf Me.iWednesday = -1 And Next_Day = 4 Then add_Day = "الاربعاء" '"Wednesday" ElseIf Me.iThursday = -1 And Next_Day = 5 Then add_Day = "الخميس" '"Thursday" End If 'لدينا تاريخ يجب ادخاله If add_Day <> "" Then 'ولكن هل تم ادخال هذا التاريخ سابقا لهذا PCDigit rst.FindFirst "[PcDigit]=" & Me.PcDigit & " And [TDate] ='" & Next_Date & "'" If rst.NoMatch Then 'غير موجود rst.AddNew rst!TDate = Next_Date: rst!TDay = add_Day: rst!PcDigit = Me.PcDigit: rst!auto_id = Me.auto_id rst.Update Else 'موجود MsgBox "الموظف رقم " & Me.PcDigit & vbCrLf & _ "يوجد لديه تدريب سابق يوم " & add_Day & vbCrLf & _ "بتاريخ " & Next_Date & vbCrLf & vbCrLf & _ "هذا التاريخ لم يتم ادخاله مرة اخرى" End If End If Next i rst.Close: Set rst = Nothing End Sub وهاي المرفق النهائي جعفر 471.tdate.mdb.zip
  11. تفضل استعمل هذا السطر بدل اللي في الكود: For i = 0 To How_Many_Days يعني استعملنا الصفر بدل الواحد. جعفر
  12. تفضل اضف السطر الرابع للكود ، وفي هذا المكان المحدد Next_Date = UmDateAdd("d", i, Me.StarteDate) 'التاريخ الهجري التالي Next_Day2 = UmWeekDayName(UmWeekday(Next_Date)) 'اليوم التالي Next_Day = UmWeekday(Next_Date) 'اليوم التالي بالرقم Next_Date = UmFormat(Next_Date, "yyyy/mm/dd") 'تغيير تنسيق التاريخ جعفر
  13. لا والله ما نسيت ، ولكني انشغلت بمواضيع المنتدى ومحاولة مساعدة الباقين
  14. حياك الله 1. الكود يأخذ اي تاريخ هجري (والكود الذي وضعته انت اصلا يخص ام القرى) ، فما في مشكلة ، 2. اعمل نموذج على اساس الجدول Tbl_2 ، وتستطيع ان تغير فيه كما تشاء ، 3. في تنسيق التاريخ لحقل التاريخ ، انت ادخلته كـ dd/mm/yyyy ، والذي يجب ان تعمله هو yyyy/mm/dd ، هذا اذا اردت الرقم 1 يكون 01 (اي رقمين ، وانا انصحك بهذا ، حيث لن تتعب في الفرز) ، بينما اذا اردت التنسيق رقم واحد مثل ما اشرت في مثالك ، فالتنسيق سيكون yyyy/m/d جعفر
  15. طيب في طريقة اخرى: نعمل ملف mdb خارجي مؤقت في نفس مجلد البرنامج، ونصدر الكلمات اليه ، ونعمل في برنامجك استعلام يأخذ البيانات هذا من الملف الخارجي ، وبالطريقة هذه ، لن يكون هناك ضغط على برنامجك!! هل تصلح لك هذه الطريقة؟ جعفر
  16. أخي كاسر تم تغيير الكود بحيث لا يقرا اليوم ، وانما رقم اليوم في الكود ، فعليه ، المفروض ان يعمل البرنامج الان على جميع الاجهزة ، وهذا هو الكود المُعدل: Private Sub cmd1_Click() 'التاكد ان الحقول المطلوبة تم اختيارها في النموذج If Len(Me.StarteDate & "") = 0 Then MsgBox "رجاء ادخال تاريخ البداية" Me.StarteDate.SetFocus Exit Sub ElseIf Len(Me.EndDate & "") = 0 Then MsgBox "رجاء ادخال تاريخ النهاية" Me.EndDate.SetFocus Exit Sub ElseIf (Len(Me.iSunday & "") = 0 Or Me.iSunday = 0) And _ (Len(Me.iMonday & "") = 0 Or Me.iMonday = 0) And _ (Len(Me.iTuesday & "") = 0 Or Me.iTuesday = 0) And _ (Len(Me.iWednesday & "") = 0 Or Me.iWednesday = 0) And _ (Len(Me.iThursday & "") = 0 Or Me.iThursday = 0) Then MsgBox "رجاء الاختيار من ايام التدريب" Exit Sub End If Dim rst As DAO.Recordset Set rst = CurrentDb.OpenRecordset("Select * From Tbl_2") 'عدد الايام بين يومي البداية والنهاية How_Many_Days = UmDateDiff("d", Me.StarteDate, Me.EndDate) For i = 1 To How_Many_Days Next_Date = UmDateAdd("d", i, Me.StarteDate) 'التاريخ الهجري التالي Next_Day2 = UmWeekDayName(UmWeekday(Next_Date)) 'اليوم التالي Next_Day = UmWeekday(Next_Date) 'اليوم التالي بالرقم 'Debug.Print Next_Day & "-" & Next_Day2 'MsgBox Next_Date & " " & Next_Day add_Day = "" 'اذا تم اختيار اليم في النموذج ، ما هو اليوم If Me.iSunday = -1 And Next_Day = 1 Then add_Day = "الاحد" '"Sunday" ElseIf Me.iMonday = -1 And Next_Day = 2 Then add_Day = "الاثنين" '"Monday" ElseIf Me.iTuesday = -1 And Next_Day = 3 Then add_Day = "الثلاثاء" '"Tuesday" ElseIf Me.iWednesday = -1 And Next_Day = 4 Then add_Day = "الاربعاء" '"Wednesday" ElseIf Me.iThursday = -1 And Next_Day = 5 Then add_Day = "الخميس" '"Thursday" End If 'لدينا تاريخ يجب ادخاله If add_Day <> "" Then 'ولكن هل تم ادخال هذا التاريخ سابقا لهذا PCDigit rst.FindFirst "[PcDigit]=" & Me.PcDigit & " And [TDate] ='" & Next_Date & "'" If rst.NoMatch Then 'غير موجود rst.AddNew rst!TDate = Next_Date: rst!TDay = add_Day: rst!PcDigit = Me.PcDigit: rst!auto_id = Me.auto_id rst.Update Else 'موجود MsgBox "الموظف رقم " & Me.PcDigit & vbCrLf & _ "يوجد لديه تدريب سابق يوم " & add_Day & vbCrLf & _ "بتاريخ " & Next_Date & vbCrLf & vbCrLf & _ "هذا التاريخ لم يتم ادخاله مرة اخرى" End If End If Next i rst.Close: Set rst = Nothing End Sub جعفر 471.tdate.mdb.zip
  17. هل تريدين ان اصدر البيانات الى الاكسل؟ جعفر
  18. الحمدلله ، اهم شئ هو الدخول في الكود الشئ الذي يأتي على بالي الآن هو ، ان تنصيب الوندوز عندي انجليزي ، واعتقد عندك عربي ، لهذا السبب ايام الاسبوع قد تكون عندك بالعربي ، بينما هي عندي بالانجليزي ، لذا ، اضف السطر الثالث الى الكود : Next_Date = UmDateAdd("d", i, Me.StarteDate) 'التاريخ الهجري التالي Next_Day = UmWeekDayName(UmWeekday(Next_Date)) 'اليوم التالي debug.print Next_Day . ثم شغل النموذج واضغط على زر الحفظ ، ثم ادخل في الكود واضغط على Ctrl + G او انظر للصورة: . وانسخ لي الاسماء التي في المربع الاحمر الى الموقع لوسمحت ، فانا اشك انها بالعربية ، واريد الاسم بالضبط كما يراه الكمبيوتر جعفر
  19. الظاهر يا اختي اننا لا نتكلم عن نفس الشئ!! فقد قمت بعمل المطلوب في مشاركاتي السابقة ، ويوجد لديك جدول مؤقت اسمه Table2 ، فما عليك إلا ان تعملي استعلام منه واذا لم يكن هذا قصدك ، فاعتقد انه من الافضل ان اتوقف انا ، وان يواصل معك الاستاذ رمهان ، فقد ينظر للموضوع من وجهة نظر اخرى جعفر
  20. حياالله كاسر رجاء تتبع الخطوات هذه وتخبرني بالنتيجة تفصيلا: 1. اجعل النموذج في وضع التصميم ، ثم افتح اعدادات الزر "حفظ" ، ثم تبويب الحدث ، والمفروض ان ترى امام الحدث "On Click" الكلمات "[Event Procedure]" ، ثم انقر على الزر الصغير الذي به 3 نقاط (على يمين الصورة) ، هذا سوف يُدخلك في الكود: . 2. على العمود الذي يشير اليه السهم ، وبمحاذات الجملة التي تراها ، انقر بالفأرة اليسار على العمود ، فستلاحظ انه تم عمل نقطة في العمود (كما في الصورة) . 3. ارجع الى النموذج ، وقم بتشغيل النموذج ، واضغط على الزر "حفظ" . 4. سيأخذك البرنامج الى صفحة الكود ، وسترى التظليل الاصفر لنفس السطر الذي عملنا نقطة بجواره . 5. اضغط على الكيبورد على الزر F8 ثلاث مرات ، وسترى ان السطر الاصفر المظلل ذهب الى السطر ، كما اصبح في الصورة . 6. عند الضغط على الزر F8 مرة اخرى ، المفروض ان ترى النموذج وبه صورة الرسالة . رجاء تخبرني اذا كنت ترى ما ارى ، او ان كمبيوترك يرى ما لا ارى جعفر
  21. شكرا على الايضاح اختي للأسف لا يمكن هذا بدون حفظ البيانات ولو في جدول مؤقت ، او تصدير البيانات الى ملف txt مثلا ، او حتى csv بحث يتم قراءته بالاكسل. جعفر
  22. الآن تذكرت اخي قيصر ، الظاهر انك فقط اخذت الكود ووضعته في برنامجك !! فالزر في برنامجك السابق لم يكن يذهب للكود ، وانما كنت انت عملت عليه ماكرو ، فرجاء استعمل برنامجي كما هو ، واذا اشتغل ، سنتحدث عن كيفية اضافة الكود لبرنامجك جعفر
  23. الظاهر ان الكود عندك غير مفعّل !! هل تستخدم الاوفيس 2007 او 2010 لأول مرة على جهازك؟ هل لما تشغل البرنامج ، يظهر لك شريط اصفر تحت شريط الادوات في الاكسس: هذا معناه ان الاكسس في حالة حماية لكمبيوترك من هذا البرنامج ، وانه لا يجعل الكود يعمل ، لذلك ، اضغط على الزر في الشريط الاصفر ، وسيعمل البرنامج ان شاء الله اما اذا لم تكن هذه المشكلة ، فعد ، وسنحاول اشياء اخرى لا جعفر
×
×
  • اضف...

Important Information