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

jjafferr

أوفيسنا
  • Posts

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

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

  • Days Won

    406

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

  1. وعليكم السلام 🙂 ببساطة ، الظاهر انك تريد تقرأ / تكتب الى مسار ملف غير موجود 🙂 بعض الاوقات لما تريد تكتب/تقرأ من ملف ، فالملف قد لا يكون جاهزا (يعني يمكن الوندوز بطيء لتجهيزه للقراءه) ، لذا في بعض الاحيان اضطر ان اخلي الكود ينتظر ثانيه واحدة قبل الانتقال الى سطر قراءته ، فيكون هذا الكود قبل قراءة الملف ، هكذا (الكود مأخوذ من مساعد الاكسس ، ونرى ان التأخير هنا 5 ثوان) : Dim PauseTime, Start PauseTime = 5 ' Set duration. Start = Timer ' Set start time. Do While Timer < Start + PauseTime DoEvents ' Yield to other processes. Loop . جعفر
  2. السلام عليكم 🙂 تم دمج الموضوعين ، وحذف مشاركه في موضوع آخر 🙂 خلينا نشتغل في مكان واحد ، في هذا الموضوع 🙂 من الصورة المرفقة في مشاركتك الاخيرة ، عملت الاستعلام التالي: انت تريد ان تجعل للشخص سجل واحد ، بحيث تجمع بيانات الحقل TName مفصولا بفاصلة ، ولكن ماذا عن بقية الحقول اذا كانت البيانات مختلفة ، مثل الحقل TCode كما هو في الصورة في الاسفل؟ . جعفر
  3. وعليكم السلام 🙂 اذا انا مو غلطان ، فهذه ثالث محاولة/موضوع لك لنفس الشيء ، وما حصلت اجابات هناك🙂 في الواقع جدولك هذا مال اكسل ، بينما جدول قاعدة البيانات لازم يكون بهذه الطريقة: . واعتقد بأنك تقدر تواصل من هنا 🙂 وحيالله اخوي co2002co 🙂 جعفر 1014.Salary_increment.accdb.zip
  4. بس بعد فتح النموذج 🙂
  5. وعليكم السلام 🙂 هممم الكود اللي وضعة اخوي Barna عام ويمكن وضعه في اي نموذج ، ولكن ممكن نصغر الكود ، حسب قراءة من اي نموذج: اذا كانت القيمة الحقل n1 في النموذج a1 ، ونريد ارسالها الى الحقل n2 في النموذج a2 ، اذا كنا في النموذج a1 واردنا ارسال القيمة : Forms![a2]![n2] = me.n1 بينما اذا كنا في النموذج n2 واردنا استيراد القيمة : me.n2 = Forms![a1]![n1] . بينما الكود اللي وضعة اخوي Barna عام ويمكن وضعه في اي نموذج 🙂 جعفر
  6. السلام عليكم 🙂 سيدي الفاضل ، عملت شوية تغييرات ، فخلينا نتابع (رجاء مراجعة الشرح في مشاركاتي السابقة) : 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
  7. وعليكم السلام 🙂 ماشاء الله ، مادام كل الشباب مشاركين ، فانا ادلو بدلوي كذلك 🙂 و جعفر
  8. وعليكم السلام 🙂 رجاء مراجعة هذا الرابط جعفر
  9. وعليكم السلام 🙂 اهلا وسهلا بك اخي eslamali2 في المنتدى 🙂 رجاء مراعاة شروط المنتدى ، كما اشار اخي زياد في مشاركته ، وبالخصوص المادة رقم 3 من قواعد المشاركة في الموقع 🙂 اما الرد على سؤالك فهو ، نعم نستطيع ان نجزء البرنامج الى قسمين/ملف: ملف الجداول ، ويسمى بمصطلح BE بعد اسم البرنامج (مثل myDataBase_BE.accdb) ، وبه الجداول وعلاقاتها فقط ، ملف الواجهة ، ويسمى بمصطلح FE بعد اسم البرنامج (مثل myDataBase_FE.accdb) ، وبه بقية كائنات البرنامج وبدون جداول ، ويتم ربط الجداول برمجيا. لهذا السبب ، اعمل تغييراتك على FE وارسلها الى الزبون ، فلما يستلم الزبون الملف ويفتحه ، تأتي نافذة الوندوز تطلب منه ان يخبرها عن مكان وجود ملف BE ، ويتم الربط 🙂 هناك العديد من المواضيع في المنتدى بهذا الخصوص ، فخاصية البحث ستساعدك في الحصول عليها ، وارفق لك رابطين قد تستفيد منها: و جعفر
  10. اعتقد هذه هي الطريقة الصحيحة 🙂 . بس لازم نعمل طريقة بحيث يكون لكل قاعة 6-7 اشخاص !! رجاء تفكر معاي ، لأني ما قادر اوصل الى طريقة سهلة 😞 جعفر
  11. حياك الله 🙂 السؤال خارج عن الموضوع، ويمكنك عمل موضوع خاص به ، وهذا الرابط سيفيدك جعفر
  12. ما اعرف ، ولكن انت قلت: لهذا السبب طلبت منك . على العموم ، بما ان الحقل الثالث نص ، فالكود يجب ان يكون: Dim rst As dao.Recordset dim myWhere as string Set rst = Form.RecordsetClone myWhere = "[ID]=" & me.Text1 myWhere = myWhere & " And [Code]=" & me.Text2 myWhere = myWhere & " And [City]='" & me.Text3 & "'" rst.FindFirst myWhere If Not rst.EOF Then me.Bookmark = rst.Bookmark جعفر
  13. الظاهر ان البيانات لما تخرج من مربع السرد يعطي 255 حرف فقط ، لذلك تفضل هذه طريقة ثانية 🙂 جعفر 1011_test.accdb.zip
  14. 1. رجاء ارفاق رسالة الخطأ ، 2. بالنسبة الى الحقل الجديد ، شو نوع الحقل (نص ، رقم ، او تاريخ) ؟ جعفر
  15. وعليكم السلام 🙂 الظاهر ان الحقل من نوع مذكرة في احد الجداول ، ومن نوع نص في الحقل اللي في الصورة اعلاه ، لذلك فهو يأخذ 255 حرف فقط !! جعفر
  16. وعليكم السلام 🙂 حياك الله 🙂 نعم ، وزيادة ، والطريقة هي السعي لقضاء حاجة اخوانك ، وخصوصا اللي في المنتدى 🙂 اما بالنسبة لي انا ، فكما يقول الله عز وجل: وَمَا أُوتِيتُم مِّنَ الْعِلْمِ إِلَّا قَلِيلًا جعفر
  17. اخي الفاضل الدكتور اللي يقدر يوصف لك العلاج عن بُعد ، وبمجرد انك تخبره انك مريض وبس ،فهذا عملة نادرة 🙂 اما انا فلا. جعفر
  18. تفضل 🙂 اضفت معيار جديد: Me.NewRecord And Private Sub Form_BeforeUpdate(Cancel As Integer) If Me.NewRecord And DCount("*", "الزبائن", "[customer]='" & Me.txtName & "'") > 0 Then MsgBox "هذا الاسم موجود بالفعل", vbCritical, "التكرار ممنوع" Me.Undo Cancel = True End If End Sub . بس اخي عبداللطيف ، الافضل ان تضع الكود قبل تحديث حقل الاسم وليس قبل تحديث النموذج 🙂 جعفر
  19. تفضل 🙂 Dim rst As dao.Recordset dim myWhere as string Set rst = Form.RecordsetClone myWhere = "ID=" & [Text1] myWhere = myWhere & " And Code=" & [Text2] myWhere = myWhere & " And Age=" & [Text3] rst.FindFirst myWhere If Not rst.EOF Then Bookmark = rst.Bookmark . شوف هذا الرابط لبقية انواع الحقول من نص ، وتاريخ جعفر
  20. هذا كان طلبك في مشاركتك الاولى !! ورجاء ، استعمل الخط العادي ، لأننا لما نستعمل الهاتف المحمول لقراءة المشاركات ، فالخط الكبير يملئ الشاشة 😞 رجاء اخبرنا بالتفصيل عن اللي تريده، وبمثال 🙂 جعفر
  21. ايش رأيك بهذه الطريقة: . نختار لكل قاعة ، رجال و اناث ، او رجال فقط ، او اناث فقط ، و لا نستعمل القاعة التي لا يوجد فيها اختيار ؟ ورجاء ، اذا في اي تغيير آخر ، اخبرني من الآن ، لأني على سفر قريبا جدا !! جعفر
  22. وعليكم السلام 🙂 اهلا وسهلا بك في المنتدى 🙂 في المرات القادمة، رجاء وضع سؤال واحد لكل موضوع، حتى تحصل على فرصة اكبر للحل 🙂 جعفر
  23. يجب ازالة علامة الاستفهام الموجودة في الكلمات باللون الارزق
  24. الحمدلله 🙂 بالنسبة الى العرض ، مثل ما اخبرتك، حاليا ما عندك خيار إلا ان تكون جميع اعمدة التواريخ بنفس العرض ، والعرض يتم التحكم فيه من الكود ، من المتغير W (كما في الصورة ادناه) ، كان العرض نصف بوصة ، والان عملته بوصه . والتقرير ، يجب ان نجعل الحقول قابلة للنمو/للإرتفاع (ليست قابلة لإحتواء البيانات)، يجب تغيير اعدادات القسم، بحيث يقبل النمو . و نختار جميع الحقول ، وكذلك نجعلها قابله للنمو . والنتيجة . طبعا تستطيع تغيير مكان الحقول، بسحبها الى المكان الصحيح، وتغيير تنسيق اتجاه الخط من اليمين الى اليسار. ولكن انتبه ، يجب ان يكون حجم الورقة عندك كبير ، حتى لا تطبع اجزاء من الصفحة على الصفحة التالية 😞 جعفر
  25. العفو ، بس كنت مشغول حبتين 🙂 بسبب تنسيق التاريخ في كمبيوترك، عندك هذا الخلل ، جرب المرفق لوسمحت ، فانا استعنت بكود التاريخ من هنا : . والكود اصبح: Private Sub Report_Open(Cancel As Integer) Dim ctrl As Control Dim A As Integer Dim Empty_Cells As Integer Dim Full_Cells As Integer Dim W As Integer Dim myWhere As String Dim rpt_width As Integer Dim Full_Date As Date Dim D As Integer Dim Y As Integer Dim M As Integer W = 1440 / 2 'field width Empty_Cells = 0 Full_Cells = 1 'the name rpt_width = 0 Y = Forms!tqrer!iYear 'year M = Forms!tqrer!iMonth 'month For Each ctrl In Me.Controls 'is this a Date field in the Report If ctrl.ControlType = acTextBox And IsNumeric(Mid(ctrl.Name, 5)) Then D = Mid(ctrl.Name, 5) Full_Date = DateSerial(Y, M, D) 'the field Names from the Crosstab query 'check if this field exists int the table 'myWhere = "[zeiara_date]=#" & Full_Date & "#" myWhere = "[zeiara_date]=" & DateFormat(Full_Date) 'myWhere = myWhere & Chr(32) & " And [zeiara_date] Between Date_1 and Date_2" A = DCount("*", "zeara", myWhere) End If If A = 0 And ctrl.ControlType = acTextBox And Left(ctrl.Name, 4) = "txt_" Then 'field dose not exist Me("txt_" & D).Width = 0 'trim field size to Zero Me("txt_" & D).Visible = False 'make the field invisible ctrl.ControlSource = "" 'remove the Control Source Me("lbl_" & D).Width = 0 'trim label size to Zero Me("lbl_" & D).Visible = False 'make the label invisible Empty_Cells = Empty_Cells + 1 Debug.Print "Off " & ctrl.Name & vbTab & "D:" & D & vbTab & "Full:" & Full_Date & vbTab & "A:" & A ElseIf ctrl.ControlType = acTextBox And Left(ctrl.Name, 4) = "txt_" Then 'field exists Me("txt_" & D).Width = 1 * W 'set the field width Me("txt_" & D).Visible = True 'make the field visible ctrl.ControlSource = Full_Date Me("lbl_" & D).Width = 1 * W 'set the label width Me("lbl_" & D).Visible = True 'make the label visible Me("lbl_" & D).Caption = D & "/" & M 'give the label, a caption Full_Cells = Full_Cells + 1 rpt_width = rpt_width + ctrl.Width 'add the width Debug.Print "ON " & ctrl.Name & vbTab & "D:" & D & vbTab & "Full:" & Full_Date & vbTab & "A:" & A End If Next Me.Width = rpt_width + Me("mogh_name").Width 'the final Report width End Sub . جعفر 1001.rpt_Monthly_Crosstab.accdb.zip
×
×
  • اضف...

Important Information