delphi4arab منتديات دلفي للعرب
[تمرين] فلترة بيانات جدول حسب الشهر في سنة معينة - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : تمارين دلفي وحلول (https://delphi4arab.net/forum/forumdisplay.php?fid=16)
+--- الموضوع : [تمرين] فلترة بيانات جدول حسب الشهر في سنة معينة (/showthread.php?tid=338)

الصفحات: 1 2


[تمرين] فلترة بيانات جدول حسب الشهر في سنة معينة - محمد عبد العزيز - 20-12-2008

بسم الله الرحمن الرحيم

هذا تمرين بسيط في التعامل مع التاريخ في قواعد البيانات
لنفرض لدينا جدول Table1 به بيانات ما من بينها حقل اسمه DATE به التاريخ من الشكل 20/12/2008
ولدينا مكون ComboBox1 به الاشهر

التمرين:
ماذا تكتب لكي نفلتر البيانات للسنة الحالية 2008 حسب الشهر المختار في ComboBox1
مثلا لو اخترنا الشهر الاول تظهر البيانات فقط التي بها التاريخ من 01/01/2008 الى 31/01/2008

مدة التمرين اسبوع وسيتم عرض الحل بعدها، الان اين محاولاتكم ؟

ملاحظة: المشاركة تكون بكتابة الكود مباشرة بالرد وليس بارفاق ملف

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



[تمرين] فلترة بيانات جدول حسب الشهر في سنة معينة - hanipino - 20-12-2008

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

PHP كود :
procedure TForm1.ComboBox1Change(Sender: TObject);
var
Date1,Filr,DayMod:String;
I,Y:Integer;
begin
 Y
:=Length(DateToStr(Date));
 
I:=(Combobox1.ItemIndex+1);
 
Date1:=Copy(DateToStr(Date),7,Y-6);
 
//---------------------------------//
 
if ((i)<=(7)) And (i<>2) then
 
if (i) mod 2 = 0 then DayMod:='30' else DayMod:='31';
 if (
i)>=(8) then
 
if (i) mod 2 = 0 then DayMod:='31' else DayMod:='30';
 
//---------------------------------//
 
if I=2 then
  begin
   DayMod
:='29';
   
Filr:='Date >='+'01'+'-'+inttostr(i)+'-'+Date1+' '+
   
'And'+' '+ 'Date <='+DayMod+'-'+inttostr(i)+'-'+Date1;
  
end
 
else
  
Filr:='Date >='+'01'+'-'+inttostr(i)+'-'+Date1+' '+
  
'And'+' '+ 'Date <='+DayMod+'-'+inttostr(i)+'-'+Date1;

 
Table1.Filtered:=true;
 
Table1.Filter:=Filr;
 
Caption:=Filr+' , '+'Day= '+DayMod;
end; 



[تمرين] فلترة بيانات جدول حسب الشهر في سنة معينة - محمد عبد العزيز - 20-12-2008


انتبه:
التاريخ من الشكل 20/12/2008 وليس من الشكل 20-12-2008
السنة 2008



[تمرين] فلترة بيانات جدول حسب الشهر في سنة معينة - Rover - 21-12-2008

PHP كود :
procedure TForm1.Button1Click(Sender: TObject);
const
IdMonth: array[0..11]of string =('01','02','03','04','05','06','07','08','09','10','11','12');
lastDay:array[0..11]of string =('31','29','31','30','31','30','31','31','30','31','30','31');
Var
StartDate,EndDate,FLT:String;
IdCombo:Integer;
begin
IdCombo
:=Combobox1.ItemIndex;
StartDate:='2008' + '/' + IdMonth[IdCombo] + '/' + '01';
EndDate:= '2008' + '/' + IdMonth[IdCombo] + '/' + lastDay[IdCombo];
FLT:= 'Date >=' + StartDate + ' And  Date <=' + EndDate;

Table1.Filtered:=true;
Table1.Filter:=FLT;
end; 



[تمرين] فلترة بيانات جدول حسب الشهر في سنة معينة - hanipino - 21-12-2008

السلام عليكم
تم اختصار نوعا ما الكود (على طريقة اخى Rover)
فيما يخص '/' و '-' سببت لى مشاكل . جربت طريقة Rover لاكن نفس الشىء .
PHP كود :
uses ,DateUtils; 


PHP كود :
procedure TForm1.ComboBox1Change(Sender: TObject);
var
Filr,DayMod:String;
I:Integer;
StartDate,EndDate:TDate;
begin
 I
:=(Combobox1.ItemIndex+1);
 
//______________________//
 
if ((i)<=(7)) And (i<>2) then
 
if (i) mod 2 = 0 then DayMod:='30' else DayMod:='31';
 if (
i)= (2) then DayMod:='29';
 if (
i)>=(8) then
 
if (i)mod(2) = 0 then DayMod:='31' else DayMod:='30';
 
//______________________//
StartDate:=StrToDate('01-'+IntTostr(i)+'-2008');
EndDate:=IncDay(StartDate,StrToInt(DayMod)-1);

Filr:='Date >= '+DateToStr(StartDate)+' And '+'Date <= '+DateToStr(EndDate);
Table1.Filtered:=True;
Table1.Filter:=Filr;
end; 



[تمرين] فلترة بيانات جدول حسب الشهر في سنة معينة - hanipino - 21-12-2008

اخى Rover ربما من الاحسن لو اعلنت عن الثوابت بهدا الشكل
PHP كود :
const 
IdMonth: array[0..11]of string[2] =('01','02','03','04','05','06','07','08','09','10','11','12');
lastDay: array[0..11]of string[2] =('31','29','31','30','31','30','31','31','30','31','30','31'); 
و نفس الشىء بالنسبة لى
PHP كود :
DayMod:String[2]; 
Smile


[تمرين] فلترة بيانات جدول حسب الشهر في سنة معينة - Rover - 21-12-2008

أخي Hanipino :
جربت الكود ..
الكود الذي كتبته أنا سليم و يعمل 100 %
يجب الأنتباه ان الأستعلامات في قواعد البيانات تتعامل مع التنسيق YYYY/MM/DD فيما يتعلق بالتاريخ ..
بالتوفيق أن شاء الله ..


[تمرين] فلترة بيانات جدول حسب الشهر في سنة معينة - محمد عبد العزيز - 24-12-2008

hanipino و Rover
من حيث الفكرة الحلين جميلين
من حيث التطبيق (الكود) الحلين خطأ
انتبهو جيدا لنص التمرين والملاحظة السابقة
والسلام عليكم



[تمرين] فلترة بيانات جدول حسب الشهر في سنة معينة - Rover - 24-12-2008

هل تقصد أن السنة الحالية متغير يجب أخذه حسب السنة الحالية ؟؟
أم هو ثابت 2008 ?
بالنسبة للحل الذي أرفقته ... جربته على جدول أدخلت به بيانات للشهور و كان يعمل بنجاح !!
نرجو التوضيح قليلاً أذا كان هناك طلب أضافي ؟


[تمرين] فلترة بيانات جدول حسب الشهر في سنة معينة - محمد عبد العزيز - 24-12-2008


انظر لتنسيق التاريخ
لقد اوضحته بالتمرين
ونبهت بالرد السابق