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

jjafferr

أوفيسنا
  • Posts

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

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

  • Days Won

    415

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

  1. تفضل 🙂 وغير MMMM الى اسم حقل الشهر DLookup("[Months_Number]", "tbl_Months", "[Months_Iraqi]='" & [MMMM] & "'") جعفر
  2. بسم الله عليك وما تشوف شر ان شاء الله 🙂 وان شاء الله، الله يدفع عنك البلاء بهذه الصدقة التي تصدقت بها للجميع 🙂 جعفر
  3. وعليكم السلام 🙂 تفضل: Dim strSQL As String Dim intHow_Many As Integer مشكلة اكثر من معيار ، هي الطريقة الصحيحة في كتابة الصيغة لذلك، خلينا نتعامل مع حقل واحد كل مرة، لنتفادى الخطأ strSQL = "[KararNom]='" & Me.KararNom & "'" 'نعمل اول معيار في المتغير strSQL strSQL = strSQL & " And [KararYear]='" & Me.KararYear & "'" 'نضيف معيار الحقل الثاني strSQL = strSQL & " And [CompID]=" & Me.CompId 'نضيف معيار الحقل الثالث الآن اصبح المتغير strSQL يحتوي على جميع المعايير، وبالصيغه الصحيحة، اذن فالنستعمله في الامر التالي كم عدد السجلات التي يوجد بها هذه المعايير intHow_Many = DCount("*", "TblKararat", strSQL) If intHow_Many > 0 Then اذا كان عدد السجلات اكثر من صفر، فمعناه ان اسم الموظف موجود مسبقا لذا، اوقف العملية واخبر المستخدم، ولا تحفظ السجل MsgBox "لقد تم تسجيل هذا الموظف مسبقا" Exit Sub End If جعفر
  4. وعليكم السلام 🙂 لا يوجد نموذج فرعي في مرفقك!! على العموم ، هذا تصحيح للكود الموجود في نموذجك: Private Sub Worker_BeforeUpdate(Cancel As Integer) Dim strSQL As String Dim intHow_Many As Integer strSQL = "[Worker]='" & Me.Worker & "'" intHow_Many = DCount("*", "Workermain", strSQL) If intHow_Many > 0 Then MsgBox "لقد تم تسجيل هذا الموظف مسبقا" cancel=true me.Undo Exit Sub End If End Sub جعفر
  5. نعم ، اذا كان نوع الحقل تاريخ في الجدول ، او اذا كتبت هذا التنسيق في حقل غير مضمن في النموذج 🙂 وطبعا تقدر تستخدم التاريخ بتنسيقات اخرى ، حسب الحاجة (لا تنسى انه تنسيق ، يعني يعطيك هذا الشكل ، ولكن المضمون قد يختلف ، مثل تنسيق mmyyyy ، والذي مافيه يوم ، ولكن لما تنقر على الحقل ، يخليك تشوف اليوم 🙂 )
  6. الفرق عدد الخانات ، يعني مثلا d/m/yyyy = 1/2/2019 بينما dd/mm/yy = 01/02/2019 مجرد اختلاف في التنسيق 🙂
  7. حياك الله اخوي زياد 🙂
  8. وعليكم السلام 🙂 تفضل: Private Sub Command24_Click() ' مفتاح اضافة موظف اخر لنفس القرار Dim strSQL As String Dim intHow_Many As Integer strSQL = "[KararNom]='" & Me.KararNom & "'" strSQL = strSQL & " And [KararYear]='" & Me.KararYear & "'" strSQL = strSQL & " And [CompID]=" & Me.CompId intHow_Many = DCount("*", "TblKararat", strSQL) If intHow_Many > 0 Then MsgBox "لقد تم تسجيل هذا الموظف مسبقا" Exit Sub End If DoCmd.RunCommand acCmdSaveRecord Dim x As Integer If MsgBox("تم اضافة وحفظ بيانات الموظف للقرار بنجاح. هل تريد اضافة موظف لنفس القرار؟", vbYesNo, "تنبيه") = vbYes Then Dim N, Y, F N = Me.KararNom: Y = Me.KararYear: F = Me.KararFrom DoCmd.GoToRecord , , acNext Me.KararNom = N: Me.KararYear = Y: Me.KararFrom = F Me.CompId.SetFocus Else DoCmd.RunCommand acCmdRecordsGoToNext Me.KararNom.SetFocus End If End Sub جعفر
  9. حياك الله 🙂 and you are always welcome 🙂 جعفر
  10. وعليكم السلام 🙂 هذا الرابط قد يفيدك جعفر
  11. حياك الله 🙂 رجاء فتح موضوع جديد لهذا الطلب ، فهو خارج عن موضعنا الذي نحن به 🙂 جعفر
  12. وعليكم السلام 🙂 ومشاركة مع اخي زياد 🙂 عندك هذه الاختيارات: D1: DateSerial([date year],[date mans],[date day]) او D2: CDate([date day] & "/" & [date mans] & "/" & [date year]) او D3: Format([date day] & "/" & [date mans] & "/" & [date year],"dd/mm/yyyy") . . ولكن انظر الى النتيجة: سترى ان الحقول D1 و D2 و D3 تعطي التاريخ الصحيح ، ولكن الاكسس لا يرى ان جميع هذه الحقول هي حقل تاريخ!! انظر الى محاذاة نتيجة الحقل: فالحقول D1 و D2 فهي محاذاتها الى اليمين ، مما يعني ان الاكسس عاملها كحقل تاريخ ، بينما الحقل D3 فهو بمحاذاة اليسار ، اي اعتبرها حقل نص . وللتأكد ، انقر بالفأرة اليمين على الحقل ، والمفروض ان الاكسس يعطيك تصفية خاصة بنوع الحقل: تاريخ: . نص: وافضل هذه الاختيارات هو D1 🙂 جعفر 1016.hany - Copy - Copy.mdb.zip
  13. نعم ممكن قراءة البيانات بالطريقة التي لديك ، ولكني اعطيتك الطريقة الصحيحة في قاعدة البيانات 🙂 وصدقني ، ستكون اسهل لك في المستقبل ، لإستعمالها لأغراض اخرى ، وخصوصا عن طريق الاستعلام !! جعفر
  14. اعطينا مزيد من المعلومات علشان نشرح زيادة 🙂 شو الشيء اللي يعمله البرنامج ، وشو ActiveX اللي يستعمله ، والكود اللي تستعمله ، واي سطر يعطيك الخطأ 🙂 جعفر
  15. السلام عليكم 🙂 عملت تغيير على النموذج ليصبح خفيفا 🙂 ولما تختار الشهر والسنه والمنطقة ، افتح الاستعلام qry_New_Request_Results ليعطيك النتيجة المطلوبة 🙂 الاستعلام : عملنا وحدة نمطية اسمها Concat لجمع بيانات الحقل ، ونرسل لها اسم الحقل المراد تجميع بياناته في سطر واحد ، ونرسل اسم الشخص ، ونعمل هذا لكل حقل . والنتيجة: . وهذه هي الوحدة النمطية: Public Function Concat(F_Name, P_Name) On Error GoTo err_Concat 'F_Name = Field Name 'P_Name = Person Name Dim rst As DAO.Recordset Dim RC As Integer Dim i As Integer Dim Add_Me As String Dim strSQL As String 'do the query SQL for this Field name ONLY strSQL = "Select [" & F_Name & "] From [New_Request] Where [PName]= '" & P_Name & "'" Set rst = CurrentDb.OpenRecordset(strSQL) 'make the Recordset in memory rst.MoveLast: rst.MoveFirst: RC = rst.RecordCount 'loop through the Records For i = 1 To RC 'ONLY add this value if we didn't add it before If InStr(Add_Me, rst(F_Name)) = 0 Then Add_Me = Add_Me & ", " & rst(F_Name) 'Concatenate these values End If rst.MoveNext Next i Concat = Mid(Add_Me, 3) 'remove the initial comma Exit_Concat: rst.Close: Set rst = Nothing Exit Function err_Concat: If Err.Number = 3021 Then 'no data Concat = "" Resume Exit_Concat ElseIf Err.Number = 3061 Then 'too few parameters, expected xx 'this error occurs when trying to run a query which needs its parameters from a Form, 'the Form should be open with the parameter, then this code take the values properly Dim qdf As DAO.QueryDef Dim prm As Parameter ' For Each qdf In CurrentDb.QueryDefs ' If qdf.Name = "NewQueryDef" Then ' CurrentDb.QueryDefs.Delete "NewQueryDef" ' Exit For ' End If ' Next Set qdf = CurrentDb.CreateQueryDef("NewQueryDef", strSQL) For Each prm In qdf.Parameters prm.Value = Eval(prm.Name) Next prm Set rst = qdf.OpenRecordset(dbOpenDynaset) CurrentDb.QueryDefs.Delete "NewQueryDef" Resume Next Else MsgBox Err.Number & vbCrLf & Err.Description End If End Function جعفر 1015.Concatenate.accdb.zip
  16. وعليكم السلام 🙂 ببساطة ، الظاهر انك تريد تقرأ / تكتب الى مسار ملف غير موجود 🙂 بعض الاوقات لما تريد تكتب/تقرأ من ملف ، فالملف قد لا يكون جاهزا (يعني يمكن الوندوز بطيء لتجهيزه للقراءه) ، لذا في بعض الاحيان اضطر ان اخلي الكود ينتظر ثانيه واحدة قبل الانتقال الى سطر قراءته ، فيكون هذا الكود قبل قراءة الملف ، هكذا (الكود مأخوذ من مساعد الاكسس ، ونرى ان التأخير هنا 5 ثوان) : Dim PauseTime, Start PauseTime = 5 ' Set duration. Start = Timer ' Set start time. Do While Timer < Start + PauseTime DoEvents ' Yield to other processes. Loop . جعفر
  17. السلام عليكم 🙂 تم دمج الموضوعين ، وحذف مشاركه في موضوع آخر 🙂 خلينا نشتغل في مكان واحد ، في هذا الموضوع 🙂 من الصورة المرفقة في مشاركتك الاخيرة ، عملت الاستعلام التالي: انت تريد ان تجعل للشخص سجل واحد ، بحيث تجمع بيانات الحقل TName مفصولا بفاصلة ، ولكن ماذا عن بقية الحقول اذا كانت البيانات مختلفة ، مثل الحقل TCode كما هو في الصورة في الاسفل؟ . جعفر
  18. وعليكم السلام 🙂 اذا انا مو غلطان ، فهذه ثالث محاولة/موضوع لك لنفس الشيء ، وما حصلت اجابات هناك🙂 في الواقع جدولك هذا مال اكسل ، بينما جدول قاعدة البيانات لازم يكون بهذه الطريقة: . واعتقد بأنك تقدر تواصل من هنا 🙂 وحيالله اخوي co2002co 🙂 جعفر 1014.Salary_increment.accdb.zip
  19. بس بعد فتح النموذج 🙂
  20. وعليكم السلام 🙂 هممم الكود اللي وضعة اخوي Barna عام ويمكن وضعه في اي نموذج ، ولكن ممكن نصغر الكود ، حسب قراءة من اي نموذج: اذا كانت القيمة الحقل n1 في النموذج a1 ، ونريد ارسالها الى الحقل n2 في النموذج a2 ، اذا كنا في النموذج a1 واردنا ارسال القيمة : Forms![a2]![n2] = me.n1 بينما اذا كنا في النموذج n2 واردنا استيراد القيمة : me.n2 = Forms![a1]![n1] . بينما الكود اللي وضعة اخوي Barna عام ويمكن وضعه في اي نموذج 🙂 جعفر
  21. السلام عليكم 🙂 سيدي الفاضل ، عملت شوية تغييرات ، فخلينا نتابع (رجاء مراجعة الشرح في مشاركاتي السابقة) : 1. جدول خاص للمدرسين tbl_Teachers ، ولكل واحد رقمه الخاص Teacher_ID (حتى لا تتشابه الاسماء) ، ورقم المدرسة التي هو بها SID ، 2. جدول tbl_Allowed ، فيه رقم المدرسة SID ، والقاعات المسموح ان تقوم المدارس بمراقبتها ، وعدد الملاحظين الذكور والاناث (ويتم ادخال هذه البيانات عن طريق النموذج) ، 3. جدول توزيع المدرسين عشوائيا tbl_Distributed ، ويتم انتاج بياناته برمجيا ، وهو المطلوب . وفي هذا النموذج نقوم بادخال بيانات الجدول tbl_Allowed ، ولا يسمح هذا النموذج من ادخال عدد مدرسين غير موجودين في جدول tbl_Teachers ، وهنا نحدد عدد المدرسين الذكور او/و الاناث لكل قاعة ، وفي اسفل النموذج نرى مجموع ما تم اختياره من ملاحظين ذكور او/و اناث ، بحيث لا يحتمل الخطأ . وهذا الزر في النموذج يوجد به كود التوزيع (والذي سأضعه في نهاية هذه المشاركة) . البرنامج لا يستعمل الاستعلام الاول (ذكور) والاخير (اناث) ويمكن حذفهما ، ولكن الاستعلام الذي في الوسط qry_D_Halls_All يحتوي على الاستعلامين . وهنا نستطيع ان نرى نتائج دمج الاستعلامين في الاستعلام qry_D_Halls_All والذي وفر علينا الكثير من الخطوات . الاستعلام الذي به جميع الملاحظين الذين يمكنهم مراقبة القاعات ، حسب كل مدرسة ، . واهم استعلام في هذه المجموعة ، حيث لا يُظهر ارقام الملاحظين الذين تم استعمالهم مسبقا (لاحظ الاستعلام الفرعي الذي تحته خط احمر) . اما هذا الاستعلام فلسنا بحاجة اليه ، وانما اهميته في المعيار لعمل التصفية للقاعات لتجربتها في برنامجنا هذا ، ويجب عليك حذف هذ المعيار ، ولكن لا تحذف هذا الاستعلام ، فهو جزء من الابرنامج الان . والنتيجة: . وهذا هو الكود الذي يقوم بالعمل ، والذي يمكن تنضيفه قليلا ، لأن به متخلفات الكود السابق ، ولكنها لا تضر ، فلا تهتم فيها 🙂 : Private Sub cmd_Distribute_Click() On Error GoTo err_cmd_Distribute_Click ' If Len(Me.Distribution_ID & "") = 0 Then ' ' MsgBox "رجاء ادخال رقم التوزيع" ' Me.Distribution_ID.SetFocus ' Exit Sub ' ElseIf Len(Me.Distribution_ID & "") = 0 Then ' ' MsgBox "رجاء ادخال تاريخ التوزيع" ' Me.Distribution_Date.SetFocus ' Exit Sub ' End If If DCount("*", "tbl_Distributed") > 0 Then Dim Msg, Style, Title, Response Msg = "هناك بيانات في الجدول، هل تريد حذفها" & vbCrLf & _ "لا يمكن اضافة بيانات جديدة على بيانات سابقة" Style = vbYesNo + vbCritical + vbDefaultButton2 Title = "الجدول tbl_Distributed به بيانات" Response = MsgBox(Msg, Style, Title) If Response = vbYes Then DoCmd.SetWarnings False DoCmd.RunSQL ("Delete * From tbl_Distributed") DoCmd.SetWarnings True Else MsgBox "لم يتم حذف البيانات، ولا عمل اختيارات جديدة" Exit Sub End If End If Dim i As Integer Dim j As Integer Dim How_Many_Instructors As Integer Dim RND_SID As Integer Dim RND_Selection As Integer Dim rs As Integer Dim Which_Regaz As Integer Dim rstD As DAO.Recordset Dim rstH As DAO.Recordset Dim rstSelection As DAO.Recordset Dim RC_rstH As Integer Dim RC_rstSelection As Integer Dim arrrstSelection As Variant Dim strSQL As String 'rstD = tbl_Distributed 'rstH = qry_D_Halls 'rstSelection = qry_D_Selection rs = 1 strSQL = "Select * From tbl_Distributed" Set rstD = CurrentDb.OpenRecordset(strSQL) rs = 2 strSQL = "Select * From qry_D_Halls" Set rstH = CurrentDb.OpenRecordset(strSQL) 'load the Recordset into memory, and get its number of Records rstH.MoveLast: rstH.MoveFirst: RC_rstH = rstH.RecordCount 'Hall Name For i = 1 To RC_rstH Me.srch_Distribution_Hall = rstH!Allowed_Hall Me.srch_SID = rstH!SID Me.srch_Regaz = rstH!Regaz 'Loop through the Number of teachers of the schools For j = 1 To rstH!How_Many 'now we have all the data required to pick a teacher rs = 4 strSQL = "Select * From qry_D_Selection Order By Teacher_ID" Set rstSelection = CurrentDb.OpenRecordset(strSQL) rstSelection.MoveLast: rstSelection.MoveFirst: RC_rstSelection = rstSelection.RecordCount arrrstSelection = rstSelection.GetRows(RC_rstSelection) Select_Teacher: Randomize RND_Selection = Int((arrrstSelection(0, RC_rstSelection - 1) - arrrstSelection(0, 0) + 1) * Rnd + arrrstSelection(0, 0)) 'get a random number between Min & Max rstSelection.FindFirst "[Teacher_ID]=" & RND_Selection 'but sometimes this number dose not exist, so get another Random If rstSelection.NoMatch Then GoTo Select_Teacher 'Teacher_ID is good, make a new Record in tbl_Distributed and save info rstD.AddNew 'rstD!Distribution_ID = Me.Distribution_ID 'rstD!Distribution_Date = Me.Distribution_Date rstD!Teacher_ID = RND_Selection rstD!SID = rstH!SID rstD!Distributed_Hall = rstH!Allowed_Hall rstD.Update Next j rstH.MoveNext Next i MsgBox "Done" Exit_cmd_Distribute_Click: rstD.Close: Set rstD = Nothing rstH.Close: Set rstH = Nothing rstSelection.Close: Set rstSelection = Nothing Exit Sub err_cmd_Distribute_Click: If Err.Number = 3061 Then 'too few parameters, expected xx 'this error occurs when trying to run a query which needs its parameters from a Form, 'the Form should be open with the parameter, then this code take the values properly Dim qdf As QueryDef Dim prm As Parameter Set qdf = CurrentDb.CreateQueryDef("NewQueryDef", strSQL) For Each prm In qdf.Parameters prm.Value = Eval(prm.Name) Next prm If rs = 1 Then Set rstD = qdf.OpenRecordset(dbOpenDynaset) ElseIf rs = 2 Then Set rstH = qdf.OpenRecordset(dbOpenDynaset) ElseIf rs = 4 Then Set rstSelection = qdf.OpenRecordset(dbOpenDynaset) End If DoCmd.DeleteObject acQuery, "NewQueryDef" Resume Next ElseIf Err.Number = 3021 Then 'No current Record If rs = 1 Then MsgBox "No Records in tbl_Distributed" ElseIf rs = 2 Then MsgBox "No Records in qry_D_Halls" ElseIf rs = 4 Then MsgBox "Hall Number=" & Me.srch_Distribution_Hall & vbCrLf & _ "SID=" & Me.srch_SID & vbCrLf & _ "Regaz=" & Me.srch_Regaz & vbCrLf & _ "No Records in qry_D_Selection" End If Resume Exit_cmd_Distribute_Click Else MsgBox Err.Number & vbCrLf & Err.Description End If End Sub جعفر 1008.2.توزيع الملاحظين.mdb.zip 1008.2.توزيع الملاحظين.accdb.zip
  22. وعليكم السلام 🙂 ماشاء الله ، مادام كل الشباب مشاركين ، فانا ادلو بدلوي كذلك 🙂 و جعفر
  23. وعليكم السلام 🙂 رجاء مراجعة هذا الرابط جعفر
  24. وعليكم السلام 🙂 اهلا وسهلا بك اخي eslamali2 في المنتدى 🙂 رجاء مراعاة شروط المنتدى ، كما اشار اخي زياد في مشاركته ، وبالخصوص المادة رقم 3 من قواعد المشاركة في الموقع 🙂 اما الرد على سؤالك فهو ، نعم نستطيع ان نجزء البرنامج الى قسمين/ملف: ملف الجداول ، ويسمى بمصطلح BE بعد اسم البرنامج (مثل myDataBase_BE.accdb) ، وبه الجداول وعلاقاتها فقط ، ملف الواجهة ، ويسمى بمصطلح FE بعد اسم البرنامج (مثل myDataBase_FE.accdb) ، وبه بقية كائنات البرنامج وبدون جداول ، ويتم ربط الجداول برمجيا. لهذا السبب ، اعمل تغييراتك على FE وارسلها الى الزبون ، فلما يستلم الزبون الملف ويفتحه ، تأتي نافذة الوندوز تطلب منه ان يخبرها عن مكان وجود ملف BE ، ويتم الربط 🙂 هناك العديد من المواضيع في المنتدى بهذا الخصوص ، فخاصية البحث ستساعدك في الحصول عليها ، وارفق لك رابطين قد تستفيد منها: و جعفر
×
×
  • اضف...

Important Information