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

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

قام بنشر

السلام عليكم اساتذة

لدي مشكلة وهي عدم ظهور النتيجة صحيحة في جملة  MySQL   

ةخاصة Lblt9e

والتي تقوم بحساب عدد السجلات الموجود بدون تكرار 

ارجو التعديل

2024-12-31_21-29-39.jpg.527a410a53ba438f532edcd10fe94228.jpg

 

 

Me.t9 = Nz(DSum("[Loan_Made]", "[tbl_Loans]", "Year ([Auto_Date])=" & Me.txtYear & " And [Loan_ID] > 0  "), 0) - Nz(DSum("[Payment_Made]", "[tbl_Loans]", "Year ([Auto_Date])=" & Me.txtYear & " And [Loan_ID] > 0  "), 0)
 MySQL = ""
 MySQL = "Select DISTINCT(Employeeid) From tbl_Loans"
 MySQL = MySQL & " Where " & "Year ([Auto_Date])=" & Me.txtYear & "And [Loan_ID] > 0 And ([Loan_Made]-[Payment_Made])=0"   
 Set rst = CurrentDb.OpenRecordset(MySQL)
 Me.Lblt9 = rst.RecordCount

'T9E
Me.T9E = Nz(DSum("[Loan_Made]", "[tbl_Loans]", "Year ([Auto_Date])=" & Me.txtYear - 1 & "And [Loan_ID] > 0"), 0) - Nz(DSum("[Payment_Made]", "[tbl_Loans]", "Year ([Auto_Date])=" & Me.txtYear - 1 & "And [Loan_ID] > 0"), 0)
 MySQL = ""
 MySQL = "Select DISTINCT(Employeeid) From tbl_Loans"
  MySQL = MySQL & " Where " & "Year ([Auto_Date])=" & Me.txtYear & "And [Loan_ID] > 0 "
 Set rst = CurrentDb.OpenRecordset(MySQL)
 Me.Lblt9e = rst.RecordCount

 

قام بنشر

وعليكم السلام

الكود من حيث الظاهر لايعطي خطأ

ياليت مثال بسيط فيه بعض البيانات ..وهل النموذج مستمد من استعلام ...لان بصراحة دخت في 

Employeeid
قام بنشر (معدل)
5 ساعات مضت, Eng.Qassim said:

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

Employeeid

النموذج مستمد من الجدول مباشرة

فعلا هو لا يعطي خطا ولكن لايعطي النتيجة الصحيحة 

مثال  

 t9e=0.00 وعدد سجلاته Lblt9e = 83 خلال سنة 2024

t9e=1.349.000.00 وعدد سجلاته Lblt9e = 00 خلال سنة 2025 

اليك المرفق للتوضيح

 

 

 

 

 

2025-01-01_06-47-01.rar

تم تعديل بواسطه كريمو2
قام بنشر
2 دقائق مضت, أبو إبراهيم الغامدي said:

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

لقد ارفقت مثالا استاذ  أبو ابراهيم الغامدي بالاعلى 

قام بنشر (معدل)
7 دقائق مضت, ابو عارف said:

جرب هذا الكود

 

لم يحدث اي تغيير 

مالذي غيرته في الكود استاذ

تم تعديل بواسطه كريمو2
قام بنشر
19 دقائق مضت, ابو عارف said:

مسافة بين علامة تنصيص و And

بقيت دار لقمان على حالها

اي ولا تغيير استاذ ابو عارف 

قام بنشر (معدل)
منذ ساعه, ابو عارف said:
MySQL = ""
 MySQL = "Select DISTINCT(Employeeid) From tbl_Loans"
  MySQL = MySQL & " Where " & "Year ([Auto_Date])=" & Me.txtYear & " And [Loan_ID] > 0 "
 Set rst = CurrentDb.OpenRecordset(MySQL)
 Me.Lblt9e = rst.RecordCount

يا استاذ أبو عارف المشكلة تكمن في هذه الجملة 

  MySQL = MySQL & " Where " & "Year ([Auto_Date])=" & Me.txtYear & " And [Loan_ID] > 0 "

كيف يتم اضافة شروط لها حتى تحقق النتيحة 

ويمكن الاستغناء عن MySQL وتعويضها بهذه الدالة  DCount

Me.Lblt9e = Nz(DCount("[Loan_Made]", "[tbl_Loans]", "Year ([Auto_Date])=" & Me.txtYear - 1 & " And [Loan_ID] > 0"), 0) - Nz(DCount("[Payment_Made]", "[tbl_Loans]", "Year ([Auto_Date])=" & Me.txtYear - 1 & " And [Loan_ID] > 0"), 0)

*- في سنة 2025 تعطيك 264 سجل بالتكرار وبدون تكرار 83 هي الاصح

تكون بدالة DCount بالتجميع ودون تكرار حقل Employeeid

تم تعديل بواسطه كريمو2
قام بنشر
6 دقائق مضت, ابو عارف said:
  MySQL = MySQL & " Where Year([Auto_Date])=" & Me.txtYear & " And [Loan_ID] > 0 "

 

لا لم تغير شيئا

الصورة توضح الحل الصحيح

202401.jpg.8bc1f3b0aca29b7559bbf06c4ec579a0.jpg20251.jpg.4ff0e6f12a8c2895b631e9e3d49c6e01.jpg

 

قام بنشر
1 دقيقه مضت, ابو عارف said:

أخي كريمو لو تفضلت بإرفاق ملف لوجدت الحل اسرع من قبل اساتذة في المنتدى

ارفق قاعدة بيانات حتي ببيانات وهمية ولا احد يبخل عليك إن شاء الله.

الملف مرفقا من ثالث رد 

2025-01-01_06-47-01.rar

 

قام بنشر

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

انا لو كنت مكانك ،

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

ثانياً سأجرب على سبيل المثال استعلام مباشر لتجربة النتيجة بدون تحديد الشروط من مصدر كمربع نص ، بل داخل الاستعلام نفسه 

SELECT DISTINCT(Employeeid) FROM tbl_Loans WHERE Year([Auto_Date]) = 2024 And [Loan_ID] > 0

ثالثاً وقد تكون لها الأولوية قبل النقطة السابقة ، استخدم جملة تتبع النتيجة بجملة Vba ثم اضغط Ctrl+G

وتفحص النتيجة العائدة من الاستعلام

Debug.Print MySQL

لا ضرر أيضاً من متابعة شكل كتابة الاستعلام النحوية من وجود مسافات زائدة أو ناقصة .... الخ .

وبخصوص الدالة DCount فأعتقد أنها لا تدعم بشكل مباشر حساب السجلات الفريدة (دون تكرار) بناءً على حقل معين . ويمكن استخدامها مع استعلام فرعي .. كمثال :-

Me.Lblt9e = Nz(DCount("EmployeeID", "(SELECT DISTINCT EmployeeID FROM tbl_Loans WHERE Year([Auto_Date]) = " & Me.txtYear - 1 & " And [Loan_ID] > 0)", ""), 0)

وأيضاً كحل شاذ يمكن استخدام DSum لجمع السجلات الفريدة حسب الجملة الشرطية ، كما يلي كمثال :-

Me.Lblt9e = Nz(DSum("IIF([Loan_Made] - [Payment_Made] = 0, 1, 0)", "tbl_Loans", "Year([Auto_Date]) = " & Me.txtYear - 1 & " And [Loan_ID] > 0"), 0)

مع العلم أنني أفضل الحل الثاني لأنه سيكون أسرع من الدالة DCount .

 

وجهة نظري غير ملزمة في النهاية 😇

قام بنشر
11 دقائق مضت, Foksh said:
Me.Lblt9e = Nz(DCount("EmployeeID", "(SELECT DISTINCT EmployeeID FROM tbl_Loans WHERE Year([Auto_Date]) = " & Me.txtYear - 1 & " And [Loan_ID] > 0)", ""), 0)

 

شكرا استاذ على بذل المجهودات

الحل الثاني انا ايضا احبذه ولكن ماعرفت كيف اعمل الكود

لما نسخت الكود يبدو انه ظهر به مشكلة

202601.jpg.ba4dd5aa14712c03d8c5de30e0a01781.jpg2026.jpg.7191f6640d4c0e06124e2d74a38afa16.jpg

قام بنشر

طيب ، جرب تعديل بسيط كالآتي ..

Me.Lblt9e = Nz(DCount("EmployeeID", "(SELECT DISTINCT EmployeeID FROM tbl_Loans WHERE Year([Auto_Date]) = " & Me.txtYear - 1 & " And [Loan_ID] > 0)", ""), 0)

 

أو لنجرب الحل الثاني استخدام Recordset مع DISTINCT ..

Dim MySQL As String
Dim rst As DAO.Recordset

MySQL = "SELECT DISTINCT EmployeeID FROM tbl_Loans WHERE Year([Auto_Date]) = " & Me.txtYear - 1 & " And [Loan_ID] > 0"
Set rst = CurrentDb.OpenRecordset(MySQL)
Me.Lblt9e = rst.RecordCount

 

أو الحل الثالث مع الدالة DSum ..

Me.Lblt9e = Nz(DSum("IIF([Loan_Made] - [Payment_Made] = 0, 1, 0)", "tbl_Loans", "Year([Auto_Date]) = " & Me.txtYear - 1 & " And [Loan_ID] > 0"), 0)

 

ما لم تقم بالتجربة لجميع الحلول ، فلن تصل إلى الحل والهدف 🤗

قام بنشر
5 دقائق مضت, Foksh said:
Dim MySQL As String
Dim rst As DAO.Recordset

MySQL = "SELECT DISTINCT EmployeeID FROM tbl_Loans WHERE Year([Auto_Date]) = " & Me.txtYear - 1 & " And [Loan_ID] > 0"
Set rst = CurrentDb.OpenRecordset(MySQL)
Me.Lblt9e = rst.RecordCount

*- هذه الجملة اعطت نتيجة في سنة 2025 فقط

الديون المتبقية الى غاية : 2024/12/31          1.349.000.00                    83

اما في سنة 2024 فأعطت نتيجة خاطئة

الديون المتبقية الى غاية : 2023/12/31         0.00                                 74

*- اما الاول ولاخير فلم يعطيا النتيجة الصحيحة 

الاول مزال به خطأ

والاخير لم يعطي الحل الصحيح

الديون المتبقية الى غاية : 2023/12/31        0.00                              734

الديون المتبقية الى غاية : 2024/12/31       1.349.000.00                   612

قام بنشر

بما أنه هناك جزء قد تحقق ، فإننا ندور حول الحل المناسب ، لأنني خارج العمل حالياً وبعيد عن الكمبيوتر ، سنتابع بأقرب وقت

قام بنشر
1 ساعه مضت, كريمو2 said:

الملف مرفقا من ثالث رد 

 

على فكرة هذا ليس ملف مرفقك لقاعدة بيانات ، بل ملف فيديو :excl:

قام بنشر
20 دقائق مضت, كريمو2 said:

الآن من خلال معرفتك ببيانات مشروعك ، ما النتيجة الصحيحة للعام 2024 ، والعام 2025 ؟؟
فقط من أجل تلافي كثرة التجارب بيننا ولإكتساب الوقت .

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.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information