PDA

View Full Version : فیلتر کردن بر اساس دو تاریخ



seaman202008
شنبه 27 مرداد 1386, 17:41 عصر
با سلام
می خواهم کدی بنویسم که اگر تاریخی در محدوده تاریخ قبلی باشد اجازه ثبت به تاریخ جدید را ندهد. چون ذخیره سازی به صورت خودکار است ازدو متغیر dd1,dd2 استفاده کردم . که مستقیم از dbgrid دریافت می شوند
dd1:=QuotedStr(table1.FieldValues['startdate']);
dd2:=QuotedStr(table1.FieldValues['enddate']);
QueryTemp.SQL.Add('select * from table1 where (n_par = '+form2.DBText1.Field.AsString+' ) and ( startdate between '+dd1+' and ' +dd2+' ) ');

seaman202008
شنبه 27 مرداد 1386, 17:42 عصر
دوستان گرامی .قبلاً عرض کنم من جستجو کردم ولی مشکل برطرف نشد

Batman
شنبه 27 مرداد 1386, 18:11 عصر
با سلام
این کد رو نگاه کن اگر بین محدودهای که شما وارد کردید موردی وجود داشته باشه اجازه ثبت رو به شما نمیده

select * from tablename where (firstdate>=:firstdate) and (lastdate<=:lastdate)
خوب حالا باید چک کنید

if ado.recordcount<>0 then
...

موفق باشید

seaman202008
یک شنبه 28 مرداد 1386, 05:15 صبح
سلام
امتحان می کنم .ان شا الله که بشود

seaman202008
یک شنبه 28 مرداد 1386, 20:53 عصر
امتحان کردم نشد
میشه یک مثال با تاریخ از نوع date آپلود کنید

Batman
یک شنبه 28 مرداد 1386, 21:41 عصر
با سلام
نشد که نمیشه چیکار کردی؟
چه کدی نوشتی؟
خطا چیه؟

پرواز
یک شنبه 28 مرداد 1386, 21:54 عصر
آقا شاید از تاریخ و ساعت شمسی تو دیتابیست استفاده میکنی
اگه اینجوری باشه برا بعضی از تاریخ ها جواب نمی ده ها.
مثلا اونا برج دومشون 28 یا 29 روزه است. یا چندتا تاریخ دیگه. اگه برا تاریخ شمسی اینکارو بکنی جواب درست نمیده.
بگو ببینم مشکلت دقیقا چیه؟

SYNDROME
یک شنبه 28 مرداد 1386, 22:09 عصر
با سلام

امتحان کردم نشد
میشه یک مثال با تاریخ از نوع date آپلود کنید
دوست عزیز چرا به جای فیلد از نوع Dateاز نوع رشته استفاده نمی کنید؟
کار جستجو راحتر و ساده تر است.
البته این نکته را بگم که دیکر از توابع SQLبرای تاریخهایی که به صورت رشته ذخیره می کنی نمی توانی استفاده کنی.
موفق باشید

seaman202008
یک شنبه 28 مرداد 1386, 23:00 عصر
سلام
متاسفانه برنامه گسترده و غیر قابل تغییر است و حدود 10000 پرونده وارد شده است .از تعدادی از تکه کدها که between دارند استفاده می کنم به شروع بازه تاریخ ایراد می گیرد .بانک از جنس پارادوکس است و کدهای نوشته شده برای آن جواب نداد

ضمناً پرواز جان در جواب عرض کنم که نه شمسی نیست . مثلا 1961/02/10 که بعد با الگوریتم ساده ای 1900 از سال کم می کند و....

seaman202008
یک شنبه 28 مرداد 1386, 23:02 عصر
ضمناً پرواز جان در جواب عرض کنم که نه شمسی نیست . مثلا 1961/02/10 که بعد با الگوریتم ساده ای 1900 از سال کم می کند و....

پرواز
دوشنبه 29 مرداد 1386, 01:50 صبح
قبول دارم که شمسی نیست. ولی شما هیچ وقت نمی تونی یه تاریخ مثل 1961/2/30 رو تو دیتابیس ذخیره کنی. چون بانکت این رو Invalid می دونه! به این فکر کرده بودی؟

seaman202008
دوشنبه 29 مرداد 1386, 05:07 صبح
سلام
چکارش کنم . شما راه حل بگید .متاسفانه نویسنده برنامه شخص دیگری است که در دسترس نیست و وظیفه تصحیح خطا بر عهده من شده است .

پرواز
دوشنبه 29 مرداد 1386, 05:53 صبح
1. از بانک Backup بگیر
2. یه فیلد از نوع رشته به بانک اضافه کن
3. با یک بار پیمایش بانک اون فیلد رو مقدار دهی کن (تاریخ صحیح شمسی) که این مقادیر همونایی هستن که تو بانک بصورت Date ذخیره شدن.
4. فیلد Date رو حذف کن.

Batman
دوشنبه 29 مرداد 1386, 06:22 صبح
با سلام
دوست عزیز ببین اگر شما روی تاریخ خود از دستورات sql استفاده نمیکنید (sum,min ,max,avg) بهترین راه تعریف فیلد از نوع رشته هستش در ضمن شما چرا دیتابیس خود را پارادوکس انتخاب کردید چون توی تعداد بالا ممکنه برنامه خطا بده
البته اکسس خیلی بهتره
این نکته رو هم بگم که شما تاریخ رو 1900 سال کم میکنید!!!
این یعنی چی؟
و آخرین نکته اصلا ننوشتید که خطا چیه و کدوم خط هستش و اصلا چی نوشتید برای فیلتر بین دو تاریخ
موفق باشید

پرواز
دوشنبه 29 مرداد 1386, 06:39 صبح
این نکته رو هم بگم که شما تاریخ رو 1900 سال کم میکنید!!!
این یعنی چی؟

این که 1900 سال کم می کنه منظورش اینه که سال بصورت دورقمی ذخیره میشه
مثلا 29/5/86
که اینم روش خوبی نیست به نظر من.

SYNDROME
دوشنبه 29 مرداد 1386, 07:31 صبح
با سلام

این که 1900 سال کم می کنه منظورش اینه که سال بصورت دورقمی ذخیره میشه
مثلا 29/5/86
که اینم روش خوبی نیست به نظر من.
ولی شاید بهتر است سال را همان چهار رقمی ذخیره کنید.
درست است که در میلادی حالا حالاها هیچ مشکلی پیش نمی آید ولی در شمسی 14 سال دیگر اگر شما بخواهید سال را دو رقمی ذخیره کنید مجبورید به جای 1400 از 00 استفاده کنید و دچار مشکل می شود.
موفق باشید