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

الردود الموصى بها

قام بنشر (معدل)
السلام عليكم ورحمة الله وبركاته
اولا احب أن أشكر كل عضو مساهم في هذا الصرح العلمي والذي ساهم في تطويري في عالم البرمجة حيث انني كنت اجد حلا للعديد من اسئلتي ... ولكن للاسف لم اجد حلا لهذا السوال والذي اتمنى من الله اولا ثم منكم مساعدتي في حله 
 
 
 
حيث يوجد في قاعدة البيانات المرفقة وهي خاصة باحدى ادارات وزارة الزراعة ثلاثة جداول وهي 
emimal: وهو جدول يحتوي اسماء الحيوانات
 
082e99e03001bb3.jpg
 
halat: وهو جدول الحالات التي راجعت الادارة وفيه (رقم الحالة ، تاريخ الحالة ، رقم هوية المربي ، نوع الحيوان الذي تم فحصه، واخيرا الملاحظات)
halaDes: وهو جدول مرتبط مع جدول الحالات وفيه ( رقم الحالة ، نوع المرض ، عدد الحيوانات المصابة ، عدد الحيوانات النافقة - الميته ) 
 
b616067b14c1d79.jpg
 
كما يوجد في قاعدة البيانات الاستعلامات التالية : 
q1 : وفيه جميع اسماء الحيوانات والحالات التي تمت مراجعتها وتاريخ المراجعة باستخدام العلاقة LEFT JOIN لعرض اسماء الحيوانات جميعها حيث يظهر ايضا اسماء الحيوانات حتى اذا لم يتم مراجعته
 
ad55f556b8354b9.jpg
 
q2 : وفيه عدد الحيوانات المصابة بعد ربط كل من Q1 و halades لايجاد مجموع الحيوانات المصابة ويظهر في هذا الاستعلام جميع الحيوانات حتى التي لم يتم معالجتها ويظهر النتيجة عندها تساوي 0 وذلك باستخدام الدالة Sum(NZ([Mos_Qu];0))
 
a7015ce6d2f563f.jpg
 
q3 : وهو نفس الاستعلام السابق ولكن بعد تحديد التاريخ وهنا تكمن المشكلة 
 
fa5d64e183cb5b2.jpg
 
المشكلة :::: 
حيث انني عندما اقوم بتحديد التاريخ لاتظهر اسماء الحيوانات كاملة فالذي يظهر هنا فقط اسم الحيوان الذي تم معالجته  في الاستعلام q3 
 
المطلوب :: 
كيف اقوم بايجاد أسماء و مجموع عدد الحيوانات والتي تمت معالجتها وذلك بعد تحديد التاريخ مع اظهار العدد 0 للحيوان الذي لم يتم معالجته في تلك الفترة
 
 
أتمنى ان أجد الحل لديكم ولكم مني كل الشكر والتقدير مسبقا
 

DBZer.rar

تم تعديل بواسطه Jalal Saif
قام بنشر

حسبما افتهم لي ان الاشكالية في الحيوانات اللي ما ظهرت بالاستعلام الاخير والتي لم تتم معالجتها هو وجود قيمة فارغة في سجلاتها null

لأنه وحسب علمي اكبر مشكلة تلخبط الاكسس هو وجود قيم غارغة في حقول عددية محسوبة.

جرب وادخل قيم صفرية في الحقول الفارغة ثم ضع شرط في تصميم الجداول يمنع القيم الفارغة بحقول الاعداد..

 

بالله لا يعرفوش الغنم ان راعي الغنم ما عرفش الاجابة خايف يسحبوا الثقة. ههههههههههههههههههه

قام بنشر

السلام عليكم 

اولا :

شكراااااا لكم لسرعة تفاعلكم معي في هذا الموضوع 

ثانيا :

اخي راعي الغنم الاشكالية ليست في عملية الجمع حيث انني استخدمت دالة

 

Sum(NZ([Mos_Qu];0)

ومهمة هذا الكود هو اعطاء قيمة 0 عند وجود حقل null ولك من كل الشكر على محاولتك واجتهادك معي لايجاد حل لهذا السوال وبالنسبة للغنم ما راح يوصلها خبر انك ما عرفت الحل  :wink2: 

ثالثا:

اخي عبدالرحمن بعد تنفيذ الفكرة التي ذكرتها يظهر في الاستعلام اسماء الحيوانات التي لم يتم ادخالها نهائيا في حالات سابقة ولكن الحيوانات التي تم ادخالها في حالات اخرى بعد أو قبل التاريخ المذكور في الشرط فهي لا تظهر 

 

والذي اريد هو اظهار كل الحيوانات الموجودة في جدول enimal  مع مجموع الحيوانات التي تم ادخالها في نفس التاريخ المحدد في الشرط

 

وهذي صورة للاستعلام بعد تنفيذ فكرتك 

 

8a194b0e296692c.jpg

 

حيث ظهر كل من (ارانب ، حمير ، قطط ، كلاب )

في حين لم يظهر كل من ( الماعز ، الضان ) لانه قد تم ادخاله مسبقا في تاريخ اخر 

 

المطلوب ان يظهر الاستعلام بهذا الشكل 

 

4a49e13022eefeb.jpg

 

اكرر لكم شكري واتمنى ان اجد اجابة لسؤالي  :fff: 

قام بنشر

السبب في ذلك أخي الكريم لأنك حددت في الاستعلام تاريخ معين يحصر ما بينه فقط ولا يعرض ما قبله أو بعده

 

على العموم أنشأت لك النموذج FrmQ3 وبه تاريخ من وإلى وبه تكتب الفترة بالتاريخ الهجري

وسينتج لك المطلوب من الاستعلام Q3 في شكل تقرير

بعدما تم تعديل المعيار في الاستعلام Q3 واصبح

Between [Forms]![FrmQ3]![Dat_from] And [Forms]![FrmQ3]![Dat_to] Or Is Null

* ملحوظة.. عدلت حقل التاريخ في جدول Halat لأنه كان حقل نصي وجعلته تاريخ وضبطت القاعدة على التقويم الهجري

 

أتمنى يكون المطلوب

تحياتي

DBZer----edit.rar

  • أفضل إجابة
قام بنشر

السلام عليكم ورحمة الله وبركاته 

 

 

نعاود الشكر لكم في هذا المنتدى واعضاءه و خاصة الاخوة المشرفين لما يقدموه لنا من نصائح و دروس تعليمية لبرامج الاوفيس وكل ما يختص بمجال الحاسب 

 

اخي عبدالرحمن لقد حاولت معي لايجاد حل للمشكلة التي وضعتها ولك مني كل التقدير والعرفان لمساهماتك وخاصة الاخيرة والتي منها استوحيت الفكرة لحل المشكلة التي واجهتني وهي استخدام الكود 

 

اخ عبدالرحمن المشكلة التي كنت اوجهها هي ايجاد مجموع الحيوانات التي تم مراجعتها في الادارة في تاريخ معين والخطأ الذي وقعت فيه (مع احترامي لك) حنى في التعديل انه عند تحديد التاريخ النتائج التي تظهر فقط الحيوانات التي لم يدخل لها اي مراجعة وكانت تاخذ القيمة 0 اما الحيوانات التي قامت بالمراجعتها كانت تاخذ مجموعها . 

 

ولهذا قمت بانشاء جدول جديد واسميته temptab والغرض منه يحفظ القيمة مؤقتا لجميع الحيوانات بعد تنفيذ هذا الكود 

Private Sub أمر0_Click()
On Error Resume Next
    'تعريف البيانات
    Dim strUpdate, strSave, strSQL, strSQL2  As String
    Dim rs1, rs2 As DAO.Recordset
    Dim db As Database
    'التاكد من ادخال البداية التاريخ
    If IsNull([Dat_from]) Then
    MsgBox "من فضلك أكتب التاريخ الأول", vbExclamation, "التاريخ الأول"
    [Dat_from].SetFocus
    Exit Sub
    End If
    'التاكد من ادخال نهاية التاريخ
    If IsNull([Dat_to]) Then
    MsgBox "من فضلك أكتب التاريخ الثاني", vbExclamation, "التاريخ الثاني"
    [Dat_to].SetFocus
    Exit Sub
    End If
    'الاتصال بقاعدة البيانات
    Set db = CurrentDb
     
    'اولا تصفير جميع الاعداد في جدول TempTab
    strUpdate = " UpDate TempTab set [qu] =0"
    DoCmd.SetWarnings False
    DoCmd.RunSQL (strUpdate)
     
    ' ثانيا الاستعلام الخاص بايجاد عدد الحيوانات التي قامت بمراجعة الادارة
    strSQL = "SELECT Q1.EnimalName AS [Enimal_Name], Sum(NZ([Mos_Qu],0)) AS [Enimal_Qu] "
    strSQL = strSQL + "FROM Q1 LEFT JOIN HalaDes ON Q1.hala_No = HalaDes.Hala_No "
    strSQL = strSQL + "WHERE (((Q1.Hala_Date) Between '" & Me.Dat_from & "' And '" & Me.Dat_to & "')) "
    strSQL = strSQL + "GROUP BY Q1.EnimalName"
    
    Set rs1 = db.OpenRecordset(strSQL)
    ' التاكد من عدد السجلات التي قامت بالمراجعة
    If rs1.RecordCount = 0 Then
        MsgBox "لايوجد مراجعات حسب التاريخ المدخل ", vbOKOnly, ".تنبيه."
        Exit Sub
    End If
    
    ' ثالثا الاستعلام الخاص بجدول الحيوانات وعددها
    strSQL2 = "SELECT enimal, qu FROM TempTab "
    
    Set rs2 = db.OpenRecordset(strSQL2)
          
    rs1.MoveFirst
    rs2.MoveFirst
          
    Do While Not rs1.EOF
    
       Do While Not rs2.EOF
       
           If Trim(rs1!Enimal_Name) = Trim(rs2!enimal) Then
               rs2.Edit
               rs2![qu] = rs1![Enimal_Qu]
               rs2.Update
           End If
           rs2.MoveNext
       Loop
       rs2.MoveFirst
       rs1.MoveNext
    Loop
    MsgBox " تم حفظ البيانات ", vbExclamation, ".تنبيه."

End Sub

وهذه صورة من العملية بعد تنفيذ البرنامج 

 

0425eca945b64bd.jpg

 

 

ومثلما اشغلتكم بهذه المشكلة احببت ان اشراككم الحل الذي توصلت اليه 

 

 

وشكراااااااا

DBZer--Fin.rar

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • اضف...

Important Information