delphi4arab منتديات دلفي للعرب

نسخة كاملة : كيف أعرض الحقل المحسوب في الإستعلام؟
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم

نفرض أنه عندي جدول به منتوج وإذا كانت الكمية أكثر من 20 أنقص 0.2 من السعر
(Id,ProductName,Qty,Price,CalcPrice)ProductsTable
قمت بإضافة حقل محسوب في الجدول وفي الحدث OnCalcFields قمت بالتالي

كود :
If qty >20 then CalcPrice:=Price-0.2 else CalcPrice:=price


ما أردته وهو أن أعرض الحقل المحسوب في الفاست ريبورت عن طريق إستعلام هكذا
كود :
SELECT ProductName,Qty,Price,CalcPrice from ProductsTable


ولكن الحقل المحسوب لم يظهر في الإستعلام لماذا؟

أو هناك طريقة أفضل لحل هذه المشكلة
وعليكم السلام ورحمة الله

يبدوا لي ان كل شئ طبيعي الا جملة الاستعلام الاخيرة غير منطقية فالحقل Calc لا يوجد بجدول البيانات وانما بمكون الجدول
طالما الجدول مفتوح اربطه مباشرة بمصدر بيانات الفاست ريبورت ولا تقوم باستخدام مكون استعلام جديد
مشكلتك تبدو هنا ارجو ان تكون قد فهمت المقصود
ولكن انا أعرض البيانات في الفاست ريبورت عن طريق الإستعلام والذي بدوره أي الإستعلام يقوم بعرض العديد من الحقول من جداول مختلفة مربوطه بـ join
كل الحقول ظهرت إلا الحقل المحسوب لا أدري ما المشكل

لا ادري إن كانت صحيحة إدخال جملة شرطية في الـ SELECT وهل هي منطقية


(10-10-2020, 02:08 PM)Delphi4Us كتب : [ -> ]وعليكم السلام ورحمة الله

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

بالفعل لا يوجد في جدول البيانات وإن وضعته على الفاست ريبورت فيظهر قيمه وحدة للجميع

ما الحل في هذه الحالة
أو إظهار البيانات بإستعلام غير صحيحة مع العلم اني سمعت انها أفضل من إستخدام الجداول
إقتباس :ما الحل في هذه الحالة

أو إظهار البيانات بإستعلام غير صحيحة مع العلم اني سمعت انها أفضل من إستخدام الجداول


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

SELECT ProductName,Qty,Price from ProductsTable


واضف فيه حقل الجمع CalcPrice وفي الحدث OnCalcFields ضع الكود الخاص بك


If qty >20 then
CalcPrice:=Price-0.2
else
CalcPrice:=price



ونفس المكون استخدمه لمصدر بيانات الفاست ريبورت
(10-10-2020, 05:14 PM)Delphi4Us كتب : [ -> ]
إقتباس :ما الحل في هذه الحالة

أو إظهار البيانات بإستعلام غير صحيحة مع العلم اني سمعت انها أفضل من إستخدام الجداول


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

SELECT ProductName,Qty,Price from ProductsTable


واضف فيه حقل الجمع CalcPrice وفي الحدث OnCalcFields ضع الكود الخاص بك


If qty >20 then
CalcPrice:=Price-0.2
else
CalcPrice:=price



ونفس المكون استخدمه لمصدر بيانات الفاست ريبورت

جزاك الله خير أخي على المساعدة لقد إستخدمت جملة If فكان الكود هكذا 

كود :
SELECT ProductName,Qty,Price,iff(qty>20,price-0.2,price) from ProductsTable

أريد أن أكتب كود صحيح ومنطقي لا أريد أن أبرمج وأن يشتغل الكود ولا يهمني شكل الكود لهذا سألت ووجد الحل و أتمنى أن يكون صحيح ولا يحدث بطئ في حال كانت قاعدة البيانات كبيرة
لا اعتقد ان هناك مشكلة بقاعدة بيانات كبيرة
يعني انت استغنيت عن استخدام OnCalcFields واستخدمت الاجراء المذكور للتوضيح فقط
(10-10-2020, 08:39 PM)Delphi4Us كتب : [ -> ]لا اعتقد ان هناك مشكلة بقاعدة بيانات كبيرة
يعني انت استغنيت عن استخدام OnCalcFields واستخدمت الاجراء المذكور للتوضيح فقط

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

https://delphi4arab.net/forum/showthread...5#pid52035

ملاحظة ما يميز استخدام الحدث OnCalcFields هو انه بامكانك اجراء عمليات معقدة