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

jjafferr

أوفيسنا
  • Posts

    9,756
  • تاريخ الانضمام

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

  • Days Won

    396

Community Answers

  1. jjafferr's post in لما وضعت كود لالغاء رسالة ادخل قيمه معلمه ... اصبح البحث مش شغال (معدل) was marked as the answer   
    وعليكم السلام 🙂
     
    هذا لأن الاستعلام مصدر بيانات النموذج الفرعي ، لا يوجد فيه معيار التصفية ، فالظاهر انك حذفته بالخطأ 🙂

    .
    جعفر
  2. jjafferr's post in كيف نأخذ التاريخ من أول سجل وأخر سجل ونضعهم في رأس الصفحة للتقرير was marked as the answer   
    السلام عليكم 🙂
     
    في الواقع ، هذا السؤال من الاسئلة التي تُثار بين الحينه والاخرى ،
    واليك السبب في عدم امكانية الحصول على قيمة ذيل الصفحة ، في رأس الصفحة :
    التقرير عندك فيه 3 اقسام :

    .
    خلينا نشوف قيم التاريخ لصفحة:
     
    .
    والآن خلينا نشوف التاريخ ، بالطريقة اللي اقسام التقرير تشوفه ، بإستخدام حدث التنسيق لكل قسم:
    Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer) Debug.Print "Header= " & Me.Edate End Sub Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer) Debug.Print " Detail= " & Me.Edate End Sub Private Sub PageFooterSection_Format(Cancel As Integer, FormatCount As Integer) Debug.Print "Footer= " & Me.Edate Debug.Print End Sub .
    والنتيجة لصفحتين :
     
    Header= 18-Oct-20
      Detail= 18-Oct-20
      Detail= 19-Oct-20
      Detail= 20-Oct-20
      Detail= 21-Oct-20
      Detail= 22-Oct-20
      Detail= 23-Oct-20
      Detail= 24-Oct-20
      Detail= 25-Oct-20
      Detail= 26-Oct-20
      Detail= 27-Oct-20
      Detail= 28-Oct-20
      Detail= 29-Oct-20
      Detail= 30-Oct-20
      Detail= 31-Oct-20
      Detail= 01-Nov-20
      Detail= 02-Nov-20
      Detail= 03-Nov-20
      Detail= 04-Nov-20
      Detail= 05-Nov-20
      Detail= 06-Nov-20
      Detail= 07-Nov-20
      Detail= 08-Nov-20
    Footer= 07-Nov-20
    Header= 08-Nov-20
      Detail= 08-Nov-20
      Detail= 09-Nov-20
      Detail= 10-Nov-20
      Detail= 11-Nov-20
      Detail= 12-Nov-20
      Detail= 13-Nov-20
      Detail= 14-Nov-20
      Detail= 15-Nov-20
      Detail= 14-Jan-21
      Detail= 15-Jan-21
      Detail= 16-Jan-21
      Detail= 17-Jan-21
      Detail= 18-Jan-21
      Detail= 19-Jan-21
      Detail= 20-Jan-21
      Detail= 21-Jan-21
      Detail= 22-Jan-21
      Detail= 23-Jan-21
      Detail= 24-Jan-21
      Detail= 25-Jan-21
      Detail= 26-Jan-21
      Detail= 27-Jan-21
    Footer= 26-Jan-21
    .
    من هنا نلاحظ ان رأس الصفحة يرى اول سجل ، بينما ذيل الصفحة يرى آخر سجل ، والتقرير يطبع / يُظهر رأس الصفحة قبل ان تكون البيانات وصلت الى ذيل الصفحة (يعني ذيل الصفحة لا يحتوي على اي قيمة حينها ، لما رأس الصفحة يحصل على القيمة) ، لهذا سبب ما نحصل على التاريخين معا في رأس الصفحة !!
     
    -------------------------------------------------------------------------------------------------------
    الآن وبعد ان عرفنا طريقة عمل التقرير ، خلينا نستفيد منه في عمل المطلوب :
    خلينا نفتح التقرير بطريقة مخفية ، نأخذ قيمة سجل رأس صفحة التقرير وذيل صفحة التقرير لكل صفحة ، نحفظهم في مصفوفة Array ، ثم نفتح التقرير بالطريقة العادية ونأخذ بيانات رأس وذيل التقرير من المصفوفة ، ونضعهم في التقرير ، في رأس الصفحة 🙂
     
    1. عمل نموذج لحصر البيانات بين قيمتين (مع اننا لسنا بحاجة الى هذه الخطوة ، ولكن لأن جدولك في سجلات بدون قيم تواريخ ، فهذا يعمل خلل في الكود) ،
    ونعمل استعلام يصفي بيانات الجدول حسب تواريخ النموذج ، ويكون هذا الاستعلام مصدر بيانات التقرير:

    .
    2. النقر على زر فتح التقرير في النموذج ، يحتوي على هذا الكود :
    والذي يعمل مصفوفة لـ 100 صفحة في التقرير (اذا تقريرك يحتوي على صفحات اكثر ، فقط اجعل هذا الرقم اكبر ، ما يضر اذا تركته = 200 او اكثر)
    'accept adding dates Add_Dates = True 'initilize the arrays with a larg number of pages ReDim Fd(100) 'first E_date ReDim Ld(100) 'last E_date 'open the Report in Hidden mode, to put the E_dates in an array DoCmd.OpenReport "rpt_chfit", acViewPreview, , , acHidden 'close the Hidden Report DoCmd.Close acReport, "rpt_chfit" 'stop adding dates Add_Dates = False 'now open the Report in the normal way DoCmd.OpenReport "rpt_chfit", acViewPreview .
    وهناك وحدة نمطية تحتفظ بقيم المصفوفة ، حتى تكون متوفرة لجميع كائنات البرنامج:
    Option Compare Database Option Explicit Public Add_Dates As Boolean Public Fd() As Date 'first E_date Public Ld() As Date 'last E_date .
    والتقرير فيه هذا الكود:
    Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer) If Add_Dates = True Then 'add the array items, based on the Report page number Fd(Me.Page) = Me.F_Edate Else 'show the results Me.myF_Edate = Fd(Me.Page) Me.myL_Edate = Ld(Me.Page) End If End Sub Private Sub PageFooterSection_Format(Cancel As Integer, FormatCount As Integer) If Add_Dates = True Then 'add the array items Ld(Me.Page) = Me.L_Edate End If End Sub Private Sub Report_Close() If Add_Dates = False Then 'Empty the array ReDim Fd(0) 'first E_date ReDim Ld(0) 'last E_date End If End Sub .
    فإذا قيمة Add_Dates = True في النموذج ، فيعمل التقرير المخفي لعمل المصفوفة ،
    بينما عندما تتغير قيمة Add_Dates ، فيقوم التقرير بإظهار قيم المصفوفة في التقرير الغير مخفي ،
    وعند اغلاق التقرير ، نقوم بحذف بيانات المصفوفة 🙂
     
    لذلك ، وللحصول على النتائج الصحيحة ، يجب تشغيل التقرير من النموذج ، حتى يقوم الكود بما يجب 🙂 
     

    .

    .
    جعفر
    1277.addDateHideRport.accdb.zip
  3. jjafferr's post in كيف نأخذ التاريخ من أول سجل وأخر سجل ونضعهم في رأس الصفحة للتقرير was marked as the answer   
    السلام عليكم 🙂
     
    في الواقع ، هذا السؤال من الاسئلة التي تُثار بين الحينه والاخرى ،
    واليك السبب في عدم امكانية الحصول على قيمة ذيل الصفحة ، في رأس الصفحة :
    التقرير عندك فيه 3 اقسام :

    .
    خلينا نشوف قيم التاريخ لصفحة:
     
    .
    والآن خلينا نشوف التاريخ ، بالطريقة اللي اقسام التقرير تشوفه ، بإستخدام حدث التنسيق لكل قسم:
    Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer) Debug.Print "Header= " & Me.Edate End Sub Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer) Debug.Print " Detail= " & Me.Edate End Sub Private Sub PageFooterSection_Format(Cancel As Integer, FormatCount As Integer) Debug.Print "Footer= " & Me.Edate Debug.Print End Sub .
    والنتيجة لصفحتين :
     
    Header= 18-Oct-20
      Detail= 18-Oct-20
      Detail= 19-Oct-20
      Detail= 20-Oct-20
      Detail= 21-Oct-20
      Detail= 22-Oct-20
      Detail= 23-Oct-20
      Detail= 24-Oct-20
      Detail= 25-Oct-20
      Detail= 26-Oct-20
      Detail= 27-Oct-20
      Detail= 28-Oct-20
      Detail= 29-Oct-20
      Detail= 30-Oct-20
      Detail= 31-Oct-20
      Detail= 01-Nov-20
      Detail= 02-Nov-20
      Detail= 03-Nov-20
      Detail= 04-Nov-20
      Detail= 05-Nov-20
      Detail= 06-Nov-20
      Detail= 07-Nov-20
      Detail= 08-Nov-20
    Footer= 07-Nov-20
    Header= 08-Nov-20
      Detail= 08-Nov-20
      Detail= 09-Nov-20
      Detail= 10-Nov-20
      Detail= 11-Nov-20
      Detail= 12-Nov-20
      Detail= 13-Nov-20
      Detail= 14-Nov-20
      Detail= 15-Nov-20
      Detail= 14-Jan-21
      Detail= 15-Jan-21
      Detail= 16-Jan-21
      Detail= 17-Jan-21
      Detail= 18-Jan-21
      Detail= 19-Jan-21
      Detail= 20-Jan-21
      Detail= 21-Jan-21
      Detail= 22-Jan-21
      Detail= 23-Jan-21
      Detail= 24-Jan-21
      Detail= 25-Jan-21
      Detail= 26-Jan-21
      Detail= 27-Jan-21
    Footer= 26-Jan-21
    .
    من هنا نلاحظ ان رأس الصفحة يرى اول سجل ، بينما ذيل الصفحة يرى آخر سجل ، والتقرير يطبع / يُظهر رأس الصفحة قبل ان تكون البيانات وصلت الى ذيل الصفحة (يعني ذيل الصفحة لا يحتوي على اي قيمة حينها ، لما رأس الصفحة يحصل على القيمة) ، لهذا سبب ما نحصل على التاريخين معا في رأس الصفحة !!
     
    -------------------------------------------------------------------------------------------------------
    الآن وبعد ان عرفنا طريقة عمل التقرير ، خلينا نستفيد منه في عمل المطلوب :
    خلينا نفتح التقرير بطريقة مخفية ، نأخذ قيمة سجل رأس صفحة التقرير وذيل صفحة التقرير لكل صفحة ، نحفظهم في مصفوفة Array ، ثم نفتح التقرير بالطريقة العادية ونأخذ بيانات رأس وذيل التقرير من المصفوفة ، ونضعهم في التقرير ، في رأس الصفحة 🙂
     
    1. عمل نموذج لحصر البيانات بين قيمتين (مع اننا لسنا بحاجة الى هذه الخطوة ، ولكن لأن جدولك في سجلات بدون قيم تواريخ ، فهذا يعمل خلل في الكود) ،
    ونعمل استعلام يصفي بيانات الجدول حسب تواريخ النموذج ، ويكون هذا الاستعلام مصدر بيانات التقرير:

    .
    2. النقر على زر فتح التقرير في النموذج ، يحتوي على هذا الكود :
    والذي يعمل مصفوفة لـ 100 صفحة في التقرير (اذا تقريرك يحتوي على صفحات اكثر ، فقط اجعل هذا الرقم اكبر ، ما يضر اذا تركته = 200 او اكثر)
    'accept adding dates Add_Dates = True 'initilize the arrays with a larg number of pages ReDim Fd(100) 'first E_date ReDim Ld(100) 'last E_date 'open the Report in Hidden mode, to put the E_dates in an array DoCmd.OpenReport "rpt_chfit", acViewPreview, , , acHidden 'close the Hidden Report DoCmd.Close acReport, "rpt_chfit" 'stop adding dates Add_Dates = False 'now open the Report in the normal way DoCmd.OpenReport "rpt_chfit", acViewPreview .
    وهناك وحدة نمطية تحتفظ بقيم المصفوفة ، حتى تكون متوفرة لجميع كائنات البرنامج:
    Option Compare Database Option Explicit Public Add_Dates As Boolean Public Fd() As Date 'first E_date Public Ld() As Date 'last E_date .
    والتقرير فيه هذا الكود:
    Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer) If Add_Dates = True Then 'add the array items, based on the Report page number Fd(Me.Page) = Me.F_Edate Else 'show the results Me.myF_Edate = Fd(Me.Page) Me.myL_Edate = Ld(Me.Page) End If End Sub Private Sub PageFooterSection_Format(Cancel As Integer, FormatCount As Integer) If Add_Dates = True Then 'add the array items Ld(Me.Page) = Me.L_Edate End If End Sub Private Sub Report_Close() If Add_Dates = False Then 'Empty the array ReDim Fd(0) 'first E_date ReDim Ld(0) 'last E_date End If End Sub .
    فإذا قيمة Add_Dates = True في النموذج ، فيعمل التقرير المخفي لعمل المصفوفة ،
    بينما عندما تتغير قيمة Add_Dates ، فيقوم التقرير بإظهار قيم المصفوفة في التقرير الغير مخفي ،
    وعند اغلاق التقرير ، نقوم بحذف بيانات المصفوفة 🙂
     
    لذلك ، وللحصول على النتائج الصحيحة ، يجب تشغيل التقرير من النموذج ، حتى يقوم الكود بما يجب 🙂 
     

    .

    .
    جعفر
    1277.addDateHideRport.accdb.zip
  4. jjafferr's post in كيف نأخذ التاريخ من أول سجل وأخر سجل ونضعهم في رأس الصفحة للتقرير was marked as the answer   
    السلام عليكم 🙂
     
    في الواقع ، هذا السؤال من الاسئلة التي تُثار بين الحينه والاخرى ،
    واليك السبب في عدم امكانية الحصول على قيمة ذيل الصفحة ، في رأس الصفحة :
    التقرير عندك فيه 3 اقسام :

    .
    خلينا نشوف قيم التاريخ لصفحة:
     
    .
    والآن خلينا نشوف التاريخ ، بالطريقة اللي اقسام التقرير تشوفه ، بإستخدام حدث التنسيق لكل قسم:
    Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer) Debug.Print "Header= " & Me.Edate End Sub Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer) Debug.Print " Detail= " & Me.Edate End Sub Private Sub PageFooterSection_Format(Cancel As Integer, FormatCount As Integer) Debug.Print "Footer= " & Me.Edate Debug.Print End Sub .
    والنتيجة لصفحتين :
     
    Header= 18-Oct-20
      Detail= 18-Oct-20
      Detail= 19-Oct-20
      Detail= 20-Oct-20
      Detail= 21-Oct-20
      Detail= 22-Oct-20
      Detail= 23-Oct-20
      Detail= 24-Oct-20
      Detail= 25-Oct-20
      Detail= 26-Oct-20
      Detail= 27-Oct-20
      Detail= 28-Oct-20
      Detail= 29-Oct-20
      Detail= 30-Oct-20
      Detail= 31-Oct-20
      Detail= 01-Nov-20
      Detail= 02-Nov-20
      Detail= 03-Nov-20
      Detail= 04-Nov-20
      Detail= 05-Nov-20
      Detail= 06-Nov-20
      Detail= 07-Nov-20
      Detail= 08-Nov-20
    Footer= 07-Nov-20
    Header= 08-Nov-20
      Detail= 08-Nov-20
      Detail= 09-Nov-20
      Detail= 10-Nov-20
      Detail= 11-Nov-20
      Detail= 12-Nov-20
      Detail= 13-Nov-20
      Detail= 14-Nov-20
      Detail= 15-Nov-20
      Detail= 14-Jan-21
      Detail= 15-Jan-21
      Detail= 16-Jan-21
      Detail= 17-Jan-21
      Detail= 18-Jan-21
      Detail= 19-Jan-21
      Detail= 20-Jan-21
      Detail= 21-Jan-21
      Detail= 22-Jan-21
      Detail= 23-Jan-21
      Detail= 24-Jan-21
      Detail= 25-Jan-21
      Detail= 26-Jan-21
      Detail= 27-Jan-21
    Footer= 26-Jan-21
    .
    من هنا نلاحظ ان رأس الصفحة يرى اول سجل ، بينما ذيل الصفحة يرى آخر سجل ، والتقرير يطبع / يُظهر رأس الصفحة قبل ان تكون البيانات وصلت الى ذيل الصفحة (يعني ذيل الصفحة لا يحتوي على اي قيمة حينها ، لما رأس الصفحة يحصل على القيمة) ، لهذا سبب ما نحصل على التاريخين معا في رأس الصفحة !!
     
    -------------------------------------------------------------------------------------------------------
    الآن وبعد ان عرفنا طريقة عمل التقرير ، خلينا نستفيد منه في عمل المطلوب :
    خلينا نفتح التقرير بطريقة مخفية ، نأخذ قيمة سجل رأس صفحة التقرير وذيل صفحة التقرير لكل صفحة ، نحفظهم في مصفوفة Array ، ثم نفتح التقرير بالطريقة العادية ونأخذ بيانات رأس وذيل التقرير من المصفوفة ، ونضعهم في التقرير ، في رأس الصفحة 🙂
     
    1. عمل نموذج لحصر البيانات بين قيمتين (مع اننا لسنا بحاجة الى هذه الخطوة ، ولكن لأن جدولك في سجلات بدون قيم تواريخ ، فهذا يعمل خلل في الكود) ،
    ونعمل استعلام يصفي بيانات الجدول حسب تواريخ النموذج ، ويكون هذا الاستعلام مصدر بيانات التقرير:

    .
    2. النقر على زر فتح التقرير في النموذج ، يحتوي على هذا الكود :
    والذي يعمل مصفوفة لـ 100 صفحة في التقرير (اذا تقريرك يحتوي على صفحات اكثر ، فقط اجعل هذا الرقم اكبر ، ما يضر اذا تركته = 200 او اكثر)
    'accept adding dates Add_Dates = True 'initilize the arrays with a larg number of pages ReDim Fd(100) 'first E_date ReDim Ld(100) 'last E_date 'open the Report in Hidden mode, to put the E_dates in an array DoCmd.OpenReport "rpt_chfit", acViewPreview, , , acHidden 'close the Hidden Report DoCmd.Close acReport, "rpt_chfit" 'stop adding dates Add_Dates = False 'now open the Report in the normal way DoCmd.OpenReport "rpt_chfit", acViewPreview .
    وهناك وحدة نمطية تحتفظ بقيم المصفوفة ، حتى تكون متوفرة لجميع كائنات البرنامج:
    Option Compare Database Option Explicit Public Add_Dates As Boolean Public Fd() As Date 'first E_date Public Ld() As Date 'last E_date .
    والتقرير فيه هذا الكود:
    Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer) If Add_Dates = True Then 'add the array items, based on the Report page number Fd(Me.Page) = Me.F_Edate Else 'show the results Me.myF_Edate = Fd(Me.Page) Me.myL_Edate = Ld(Me.Page) End If End Sub Private Sub PageFooterSection_Format(Cancel As Integer, FormatCount As Integer) If Add_Dates = True Then 'add the array items Ld(Me.Page) = Me.L_Edate End If End Sub Private Sub Report_Close() If Add_Dates = False Then 'Empty the array ReDim Fd(0) 'first E_date ReDim Ld(0) 'last E_date End If End Sub .
    فإذا قيمة Add_Dates = True في النموذج ، فيعمل التقرير المخفي لعمل المصفوفة ،
    بينما عندما تتغير قيمة Add_Dates ، فيقوم التقرير بإظهار قيم المصفوفة في التقرير الغير مخفي ،
    وعند اغلاق التقرير ، نقوم بحذف بيانات المصفوفة 🙂
     
    لذلك ، وللحصول على النتائج الصحيحة ، يجب تشغيل التقرير من النموذج ، حتى يقوم الكود بما يجب 🙂 
     

    .

    .
    جعفر
    1277.addDateHideRport.accdb.zip
  5. jjafferr's post in مساعدة في انشاء كود was marked as the answer   
    وعليكم السلام 🙂
     
    وبدون ان انزل المرفق :
    if me.parent.name="F1" then me.parent!z=me!x * me!y else me.parent!z=me!x + me!y endif .
    الامر Parent معناه الوالدين ، اي ان والدي النموذج الفرعي C.
     
    جعفر
  6. jjafferr's post in ظهر رأس العمود فى اعلي العمودين was marked as the answer   
    وعليكم السلام 🙂
     
    نريد نعمل تجميع وهمي :
     

    .

    .

    .
    ونعطيه اي اسم خرافي ، مثلا نقطة (.) 

    .

    .

    .

    .
    والنتيجة

    .
    جعفر
    1266.قائمة.accdb.zip
  7. jjafferr's post in كود حذف اكثر من حقل was marked as the answer   
    تفضل يا سيدي 🙂
     
    عملت لك جدول tbl_Student_info ،
    بينما استعلام qry_Student_info يجمع الجدول السابق مع جدول الجدول الجديد :

    .
    ولما تريد تستعمل النماذج او التقارير ، استعمل الاستعلام qry_Student_info كمصدر بيانات لها ،
    بس رجاء الانتباه ، تأكد ان اسماء الطلبة موجودة ف الجدول tbl_Student_info ، والا فإنها لن تظهر في الاستعلام 🙂
     
    جعفر
    ‏‏StuData.zip
  8. jjafferr's post in مساعدة في تحويل كود من نصي الى رقمي was marked as the answer   
    السلام عليكم 🙂
     
    لو تتبع هذه الطريقة ، ما تتعب 🙂
     
     
    جعفر
  9. jjafferr's post in امر الرجوع الى الكومبوكس السابق was marked as the answer   
    اللي فهمته :
     
    عندك الحقل A , وخرجت منه الى الكومبوبوكس ، وبعدين تريد ترجع مرة ثانية من الكومبوبوكس الى الحقل A :
    هذا الكود يكون في احد احداث الكومبوبوكس :
    Dim ctrl As Control Set ctrl = Screen.PreviousControl DoCmd.GoToControl ctrl.Name  
    واذا تريده بدلا من DoCmd.CancelEvent
    If IsNull([Namee]) Then MsgBox "لاتترك الحقل فارغاً **هذا الحقل اجباري ** ادخل الاسم الرباعي", vbCritical + vbMsgBoxRight, "تحذير ..!!" 'DoCmd.CancelEvent Dim ctrl As Control Set ctrl = Screen.PreviousControl DoCmd.GoToControl ctrl.Name End If  
    جعفر
  10. jjafferr's post in فتح مجلد was marked as the answer   
    وعليكم السلام 🙂 
     
    واهلا وسهلا بك في المنتدى 🙂 
     
    تفضل :
    application.FollowHyperlink "D:\"  
    جعفر
  11. jjafferr's post in مساعدة في تشفير الرسائل was marked as the answer   
    السلام عليكم 🙂 
     
    ابسط انواع التشفير
    التشفير ، Code : هو تغيير حرف مكان حرف آخر ، يعني بدل تفاح ، ممكن يصير ثقبخ ، كيف :
    رجاء النظر في الجدول التالي:
    الحرف الاصل ورقمه : الحرف البديل ورقمه
    ت 1578 : ث 1579
    ف 1601 : ق 1602
    ا 1575  : ب 1576
    ح 1581 : خ 1582
    تفاح    : ثقبح
    نلاحظ اننا اضفنا الرقم 1 (مفتاح الشفرة) الى قيمة الحرف الاصل ، لنحصل على قيمة الحرف البديل .
    في هذه الحالة لو غيرنا مفتاح الشفرة الى رقم آخر ، او جعلنا مفتاح الشفرة عبارة عن معادلة ، لأصبحت الشفرة اصعب 🙂 

     
    فك الشفرة ، DeCode : هو حذف مفتاح الشفرة من رقم الحرف الجديد ، حتى يرجع لقيمته السابق 🙂 
     
    فإذن قوة التشفير له علاقة بمفتاح الشفرة 🙂 
    لهذا السبب ، لا ترسل مفتاح الشفرة مع الرسالة 🙂 
     

    .
    ارفق لك هذا المثال

    .
    وهذه الوحدة النمطية التي تقوم بالعمل
    Public Function Code_it_T(txt As String, iKey As Integer) As String Dim i, L As Integer L = Len(txt) For i = 1 To L Code_it_T = Code_it_T & ChrW(AscW(Mid(txt, i, 1)) + iKey) Next i End Function Public Function DeCode_it_T(txt As String, iKey As Integer) As String Dim i, L As Integer L = Len(txt) For i = 1 To L DeCode_it_T = DeCode_it_T & ChrW(AscW(Mid(txt, i, 1)) - iKey) Next i End Function .
     
     
    .
    ويمكنك إضافة هذا المثال لمكتبتك ايضا 🙂 
     
    جعفر
    1254.Code_Decode.mdb.zip
  12. jjafferr's post in سؤوال مهم في خاصية تقسيم قاعدة البيانات was marked as the answer   
    وعليكم السلام 🙂 
     
    هذا رد على سؤالك :
     
    .
    والبرنامج يتحكم بهذا الكم الهائل من المرفقات في اول 2018 ، وفي 8/2019 وصل حجم المرفقات الى اكثر من 1 تيرا بايت :
     
    جعفر
  13. jjafferr's post in عدم فتح تقرير طالما البيانات الخاصة بة فارغة was marked as the answer   
    بس الظاهر انك فهمت السؤال صح ، بينما انا قرأت رأس الموضوع ، وما لاحظت الملاحظة إلا بعد ان وضعت ملاحظتي !!
    على العموم ، هذه طريقتي ، لحدث الزر (طبعا بالاضافة الى الكود في مشاركتي السابقة) :
    Private Sub T_m_Click() On Error GoTo err_T_m_Click If Len(Me.FROM & "") = 0 Then MsgBox "رجاء تعبئة التاريخ من" Me.FROM.SetFocus ElseIf Len(Me.TO & "") = 0 Then MsgBox "رجاء تعبئة التاريخ الى" Me.TO.SetFocus ElseIf Len(Me.PN & "") = 0 Then MsgBox "رجاء اختيار اسم المشروع" Me.PN.SetFocus Me.PN.Dropdown Else DoCmd.OpenReport "All_Proj", acViewPreview End If Exit_T_m_Click: Exit Sub err_T_m_Click: If Err.Number = 2501 Then 'No data Else MsgBox Err.Number & vbCrLf & Err.Description End If Resume Exit_T_m_Click End Sub .
    جعفر
    1253.APE (1).accdb.zip
  14. jjafferr's post in تحويل ملفات pdf was marked as the answer   
    السلام عليكم 🙂
     
    الخطوة الاولى وبالتفصيل هي تصفية البيانات :
     
    .
    وهذا الكود كاملا لبرنامجك ، وحفظ البيانات في الجدول:
    Public Function Split_Names() Dim rst, rst2 As DAO.Recordset Dim x() As String: Dim x2() As String Dim i, j As Long Dim a As String Set rst = CurrentDb.OpenRecordset("Select * From MyTxt_from_pdf") Set rst2 = CurrentDb.OpenRecordset("Select * From tbl_Names") ' Do Until rst.EOF ' For i = 1 To Len(rst!Field1) ' a = Mid(rst!Field1, i, 1) 'الحروف/الارقام/العلامات ' a = a & "(" & AscW(a) & ") " 'رقمها AscW ' Debug.Print a ' Next i ' loop Do Until rst.EOF x = Split(rst!Field1, ChrW(8236) & ChrW(8236) & ChrW(32) & ChrW(32)) 'Name + ID For i = LBound(x) To UBound(x) 'Debug.Print x(i) x2 = Split(x(i), ChrW(8236) & ChrW(32) & ChrW(32)) For j = LBound(x2) To UBound(x2) 'Debug.Print x2(j) a = Replace(x2(j), ChrW(8234), "") a = Replace(a, ChrW(8235), "") a = Replace(a, ChrW(8236), "") a = Trim(a) 'If j / 2 = Int(j / 2) Then If j = 0 Then 'even rst2.AddNew rst2!iName = a Else 'odd 'the numbers in Arabic are different (text) than those in English, so we have to get the value of the normal number '0=1632, 1=1633, 2=1634, 3=1635, 4=1636, 5=1637, 6=1638, 7=1639, 8=1640, 9=1641 'Arabic Numbers '0=48, 1=49, 2=50, 3=51, 4=52, 5=53, 6=54, 7=55, 8=56, 9=57 'ascii 'instead of using long if statements, lets make a formula: 0=48=1632-1584 rst2!iID = ChrW(AscW(a) - 1584) rst2.Update End If 'Debug.Print a Next j Next i rst.MoveNext Loop rst.Close: Set rst = Nothing End Function .
    اما البحث عن مشكلة مع اللغة العربية في ال او لفظ الجلالة ، فانا عملت وحدة نمطية تقوم بتغيير الاسم ، ولكن يتوجب عليك اضافة بقية الاسماء المقطوعة في الوحدة النمطية ، في المتغير arr :
    Public Function Reconstruct_Allah_Name(N As String) As String Dim arr() Dim x arr = Array("عطاا", "عبدا") For Each x In arr If InStr(N, x & " ") > 0 Then 'there is a space after the missing name Reconstruct_Allah_Name = Replace(N, x, x & "لله") Exit Function ElseIf InStr(N, x) + Len(x) - 1 = Len(N) Then 'the missing name is at the end of the line Reconstruct_Allah_Name = Replace(N, x, x & "لله") Exit Function Else Reconstruct_Allah_Name = N End If Next x End Function .
    ثم يقوم استعلام التحديث qry_Reconstruct_Allah_Name بمناداة الوحدة النمطية اعلاه ، وتغيير الكلمات 🙂 
     
    والعمل يتم بالنقر على الزر المشار اليه في الصورة ادناه ، في النموذج Form1 :

    .
    جعفر
    1251.db1.mdb.zip
  15. jjafferr's post in كود استيراد ملف اكسل من نوع CSV was marked as the answer   
    🙂
     
    هذا الكود الكامل :
    Dim TextLine Dim x() As String Dim TESTFILE As String Dim rst As DAO.Recordset Set rst = CurrentDb.OpenRecordset("Select * From Mobaile") TESTFILE = Application.CurrentProject.Path & "\Template.csv" Open TESTFILE For Input As #1 ' Open file. Do While Not EOF(1) ' Loop until end of file. Line Input #1, TextLine ' Read line into variable. 'Debug.Print TextLine ' Print to the Immediate window. x = Split(TextLine, ";") If x(0) <> "IdentificationID" Then rst.AddNew rst!IdentificationID = x(0) rst!FullName = x(1) rst!MobileNumber = x(2) rst!ClassName = x(3) rst.Update End If Loop Close #1 ' Close file. rst.close: set rst = nothing  
    جعفر
  16. jjafferr's post in جلب تاريخ السيرفر بدل من تاريخ الجهاز الي به البرنامج was marked as the answer   
    وجدت كود ليقرأ من SQL Server مباشرة ، وتركته في البرنامج ، ولكني ام افعّله :
    Dim cmd As New ADODB.Command Dim RS As New ADODB.Recordset cmd.ActiveConnection = "Provider=SQLOLEDB;DataSource=yourserver;Database=yourDB;UID=test;PWD=test;" cmd.ActiveConnection.CursorLocation = adUseClient cmd.CommandText = "Select getdate()" Set RS = cmd.Execute Debug.Print RS(0) RS.Close cmd.ActiveConnection.Close .
     
    استخدم دالة Format ، بحيث time_date_server هو حقل تاريخ السيرفر ، هكذا:
    if format(time_date_server ,"dd/mm/yy") <> format(date() ,"dd/mm/yy") then msgbox "تاريخ السيرفر لا يطابق تاريخ الكمبيوتر" elseif format(time_date_server ,"hh") <> format(date() ,"hh") then msgbox "ساعة السيرفر لا تطابق ساعة الكمبيوتر" end if  
    جعفر
  17. jjafferr's post in مشكلة في جلب بيانات جدول المواد من اكسل was marked as the answer   
    اضفت الاستعلام الجديد add6 للصفوف ذات الـ 6 حصص , والاستعلام نسخة معدلة من الاستعلام السابق add ،
     
    عندما يكون الحقل F25 الذي به رقم الطالب للحصص الـ 7 ، فارغ ، نستعمل الاستعلام add6 :

    .
    جعفر
    stu_Table.zip
  18. jjafferr's post in عدم استيراد صف محدد من اكسل was marked as the answer   
    انا دائما افضل ان استعمل الاستعلام العادي بدلا عن استعلام الكود ، مع ان استعلام الكود اصعب في انشائه ،
    ولكن الاستعلام العادي ابسط في التعامل معاه ،
    لذا ، قمت بطلب اعطائي جملة SQL من الكود هكذا :

    .
    ثم عمل استعلام فارغ ، ثم بالزر اليمين ، نختار SQL ، ونلصق جملة SQL التي في المربع الاخير (رجاء الانتباه ، اذا الجملة فيها كلمات عربية ، فقبل ان تعمل نسخ ، يجب ان تتأكد ان لغة الكيبورد هي العربية ، وإلا فبدل الكلمات العربية سترى كلمات اغريقية غريبة !! )

    .
    ثم نرى الاستعلام بالطريقة المعتادة في وضع التصميم:

    .
    وفي وضع العرض ، نريد ان نرى اي من بيانات السطر الاول الذ لا تريده:

    .
    سنأخذ كلمة "سنة الالتحاق" ونضعه في المعيار :

    .
    والنتيجة ، وقد تم ازالة السجل الاول :

    .
    الآن نعمل تغيير في الكود ، فنطلب من الكود استعمال هذا الاستعلام بدلا عن جملة SQL التي في الكود :

    .
    والسلام 🙂
     
    كما لاحظت انك تحتفظ بنسخة من الملفات ، وبها تاريخ اليوم ، فالافضل ان تحفظه بتنسيق yyyy-mm-dd علشان تسلسل الملفات في المجلد يطلع صح 🙂 
     
    جعفر
    stu_Table.zip
  19. jjafferr's post in منع فتح قائمة منسدلة was marked as the answer   
    السلام عليكم 🙂 
     
    في عندنا مثل عماني يقول: ابيه (يعني اريده) بس تف عليه 🙂 
    يعني انت تريد الكومبوبوكس لميزاته ، وبعدين تريد ان توقف ميزاته 
     
    احد الحلول انك تستخدم مربع نص عادي ، وعلى حدث بعد التحديث تبحث في الجدول عن القيمة ، او
    تظهر سطر واحد فقط ، وتظهر اسم العمود
     

     
    جعفر
  20. jjafferr's post in من أسرع DLookup أم Recordset was marked as the answer   
    وعليكم السلام 🙂
     
    سيدي الفاضل ، سؤالك مهم ، ولكن صيغة الكود غير صحيحة !!
     
    لما نقول ان Dlookup بطيء ، فمقارنته تكون مع نتائج استعلام بدون Dlookup ،
    اما لما نقول لا تستعملوا Dlookup ، فهو في الاستعلام ، مثل:

    .
    اما اذا كانت مقارنتك في الكود بين Dlookup و Recordset :
    1. لإستخراج قيمة واحدة فقط ، فطبيعي Recordset تكون ابطأ ، لأنها تعمل نسخة من البيانات وتحتفظه في الذاكرة المؤقته RAM في الكمبيوتر ، فهذه العملية تأخذ وقت ،
    2. إستخراج اكثر من قيمة/سجل ، فيكون Recordset اسرع ، لأنه بعد حفظ القيمة في ذاكرة الكمبيوتر ، يكون الحصول على البيانات منها اسرع ، ولكن بشرط ان تعمل الكود بالطريقة الصحيحة (انظر الكود) ،
     
    انا عملت نسخة من الجدول test واسميته test2 ، وعملت حقل tst مفهرس، لأنك تستخدمه كمعيار للحصول على النتائج التي تريدها ، ثم ضغط واصلاح للبرنامج حتى يستفيد البرنامج من فهرست الحقل،
    وعليه ، اصبح جلب النتائج من الجدول الثاني اسرع بكثير !!
    اليك بعض التجارب التي عملتها للجدولين : 
    Option Compare Database Private Sub Commande0_Click() Dim t, t11, t12, t13, t14, t21, t22, t23, t24 As Single Dim r As Long 'table test '1 Dlookup t = Timer r = Nz(DLookup("id", "test", "tst='mohamed'"), 0) t11 = Timer - t t11 = Format(t11, "#0.0####") '2 qry_test t = Timer r = DCount("*", "qry_test") t12 = Timer - t t12 = Format(t12, "#0.0####") '3 Recordset_1 t = Timer r = fff_1("test", "mohamed") t13 = Timer - t t13 = Format(t13, "#0.0####") '4 Recordset_2 t = Timer r = fff_2("test", "mohamed") t14 = Timer - t t14 = Format(t14, "#0.0####") 'table test2 '1 Dlookup t = Timer r = Nz(DLookup("id", "test2", "tst='mohamed'"), 0) t21 = Timer - t t21 = Format(t21, "#0.0####") '2 qry_test t = Timer r = DCount("*", "qry_test2") t22 = Timer - t t22 = Format(t22, "#0.0####") '3 Recordset_1 t = Timer r = fff_1("test2", "mohamed") t23 = Timer - t t23 = Format(t23, "#0.0####") '4 Recordset_2 t = Timer r = fff_2("test2", "mohamed") t24 = Timer - t t24 = Format(t24, "#0.0####") Debug.Print "Dlookup:" & vbCrLf & _ "table test: " & t11 & vbTab & " test2: " & t21 & vbCrLf Debug.Print "qry_test, test2:" & vbCrLf & _ "table test: " & t12 & vbTab & " test2: " & t22 & vbCrLf Debug.Print "Recordset_1:" & vbCrLf & _ "table test: " & t13 & vbTab & " test2: " & t23 & vbCrLf Debug.Print "Recordset_2:" & vbCrLf & _ "table test: " & t14 & vbTab & " test2: " & t24 MsgBox "Done" End Sub Public Function fff_1(tbl_Name As String, tt2 As String) As Long Dim db As DAO.Database Dim rs As DAO.Recordset Dim rr As Long Set db = CurrentDb Set rs = db.OpenRecordset("Select id, tst From " & tbl_Name) rs.FindFirst "[tst]='" & tt2 & "'" If rs.NoMatch Then fff_1 = 0 Else fff_1 = rs!id End If rs.Close: Set rs = Nothing End Function Public Function fff_2(tbl_Name As String, tt2 As String) As Long Dim db As DAO.Database Dim rs As DAO.Recordset Dim rr As Long Set db = CurrentDb Set rs = db.OpenRecordset("Select id, tst From " & tbl_Name & " WHERE tst='" & tt2 & "'") rs.MoveLast: rs.MoveFirst fff_2 = rs.RecordCount rs.Close: Set rs = Nothing End Function  
    والنتائج من "كمبيوتري القديم" بالثواني واجزاء من الثانية :
    Dlookup: table test: 0.1875 test2: 0.0 qry_test, test2: table test: 0.375 test2: 0.00391 Recordset_1: table test: 1.19531 test2: 0.17578 Recordset_2: table test: 0.38281 test2: 0.00391  
     
    اما اذا وضعنا الدالة Dlookup في استعلام ، وهو الخطأ ، فنتيجة الاستعلام التالي ، والوقت الذي اخذته:

     
    والوقت الذي اخذته بالثانية وجزء من الثانية 997.8555  
     
    جعفر
  21. jjafferr's post in مساعدة في تعديل معادلة was marked as the answer   
    وعليكم السلام 🙂
     
    طريقة اخوي ابوياسين هي ، اذا كان الحقل نص :
     
    اما هذه الطريقة ، فلحقل النص والرقم كذلك :
    =NZ(DSum("[chemical_element]","Qlaboratory","[typeelement]='active'"),0)  
    جعفر
  22. jjafferr's post in مساعد في تحويل متغير من رقمي الى نصي في الكود was marked as the answer   
    وعليكم السلام 🙂
    Dim X As Integer X = DCount("*", "[TBvirus]", "[virusid]='" & Me.idvirus & "' AND [idlaboratory]=Forms![Flaboratory]![idlaboratory]") If X > 0 Then MsgBox "error87", 48, "error" DoCmd.CancelEvent End If  
    جعفر
  23. jjafferr's post in مساعدة في الترجع عن التغيرات في الحقول was marked as the answer   
    وعليكم السلام 🙂
     
    هناك امر لكل جقل اسمه "القيمة القديمة/السابقة" ، هكذا:
    me.ABC = me.ABC.oldvalue او me.ABC.value = me.ABC.oldvalue  
    والشرط الوحيد في توفر القيمة السابقة هي انك لم تقم بحفظ السجل بعد (او تنتقل الى سجل آخر).
     
    جعفر
  24. jjafferr's post in استفسار بخصوص متغيرات was marked as the answer   
    يعني قصدك:
     
    بسبب ان النجار يستطيع استعمال مفك البراغي في كل اعماله:

    .
    فمافي داعي لبقية الادوات:

    .
     
     
    او لأننا ممكن نستعمل حقل النص لكل البيانات: نص و رقم و تاريخ ،
    فمافي داعي استعمال انواع الحقول الاخرى !!
     
    احد اهم الاسباب ان لكل نوع ومتغير عمله ، هو السرعة والدقة في العمل 🙂
     
    جعفر
  25. jjafferr's post in مساعدة في تعديل كود was marked as the answer   
    وعليكم السلام 🙂
     
    اذا اعطيت القيمة في الكود mij= "jjafferr" u = mij اما اذا كانت القيمة في النموذج u = me.mij  
    جعفر
×
×
  • اضف...

Important Information