PDA

View Full Version : شمارش رکوردهای که از تاریخ ثبت آنها یک ماه گذشته است در یک کوئری



davoodmz
پنج شنبه 23 فروردین 1386, 12:54 عصر
با سلام
من یک کوئری میخواهم بسازم به این شکل که یک فیلدی به اسم تاریخ ثبت در بانک می باشد حال میخواهم کوئری من تمام رکوردهایی که یک ماه - دو ماه - سه ماه و ... از تاریخ ثب آنها گذشته است را بشمارد. نسبت به تاریخ روز
یعنی چیزی شبیه کد زیر

doQuery1.SQL.Clear;
adoQuery1.SQL.Add('select count(no)from table1');
adoQuery1.SQL.Add('WHERE (تاریخ روز - date_sabt >') + '30')')
adoQuery1.open

که در آن تاریخ روز از یک shdatepiker روی فرم باشد و date_sabt نیز فیلد تاریخ ثبت می‌باشد .

با تشکر از همه دوستان
داود

SYNDROME
پنج شنبه 23 فروردین 1386, 13:17 عصر
با سلام
شما اول فیلد تاریختان را می سازید(Date)فیلد از نوع رشته است.
2-حال شما می توانید با دستورات شرطی که خودتان ذکر کردید عمل مقایسه را انجام دهید.
مثال تاریخ ثبت 30/1/86
تاریخ امروز 31/2/86
رکوردهایی که یک ماه از تاریخ ثبت آنها گذشته است.
تاریخ امروز را با یک تابع یک ماه عقب می کشید(13/1/86)
حال با شرط زیر رکوردهایی که یک ماه از ثبت آنها گذشته است را نمایش دهید.
Select *
From Tbl_Test
Where Date <='86/1/31'

davoodmz
پنج شنبه 23 فروردین 1386, 14:52 عصر
با تشکر از شما دوست عزیبه خاطر تحلیل زیبا
کد اصلاح شده:

adoQuery1.SQL.Clear;
adoQuery1.SQL.Add('select count(no)from permit_all');
adoQuery1.SQL.Add('WHERE date_ss BETWEEN :Date1 AND :Date2'+
' and '+ ' unit like '+QuotedStr('%'+ComboBox1.text+'%')+
' and '+ ' amaliat like '+QuotedStr('mec')+
' and '+ 'date_ss>= '+QuotedStr(edit1.Text));
adoQuery1.Parameters.ParamByName('Date1').Value:= shdatetostr(exShDatePicker1.Date);
adoQuery1.Parameters.ParamByName('Date2').Value:= shdatetostr(exShDatePicker2.Date);
edit1.Text:=shdatetostr(ShDatePicker1.Date-30);
adoQuery1.Open;

حال من شرط را از قسمت where برداشتم و در در قسمت sql.add گذاشتم به صورت زیر:

adoQuery1.SQL.Add('select count(case when(no>0 and date_sabt >=''1385/12/20'') then no else null end )'+ ...
جواب میده و درسته ولی وقتی بجای 1385/12/20 از یک ورودی در فرم به نام edit1 استفاده میکنیم یعنی به صورت زیر:

adoQuery1.SQL.Add('select count(case when(no>0 and date_sabt >=edit1.text) then no else null end )'+ ...
خطا میدهد لطفا راهنمایی فرمائید.

با تشکر
داود

SYNDROME
پنج شنبه 23 فروردین 1386, 19:30 عصر
با سلام
حالا خط رو به این صورت بنویس پسر خوب


adoQuery1.SQL.Add('select count(case when(no>0 and date_sabt >='''+edit1.text+''') then no else null end )'+ ...


اگر درست نشد پیغام خطا را بنویس.