delphi4arab منتديات دلفي للعرب
الفلترة باستخدام Master Detail بين تاريخين - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : الفلترة باستخدام Master Detail بين تاريخين (/showthread.php?tid=1269)



الفلترة باستخدام Master Detail بين تاريخين - thebestbenz - 19-10-2009

الجداول كالأتي :

AssetTable
ID_______ Asset_Desc
1 ___________ Asset1
2 ___________ Asset2
3 ___________ Asset3

WorkorderTable
No________________ Date_________________WO_Desc________ Asset_ID
1______________ 21/5/2009_____________ **********_____________ 3
2______________ 4/7/2009 ______________ **********_____________ 2
3______________ 7/4/2009 ______________ **********_____________ 3
4______________ 8/6/2009 ______________ **********_____________ 1
*__________________ * ______________________ * _________________ *

كيف إصدار تقرير بأوامر العمل بين تاريخين مثل 1/1/2009 و 30/1/2009 لكلِAsset
Workorders REPORT
_____________________________________________________________________
Asset Name\ Asset1

WO. No_______ Date______________ WO. Description
1 __________ 1/9/2009_______________ **********
5 __________ 6/9/2009_______________ **********
14 _________ 8/9/2009_______________ **********
* ______________ * ____________________ *

Asset Name\ Asset2

WO. No_______ Date______________ WO. Description
2 __________ 11/9/2009_____________ **********
4 __________ 26/9/2009_____________ **********
6 __________ 8/9/2009______________ **********
* ______________ * ___________________ *

Asset Name\ Asset3

WO. No_______ Date______________ WO. Description
11 _________ 13/9/2009______________ **********
3 __________ 17/9/2009______________ **********
9 __________ 23/9/2009______________ **********
* ______________ * ______________________ *
انا استخدام QReport

شكرا


الفلترة باستخدام Master Detail بين تاريخين - tempuser - 19-10-2009

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

ملاحظة هامة جدا ضعها في دماغك ولا تنساها

لا تستخدم في تسمية الحقول أي اسم محجوز لأنها يسبب لك المشاكل ان لم يكن الآن وإلا فيما بعد لذلك غير حقل

Date
الى مثلا

wdate

كود :
Select Asset_Id From Assettable as A inner join workordertable W on a.asset_id=w.asset_id where w.date between (Date1_Value and Date2_Value) Group by Asset_ID

ملاحظة أخرى أنا غير متواجد بشكل كثير وانما نادرا ما اشارك لعدم تفرغي
مع التوفيق


الفلترة باستخدام Master Detail بين تاريخين - thebestbenz - 20-10-2009

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

لقد عملت جميع الاستعلامات الممكنة

اما تسمية الحقول فبارك الله فيك على المعلومة و الحقول بالاعلى عبارة عن امثلة فقط

إقتباس :أنا غير متواجد بشكل كثير وانما نادرا ما اشارك لعدم تفرغي

ان تكمل معي لاني لم اجد الحل منذ فترة طويلة

وشكرا


الفلترة باستخدام Master Detail بين تاريخين - tempuser - 20-10-2009

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

أخوي TheBestBenz

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

كود :
Select Asset_Id From Assettable as A inner join workordertable AS W on a.asset_id=w.asset_id where w.date between Date1_Value and Date2_Value Group by Asset_ID

كما أنني قد تركت مجال البرمجة منذ فترة طويلة أو بعيدة فلا تتوقع أن اتذكر حرفيا كيف يتم فعل ذلك ولكني أردت بجوابي السابق أن أفتح لك الباب ولا بد دائما من بذل الجهد تلو الجهد في سبيل الوصول للمطلوب :monster2: وبخاصة المنتديات الرسمية وهي بالتأكيد باللغة الانجليزية والعلم صيد والكتابة قيده :monster1:

عموما أنا لا أملك أدوات التفرير الذي أنت تستخدمه ولا لغة الدلفي المناسبة في الوقت الحالي :oops:

وعلى فرض ما يلي

أنظر الملف المرفق والذي فيه صورة للجداول ــ لا ادري كيفية ارفاق صورة مع الرد

أولا يجب تجهيز متطلبات عمل التقرير ويوجد طريقتين وهنا أننا لا أذكر الحلول الاحترافية بل ابسط واسهل حل
الاولى هي استخدام مكوننين للجدولين وربطهما مع بعض بعلاقة أب وابن واستخدام خاصية الفلتر في الابن قبل استدعاء التقرير وقد يكون هذان المكونان
Both are TTables or Both are TQuery or TTable & TQuey.....
وهنا يجب استخدام الادوات المناسبة في التقرير وانا لا أذكر اسمائها ولكن على ما اعتقد
Reportband
Detail band
ُم تعديل الخصائص المناسبة والتي تحدد العلاقة بينهما كأب وإين
أما الطريقة الثانية فهي استخدام كائن استعلام مثل
TQuery
ثم استخدام جملة الاستعلام التي ذكرتها
كود :
Select ADesc, No, WDate, WDesc From Assets inner join workorders on ID=AID where wdate between Date1_Value and Date2_Value Group by ADesc, No, WDate, WDesc
واستخدام ما يسمى ب
Group Bands Headers & footers
يمكنك الرجوع الى البرنامج الذي يأتي مع الدلفي ويظهر فيه أنواع مختلفة من التقارير وكيفية عملها بشكل اساسي ففيه فائدة كبيرة جدا



**** أن أكون قد أفدتك بالرغم من عدم ذكري للحل الكامل وبالشكل الصحيح مئه في المئة و**** المعذرة لأنني كما سبق وقلت اني لم استخدم الدلفي منذ زمن

وربما في بعد قد استطيع اعطائك الحل الكامل في حال وجدت
Quick report
الذي يناسب اصدار اللغة الذي لدي حيث أنها تجريبية


الفلترة باستخدام Master Detail بين تاريخين - thebestbenz - 20-10-2009

السلام عليكم و رحمة الله و بركاته
أخي TemUser
صدقني لقد عدلت في جملة الاستعلام و استعملت غيرها و غيرها و صدقني لقد حاولت كثيرا و لذلك
لجأت الى المنتديات و ستجد نفس السؤال في العديد من المنتديات الانجليزية وهذا المنتدى العربي الوحيد الذي راسلته

و كونك تركت البرمجة فهذه خسارة لنا لانه من الواضح تمكنك في هذا المجال

و لانك نسيت فاذكرك ان جداول الابن و حسب علمي لا يمكن فلترتها و هذه مشكلتي
بالمناسبة انا استخدم ADOGO
اي ADOQuery ADOTable

و الله الموفق
وشكرا


الفلترة باستخدام Master Detail بين تاريخين - format82 - 21-10-2009

سلام عليك
قم بتعديل هذا الكود علي حسب اسماء جداولك
حيث q_account و t_client اسماء جداول و date_buy حقل التاريخ
كود :
q_account.Close; q_account.SQL.Clear ; q_account.SQL.Add('select * from t_account,t_client where t_account.name_c=t_client.name_c and t_account.date_buy between :p1 and :p2 order by date_buy') ; q_account.Parameters.ParamByName('p1').Value := datetostr(datetimepicker1.Date) ; q_account.Parameters.ParamByName('p2').Value := datetostr(datetimepicker2.Date) ; q_account.Open; //q_account.Active := true ; if q_account.Recordcount=0 then ShowMessage('áÇ ÊæÌÏ ÈíÇäÇÊ ãÊæÝÑ Ýí åÐÇ ÇáÔåÑ') else Form9.QuickRep1.Preview;

سوف تجد في هذا المسار امثلة
C:\Program Files\Borland\Delphi7\Demos\Quickrpt


الفلترة باستخدام Master Detail بين تاريخين - tempuser - 21-10-2009

أنظر الملف المرفق حيث فيه شرح كامل زبالتفصيل للحل مع نموذج قاعدة البيانات

وبالتوفقي
ونسمع دعائكم بظهر الغيب

والله الموفق

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


الفلترة باستخدام Master Detail بين تاريخين - thebestbenz - 22-10-2009

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

أخي TempUser

جزاك الله كل خير. و الله انا عاجز عن الشكر

ما شاء الله تبارك الله

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

خارق للعادة و مطابق للمطلوب تماما

حفظك الله من كل شر و رزقك و اهلك كل خير

و شكرا على تحفيزك لي بالبحث في بداية الامر و للعلم ما طرحت الموضوع الا لما عجزت و تصدعت

بارك الله فيك و شكرا و لا تحرمنا علمك

السلام عليكم