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

jjafferr

أوفيسنا
  • Posts

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

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

  • Days Won

    406

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

  1. السلام عليكم كان المفروض ان يكون هذا الموضوع كجواب للموضوع والمشكلة هي ان ارقام التسلسل بالعربي ، في كل من التقارير الفرعية ليست بالتسلسل المطلوب ، ولا السنه بالتسلسل الصحيح . نعرف اذا اردنا ان نعمل اكثر من عمود في التقرير ، فاننا نستعمل اعدادات الصفحة في التقرير . اذا التقرير بالانجليزي ، فكل شيء تمام وبالترتيب/التسلسل المطلوب ، ولكن للأسف لما نريد الاعمدة بالتسلسل العربي ، من اليمين الى اسفل ، ثم يُكمّل العمود الثاني من حيث انتهى الاول ، هكذا . فهنا يجب ان نقوم بمعالجة الموضوع بطريقتنا الخاصة استعنت بالبرنامج من الروابط اعلاه ، وعملت تجارب على عدة اعمدة: 2 الى 6 اعمدة ، وكتبت نتائجها في الاكسل ، لأرى النتائج بصورة مباشرة ، الحالي معناه ما يعطينا الاكسس ، والمفروض هو التسلسل الذي نسعى لعمله . وبعد التمعن في الارقام لعدة ايام ، توصلت الى ان هناك لوغاريثم معين يتماشى مع ارقام الاعمدة وتسلسلها ، وبعد تجربة عدة طرق توصلت لطريقة تعرض هذه الاعمدة بالطريقة التي نريدها 1. سنحتاج الى حقلين اضافيين في الجدول (لكل تقرير فرعي) ، حقل تسلسل الاعمدة (وسيكون مخفي ، باللون البرتقالي في الصورة ادناه) والذي سيعتمد عليه التقرير في فرز البيانات ، rpt2_Seq مثلا، وحقل للتسلسل الذي سنراه في التقرير ، Seq2 مثلا (الحقل الآخر في التقرير) ، 2. في التقرير ، هكذا نجعل فرز البيانات ، على اساس الحقل rpt2_Seq . وبما ان التقرير الرئيسي يحتوي على 3 تقارير فرعية (في برنامج الرابط اعلاه) ، . فوضعت الكود على حدث "التنسيق" لرأس التقرير Page Header ، وهذا هو الكود ، والذي نراه انه ينادي الدالة ("Call Seq_Records(2, "rpt2_Seq", "Seq2") ، لكل تقرير فرعي ، ويرسل عدد الاعمدة المطلوبة ، واسم حقلي التسلسل في الجدول للتقرير الفرعي: Option Compare Database Dim rst As DAO.Recordset Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer) 'Seq the subform Records 'rpt2 Set rst = CurrentDb.OpenRecordset("Select * From qry_2 Where nationalty=" & Me.nationalty) Call Seq_Records(2, "rpt2_Seq", "Seq2") 'rpt3 Set rst = CurrentDb.OpenRecordset("Select * From qry_3 Where nationalty=" & Me.nationalty) Call Seq_Records(2, "rpt3_Seq", "Seq3") 'rpt4 Set rst = CurrentDb.OpenRecordset("Select * From qry_4 Where nationalty=" & Me.nationalty) Call Seq_Records(2, "rpt4_Seq", "Seq4") End Sub . وهذا كود الدالة ، والتي يمكن إخراجها من التقرير وجعلها وحدة نمطية مستقلة) : Function Seq_Records(N As Integer, Seq_fName As String, Seq_n As String) On Error GoTo err_Seq_Records 'N = Number of columns 'Seq_fName = Seq Field Name 'Seq_n = Seq rst.MoveLast: rst.MoveFirst RC = rst.RecordCount c_Columns = N 'Number of columns in the report r_Records = RC 'Number of Records in the report j_First = c_Columns 'Start rtp_Seq with this number Counter = 0 'each time reduce c_Columns by this Counter For i = 1 To RC rst.Edit rst(Seq_fName) = j_First rst(Seq_n) = i 'Debug.Print "rtp_Seq=" & j_First & vbTab & "Seq=" & i rst.Update 'rtp_Seq j_First = j_First + c_Columns 'rpt_Seq cannot be > RC If j_First > RC Then 'start Counter Counter = Counter + 1 'rpt_Seq re-calculate j_First = c_Columns - Counter End If rst.MoveNext Next i Exit_Seq_Records: rst.Close: Set rst = Nothing Exit Function err_Seq_Records: If Err.Number = 3021 Then Resume Exit_Seq_Records Else MsgBox Err.Number & vbCrLf & Err.Description End If End Function . والنتيجة: . كما عملت تقرير للتجربة وبه 4 اعمدة ، والذي ينادي الدالة هكذا ("Call Seq_Records(4, "rpt2_Seq", "Seq2") ، والنتيجة . جعفر 680.4.الاجازات.accdb.zip
  2. وعليكم السلام نصيحة: الطريقة التي تقوم بها بكتاية الكود ، هي احد اسباب حصول خلل في برنامج الاكسس ابدا لا تكتب الكود او تغير فيه والنموذج ليس في وضع التصميم او وضع LayOut اما سبب مشكلتك: فعندك حدث على Timer التوقيت او ساعة او شيء من هذا القبيل ، والكود كلما اراد ان يشتغل بالطريقة الطبيعية ، واذا بالـ Timer يريد ان يقرأ الكود ، فيتلخبط الكود الذي تكتبه وما يلحق يأخذ نفس جعفر
  3. وانا ارحب بأخي رمهان ، واشاركه الرأي بطلب الكود ، للفائدة جعفر
  4. هذا نقلا عن الرابط https://www.pcreview.co.uk/threads/basic-difference-between-visual-basic-6-and-microsoft-access-vba.3034726/ 1. طريقة المعادلات والوحدات النمطية هي نفسها ، وبسبب ظهور vb للعالم قبل الاكسس ، فهناك الكثير من حلول vb والتي نستفيد منها في الاكسس ، 2. طريقة التعامل مع كائنات النموذج تقريبا نفسها ، ولكن الحدث يوجد فيه فرق ، وطريقة قراءة اعدادات كائنات النموذج تختلف قليلا ، وvb لا يملك نماذج فرعية كما في الاكسس ، والتعامل مع هذه البيانات الفرعية ليست بسهولة الاكسس ، 3. لا توجد تقارير في vb ، 4. لا تحتوي على وضع التصميم للجدول والاستعلام كما في الاكسس ، 5. الاكسس مهيأ ليتعامل مع البيانات ، ولكني الذي فهمته من سؤالك والذي جوابه النقطة 1 من جوابي اعلاه جعفر
  5. عفوا اخي ابوخليل ، لم الحظ ردك كانت الصفحة عندي مفتوحة لفترة طويلة اختي رجاء اعطني مثال من برنامجك عن كيف تريدين الجمع والنتيجة ، حتى نحاول نتبعها ونصل الى الذي تريدين جعفر
  6. وعليكم السلام تم تغيير اعدادات الحقل ID الى السماح بالتكرار ، وتفضل الكود ، والذي يشتغل بعد ان تُدخل قيمة الحقل Type في النموذج: Private Sub Type_AfterUpdate() Me.ID = Nz(DMax("[ID]", "Table1", "[Type]='" & Me.Type & "'"), 0) + 1 End Sub بس ملاحظة ، الموضوع غير متوقف على المادتين اللي ذكرتهم ، بل اذا اضفت اي مادة جديدة ، سوف يكون لها تسلسل مستقل. جعفر 718.db1.accdb.zip
  7. أخي وائل رجاء الالتزام بقوانين المنتدى ، كما نحن نلتزم به ، وقد كتبت لي على الخاص بأني حذفت احد مشاركاتك ، ولكني لم افعل ، والمشرفون الآخرون تصرفوا بها لأنها مشاركة في غير محلها ، عيناً كما هي مشاركتك هذه ، اما الآن ، فانا الذي تصرفت مع مشاركتك الاخير ، والخارجة عن اطار هذا الموضوع ، مشاركة في غير محلها. . جعفر
  8. وعليكم السلام انا لم اتدخّل في البرنامج/الكود ، ولا في تقريب الارقام ، إلا في التالي: . وهذا هو الكود Private Sub أمر8_Click() Dim strSQL As String Dim Add_it As Double strSQL = "DELETE G2.[رقم القسط], G2.رقم, G2.التاريخ, G2.المبلغ, G2.[المبلغ كتابه] FROM G2 WHERE (((G2.رقم)=[FORMS]![f1]![رقم]));" DoCmd.SetWarnings False DoCmd.RunSQL strSQL DoCmd.SetWarnings False Me.Requery DoCmd.GoToRecord , , acFirst For i = 0 To Forms![f1]![qastno] - 1 Me.رقم = Forms![f1]![رقم] Me.التاريخ = DateAdd("m", i, Forms![f1]![Date]) Me.المبلغ = Round(Forms![f1]![المبلغ] / Forms![f1]![qastno], 2) Add_it = Add_it + Nz(Me.المبلغ, 0) Me.المبلغ_كتابه = NoToTxt(Me.المبلغ, "ريال سعودي", "سنتيم") DoCmd.GoToRecord , , acNext Next 'Debug.Print Forms![f1]![المبلغ] & " >> " & Add_it If Add_it <> Forms![f1]![المبلغ] Then DoCmd.GoToRecord , , acNewRec Me.رقم = Forms![f1]![رقم] Me.التاريخ = DateAdd("m", i, Forms![f1]![Date]) Me.المبلغ = Forms![f1]![المبلغ] - Add_it Me.المبلغ_كتابه = NoToTxt(Me.المبلغ, "ريال سعودي", "سنتيم") End If DoCmd.Requery End Sub . جعفر
  9. وعليكم السلام تفضل . وهذا هو الكود Private Sub cmd_Next_Page_Click() On Error Resume Next Me.TabCtl0.Value = Me.TabCtl0.Value + 1 End Sub Private Sub cmd_Previous_Page_Click() On Error Resume Next Me.TabCtl0.Value = Me.TabCtl0.Value - 1 End Sub Private Sub cmd_lock_bbb_Click() Me.TabCtl0.Pages("bbb").Enabled = False End Sub Private Sub cmd_unlock_bbb_Click() Me.TabCtl0.Pages("bbb").Enabled = True End Sub جعفر 716.Tapages.accdb.zip
  10. وعليكم السلام 1. نعم تتشابه ، ولكن ليس 100% ، وهناك اوامر خاصة بالاكسس والتي لا توجد في VB ، 2. استعمل خاصية البحث لتجد بعض المواضيع التي تناقش طلبك جعفر
  11. السلام عليكم انا عملت بعض التعديلات ، وحذفت التاريخ من الربط بين النموذج الرئيسي والفرعي ، فرجاء تشوف اذا هذه النتيجة اللي تريدها جعفر 696.1.المستخدمين.accdb.zip
  12. وعليكم السلام هناك طريقة سهلة لهذا العمل واسمها "التنسيق الشرطي Condtional Formating" ، ولكنها لا تعمل الزر ، وانما على الحقول ، وهذه الروابط تشرح لك الطريقة جعفر
  13. رجاء توضع المرفق اللي انت اشتغلت عليه ، علشان نعمل التغيير عليه ، فالمرفق اعلاه مافيه تقرير. جعفر
  14. وعليكم السلام جرب هذا الكود Function Add_Sum() Me.sumation = Nz(Me.arab, 0) + Nz(Me.forgen, 0) End Function Private Sub arab_AfterUpdate() Call Add_Sum End Sub Private Sub forgen_AfterUpdate() Call Add_Sum End Sub Private Sub year_AfterUpdate() Me.id = Nz(DMax("[id]", "id", "[Glose]=" & [Forms]![main]![Glose]), 0) + 1 End Sub جعفر
  15. انا اعتذر عن مواصلة هذا الموضوع جعفر
  16. انا اعطيتك نصيحتي ، وانت صاحب البرنامج ، فاعمل ما تراه مناسبا ، والله سبحانه وتعالى أسأل ان يوفقك جعفر
  17. 1. أخي sofiane ، بعد 3 ايام و 40 مشاركة ولم تتوصل لما تريد!! 2. 3و4. جميع مشاركاتك كانت عن نموذج Admin!! 4. اولا: انت عملت اللازم كما هو واضح في الصورة الاخيرة ، والحمدلله وثانيا: هذه الطريقة غير صحيحة في العمل ، فيجب على Admin ان يسجل اسم المستخدم ويعطيه الصلاحيات ، وإلا فكما قلت انت ، الكل "يدخل يخربط"!! بالاضافة لما قلت اعلاه ، انا اعطيتك نصيحة وكل الذي تسأل عنه الآن ليس سوى القشرة ، فاعمل برنامجك من اول وجديد على اساس انك تعمل على مدينة واحدة فقط ، فالظاهر انه صار تغيير في طريقة عمل البرنامج ، بدل ان يخدم 8 مدن مرة واحدة ، فهو سيكون نسخة لكل مدينة ، وستضطر عند التعديل (لو البرنامج بطريقتك الحالية) الى ان تعدل على 8 برامج مختلفة ، لأن اسماء الجداول مختلفة ووووو ، بينما لو اخذت نصيحتي وعملت البرنامج من جديد على اساس مدينة واحدة ، لرأيت ان هذا الموضوع لم يكن له حاجة اصلا 2. نعم هذا الموضوع هو مجرد القشرة ، جعفر
  18. وعليكم السلام واهلا وسهلا بك في المنتدى ، قرب مافي شيء خاص للطباعة على واجهتي الورقة ، فهذه خاصية الطابعة ولا علاقة للأكسس فيها ، فقط تأكد عند اختيارك تصميم التقرير ، ان تختار حجم الورقة الصحيحة جعفر
  19. وعليكم السلام اخي طارق رجاء اعطنا مثال على النتيجة ، او مثالين. جعفر
  20. أخي sofiane رجاء فتح موضوع جديد للسؤال الجديد ، فأنت بهذه الطريقة تخالف قوانين المنتدى بوضع أكثر من سؤال في الموضوع. مخالف ، يُقفل. جعفر
  21. سؤال الموضوع كان: وقد اجبتك على جميع الاسئلة المتعلقة بهذا الخصوص عن طريق نموذجك Admin ، وبهذا يُعتبر الموضوع هذا منتهي اما اي شيء آخر تريد ان تضيف/تغير ، فالامر راجع لك وبالطريقة التي تعتقد انها مناسبة جميع اسئلتك تدور حول مدينة واحدة ، ولكن برنامجك فيه 8 مدن ، وهذا الذي عقّد لك الموضوع ، وخصوصا ان لكل مدينة برنامجها الخاص بها ومستخدميها ، نصيحتي ، انسى شيء اسمه مدينة ، واعمل برنامجك لمدينة واحدة فقط ، وجدول واحد ، وسترى ان جميع اسئلتك تستطيع الاجابة عليها ، وببساطة. والسلام خير ختام جعفر
  22. جوابك هو: ادخل في البرنامج ، افتح النموذج Admin في وضع التصميم ، وافتح قفل الحقلين اسم المستخدم وكلمة السر ، الآن اغلق البرنامج (ولا اقصد النموذج Admin ، وانما البرنامج) ، 1. افتح البرنامج من جديد ، ادخل اسم المستخدم a وكلمة سره هي a ، افتح نموذج Admin ، ادخل اسم مستخدم جديد ، وليكن a10 وكلمة السر a10 ، الآن لا يمكن للـ Admin a ان يعطي هذا المستخدم الجديد صلاحية أي مدينة غير CBR . 2. اغلق البرنامج وافتحه من جديد ، ادخل اسم المستخدم a10 وكلمة سره هي a10 ، افتح نموذج Admin ، سترى انه لا يستطيع الدخول الى هذا النموذج ويـ "يدخل يخربط" ، جرب واخبرني النتيجة ، لأننا ندور في نفس الحلقة من هذه الاسئلة عدة مشاركات. جعفر
  23. سيدي الفاضل في التقرير ، في قسم التفصيل ، وعلى حدث التنسيق ، اكمل هذا الكود: if forms!اسم النموذج!Ehdaa=-1 then myFont_Color=rgb(255,255,255) else myFont_Color=rgb(0,0,0) endif الآن تكتب اسماء الحقول التي لا تريدها ان تُظهر بياناتها me.field1.forecolor=myFont_Color me.اسم الحقل الثاني الذي في التقرير.forecolor=myFont_Color me.field3.forecolor=myFont_Color me.field4.forecolor=myFont_Color .... . ولكن تأكذ انه في حدث النقر على الزر في النموذج لفتح التقرير ، تأكد من حفظ البيانات قبل سطر فتح التقرير ، وتستطيع ان تكتب: refresh او docmd.runcommand.accmdsaverecord وبعدها يأتي امر فتح التقرير docmd.openreport ... جعفر
×
×
  • اضف...

Important Information