![]() |
|
[كود] ارجو تصحيح الجملة التالية - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (https://vb4arb.com/vb) +-- قسم : قسم لغات البرمجة الاخرى (https://vb4arb.com/vb/forumdisplay.php?fid=4) +--- قسم : قسم لغة vb6.0 (https://vb4arb.com/vb/forumdisplay.php?fid=18) +---- قسم : قسم أسئلة vb6.0 (https://vb4arb.com/vb/forumdisplay.php?fid=28) +---- الموضوع : [كود] ارجو تصحيح الجملة التالية (/showthread.php?tid=56283) |
ارجو تصحيح الجملة التالية - hsab - 17-05-26 جملة الاستعلام التالية فى داتا انفيرونمنت ولكن رفضت ان تعمل مال الخطأ بها PHP كود : SELECTRE: ارجو تصحيح الجملة التالية - مصمم هاوي - 17-05-26 (04-04-26, 11:52 PM)مختار الوافي كتب : مثلا عندي ورشة صيانة الكترونيات اعطاني العميل خمس اصناف لاصلاحهم جهزت ثلاثة اصناف وصنفين غير جاهز اريد عمل تقرير في الجدول الاول الاصناف المستلمة والجدول الثاني الاصناف المتبقية للعميل (17-05-26, 12:04 PM)hsab كتب : جملة الاستعلام التالية فى داتا انفيرونمنت ولكن رفضت ان تعمل مال الخطأ بها عن طريق الذكاء الاصطناعي SQL Code Error Analysis ما الخطأ في هذا الكود SELECT bhisab AS [اسم الحساب], bbian AS [التصنيف], SUM(IIF(bml='منه', bcashm, 0)) AS [اجمالي مدين], SUM(IIF(bml='له', bcashl, 0)) AS [اجمالي دائن], SUM(IIF(bml='منه', bcashm, 0)) - SUM(IIF(bml='له', bcashl, 0)) AS [الرصيد], IIF( SUM(IIF(bml='منه', bcashm, 0)) - SUM(IIF(bml='له', bcashl, 0)) >= 0, 'مدين', 'دائن' ) AS [طبيعة الرصيد] FROM BALANCE WHERE bchklam IN ('Yes', 'No') GROUP BY bhisab, bbian ORDER BY bhisab أهلاً بك. الكود الذي كتبته يبدو صحيحاً من الناحية التركيبية (Syntactically) بالنسبة لـ SQL Server (أو Access مع تعديلات بسيطة)، ولكنه يحتوي على خطأ منطقي محتمل قد يؤدي إلى نتائج غير دقيقة. دعني أوضح المشكلة الأساسية ثم أعطيك الحل: الخطأ: منطق حساب الأرصدة في القيد المزدوج أنت تستخدم عمودين منفصلين (bcashm و bcashl): bcashm = المبلغ عندما يكون الحساب "منه" (مدين) bcashl = المبلغ عندما يكون الحساب "له" (دائن) المشكلة: في أنظمة القيد المزدوج الصحيحة، يجب أن يحتوي السجل الواحد على حقل مبلغ واحد فقط (مثلاً bcash)، ثم تحدد طبيعة الحركة من خلال حقل آخر (bml). لكن يبدو أن تصميم جدول BALANCE لديك يحتوي على حقلين منفصلين للمبلغ. إذا كان السجل الواحد يحتوي في نفس الوقت على قيمة في bcashm وقيمة في bcashl (وهو أمر غير طبيعي)، فإن الكود سيعمل بشكل خاطئ. الحلول المقترحة الحالة 1: إذا كان كل سجل يحتوي على مبلغ واحد فقط (إما في bcashm أو bcashl) - التصميم السيئ هذا هو الأرجح. الكود الحالي سيعمل بشكل صحيح في هذه الحالة، لكن يمكن تبسيطه وتحسين أدائه: sql SELECT bhisab AS [اسم الحساب], bbian AS [التصنيف], SUM(CASE WHEN bml = 'منه' THEN bcashm ELSE 0 END) AS [اجمالي مدين], SUM(CASE WHEN bml = 'له' THEN bcashl ELSE 0 END) AS [اجمالي دائن], SUM(CASE WHEN bml = 'منه' THEN bcashm ELSE -bcashl END) AS [الرصيد], CASE WHEN SUM(CASE WHEN bml = 'منه' THEN bcashm ELSE -bcashl END) >= 0 THEN 'مدين' ELSE 'دائن' END AS [طبيعة الرصيد] FROM BALANCE WHERE bchklam IN ('Yes', 'No') GROUP BY bhisab, bbian ORDER BY bhisab الحالة 2: التصميم الصحيح (حقل مبلغ واحد) إذا كان بإمكانك تعديل هيكل الجدول، فالأفضل أن يكون لديك حقل واحد مثلاً bcash، وحقل bml يحدد نوع الحركة. عندها يصير الكود: sql SELECT bhisab AS [اسم الحساب], bbian AS [التصنيف], SUM(CASE WHEN bml = 'منه' THEN bcash ELSE 0 END) AS [اجمالي مدين], SUM(CASE WHEN bml = 'له' THEN bcash ELSE 0 END) AS [اجمالي دائن], SUM(CASE WHEN bml = 'منه' THEN bcash ELSE -bcash END) AS [الرصيد], CASE WHEN SUM(CASE WHEN bml = 'منه' THEN bcash ELSE -bcash END) >= 0 THEN 'مدين' ELSE 'دائن' END AS [طبيعة الرصيد] FROM BALANCE WHERE bchklam IN ('Yes', 'No') GROUP BY bhisab, bbian ORDER BY bhisab ملاحظات إضافية دالة IIF: تعمل في SQL Server (2012+) و MS Access، ولكن CASE أفضل للتوافق مع جميع قواعد البيانات. شرط bchklam: تأكد من أن القيم هي بالضبط 'Yes' و 'No' (حساسية حالة الأحرف تختلف حسب قاعدة البيانات). أسماء الأعمدة: إذا كانت bcashm تحتوي على قيم NULL، فاستخدم ISNULL(bcashm, 0) لتجنب الأخطاء. كيف تتحقق من صحة البيانات؟ اختبر على سجل واحد: sql SELECT * FROM BALANCE WHERE bhisab = 'اسم حساب معين' AND bchklam IN ('Yes', 'No') تأكد أن كل صف يحتوي على مبلغ في عمود واحد فقط (إما bcashm أو bcashl). أخبرني بأي قاعدة بيانات تستخدمها (SQL Server، MySQL، Oracle، Access) لأعطيك الحل الأمثل حسب نظامك. ----- جربت أغلب حلول الذكاء الاصطناعي فوجدت فيها نقص كبيرا وجوهريا؛ وتظل وقتا طويلا تشرح له ما تريد حتى يفهمك هذا إن فهمك. الخلاصة: البرمجة تفكير والمبرمج هو محور هذا التفكير. RE: ارجو تصحيح الجملة التالية - hsab - 17-05-26 مرحبا بك والله تشكر اكسس 2003 كلامك صحيح استخدمت للدائن والمدين لكل حقل منفصل مشكلة ال CASE ما بتعمل مع DATAENVIRONMENT RE: ارجو تصحيح الجملة التالية - محمدين - 18-05-26 (17-05-26, 12:04 PM)hsab كتب : جملة الاستعلام التالية فى داتا انفيرونمنت ولكن رفضت ان تعمل مال الخطأ بها انا قمت بتجربة الكود كما هو وفى داتا انفيرونمنت مع اكسس 2003 وقد عمل بدون خطأ انت لم توضح ما حدث معك او ما هي رسالة او صورة الخطأ التي ظهرت لك |