المشاركات : 3,703
المواضيع 101
:
: 579
الإنتساب : Feb 2008
بسم الله الرحمن الرحيم
هذا تمرين بسيط في التعامل مع التاريخ في قواعد البيانات
لنفرض لدينا جدول Table1 به بيانات ما من بينها حقل اسمه DATE به التاريخ من الشكل 20/12/2008
ولدينا مكون ComboBox1 به الاشهر
التمرين:
ماذا تكتب لكي نفلتر البيانات للسنة الحالية 2008 حسب الشهر المختار في ComboBox1
مثلا لو اخترنا الشهر الاول تظهر البيانات فقط التي بها التاريخ من 01/01/2008 الى 31/01/2008
مدة التمرين اسبوع وسيتم عرض الحل بعدها، الان اين محاولاتكم ؟
ملاحظة: المشاركة تكون بكتابة الكود مباشرة بالرد وليس بارفاق ملف
والسلام عليكم
المشاركات : 378
المواضيع 44
:
: 6
الإنتساب : Feb 2008
السلام عليكم
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;
المشاركات : 3,703
المواضيع 101
:
: 579
الإنتساب : Feb 2008
انتبه:
التاريخ من الشكل 20/12/2008 وليس من الشكل 20-12-2008
السنة 2008
المشاركات : 56
المواضيع 4
:
: 1
الإنتساب : Feb 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;
المشاركات : 378
المواضيع 44
:
: 6
الإنتساب : Feb 2008
السلام عليكم
تم اختصار نوعا ما الكود (على طريقة اخى Rover)
فيما يخص '/' و '-' سببت لى مشاكل . جربت طريقة Rover لاكن نفس الشىء .
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;
المشاركات : 378
المواضيع 44
:
: 6
الإنتساب : Feb 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');
و نفس الشىء بالنسبة لى
المشاركات : 56
المواضيع 4
:
: 1
الإنتساب : Feb 2008
أخي Hanipino :
جربت الكود ..
الكود الذي كتبته أنا سليم و يعمل 100 %
يجب الأنتباه ان الأستعلامات في قواعد البيانات تتعامل مع التنسيق YYYY/MM/DD فيما يتعلق بالتاريخ ..
بالتوفيق أن شاء الله ..
المشاركات : 3,703
المواضيع 101
:
: 579
الإنتساب : Feb 2008
hanipino و Rover
من حيث الفكرة الحلين جميلين
من حيث التطبيق (الكود) الحلين خطأ
انتبهو جيدا لنص التمرين والملاحظة السابقة
والسلام عليكم
المشاركات : 56
المواضيع 4
:
: 1
الإنتساب : Feb 2008
هل تقصد أن السنة الحالية متغير يجب أخذه حسب السنة الحالية ؟؟
أم هو ثابت 2008 ?
بالنسبة للحل الذي أرفقته ... جربته على جدول أدخلت به بيانات للشهور و كان يعمل بنجاح !!
نرجو التوضيح قليلاً أذا كان هناك طلب أضافي ؟
المشاركات : 3,703
المواضيع 101
:
: 579
الإنتساب : Feb 2008
انظر لتنسيق التاريخ
لقد اوضحته بالتمرين
ونبهت بالرد السابق
|