View Full Version : جستجوی یک رکورد بین دو تاریخ
ssmehizadeh
جمعه 30 دی 1384, 12:27 عصر
با سلام
من در بانک اطلاعاتی یک فیلد از نوع date دارم و تاریخ به صورت میلادی در اون ذخیره می کنم حالا می خوام در جستجو وقتی کاربر یک تاریخ رو وارد میکنه من رکوردها رو از اول تا اون تاریخی که کاربر وارد کرده برگردونم .
ابتدا یک متغیر از نوع tdate دارم و مقداری رو که کاربر وارد می کنه با تابع strtodate به مقدار تاریخی تبدیل می کنم و در sql دارم کد زیر را می نویسم :
select * from sabe where n_date=t چرا داره پیغام خطا میده..
ssmehizadeh
جمعه 30 دی 1384, 19:10 عصر
امیدوارم منظورم رو فهمیده باشید ...
می خواهم یک فاصله زمانی رو از یک تاریخ مشخص تا تاریخ مشخصی دیگر از نوع tdate رو جستجو کنم ..
هم ورودی به صورت tdate است هم فیلد ذخیره شده در بانک از نوه tdate هستش ...
کمکم کنید .............
vcldeveloper
شنبه 01 بهمن 1384, 02:51 صبح
SELECT * FROM Sabe WHERE (n_date > StartDate) AND (n_date < EndDate)
ssmehizadeh
شنبه 01 بهمن 1384, 09:13 صبح
آقای کشاوز پیغام type mismatch میده ......... فیلدی که در بانک اطلاعاتی داره تاریخ رو ذخیره میکنه از نوع date هستش و به صورت میلادی ذخیره میشه (20/01/2006)...
خواهش می کنم هرچه زودتر کمکم کنید خیلی فوریه ......
mzjahromi
شنبه 01 بهمن 1384, 09:21 صبح
اگر startdate,enddate هم از نوع Date باشن نباید مشکلی داشته باشی.کدی رو که تو دلفی استفاده کردی بنویس
vcldeveloper
شنبه 01 بهمن 1384, 15:14 عصر
دلفی اون فیلد را با چه نوع Data Type ایی نشون میده (Float, TDateTime یا چیز دیگه)؟
ssmehizadeh
شنبه 01 بهمن 1384, 20:08 عصر
t:=strtodate(year+'/'+month+'/'+day);
s1:='select * from sabt where date_sabt='+''''t+'''';
یا
s1:='select * from sabt where date_sabt='+''t+'';
و
Query1.Active:=false;
Query1.SQL.Clear;
Query1.SQL.Add(s1);
Query1.Active:=true;
امیدوارم فهمیده باشین ..........
ssmehizadeh
شنبه 01 بهمن 1384, 21:28 عصر
راستی از طریق object inspector هم دارم مستقیما در query و خاصیت sql اون می نویسم :
select * from sabt where date_sabt=2006/01/20
یا
select * from d:\sabt where date_sabt='2006/01/20'
و وقتی خاصیت active رو به true تغییر میدم پیغام : invalid use of keyword رو میده ...
ممنون
ssmehizadeh
یک شنبه 02 بهمن 1384, 05:56 صبح
اساتید چرا کسی جواب مارو نمیده .........
اَرژنگ
یک شنبه 02 بهمن 1384, 07:06 صبح
try
select * from sabt where date_sabt="2006/01/20"
or
select * from sabt where date_sabt='2006/01/20'
ssmehizadeh
یک شنبه 02 بهمن 1384, 07:14 صبح
همین کد رو هم نوشتم داره پیغام :
type mismatch in expression میده این پیغام به دلیل این نیست که من فیلد تاریخ رو از نوع date گرفتم و حالا داریم اونو با یک رشته مقایسه می کنیم ..........
اگه راه حلی دارید ممنون میشم بگین خیلی بدجور گیر کردم ......
اَرژنگ
یک شنبه 02 بهمن 1384, 07:20 صبح
select * from sabt where date_sabt=:sbDate
In
Query.Params
Set
sbDate=2006/01/20
ssmehizadeh
یک شنبه 02 بهمن 1384, 07:50 صبح
ببخشید این کد و باید چطوری بکار ببرم ..........
تمام کد رو به صورت رشته در نظر بگیرم یا ...............
ssmehizadeh
یک شنبه 02 بهمن 1384, 08:08 صبح
البته ببخشید دوستان
این مشکل با خاصیت filter از ttable به راحتی قابل حله امام مشکل دیگه اینه که اطلاعات من باید sort شده باشه به همین خاطر دارم از query استفاده می کنم.....
خودم sort کردن table رو بلد نبودم و توی سایت هم هرچی گشتم درموردش اطلاعات مفیدی پیدا نکردم ...
ممنون میشم اگه بیشتر راهنمایی کنید که از فیلتر استفاده کنم و اطلاعات sort شده هم باشه.
اَرژنگ
یک شنبه 02 بهمن 1384, 08:17 صبح
البته ببخشید دوستان
این مشکل با خاصیت filter از ttable به راحتی قابل حله امام مشکل دیگه اینه که اطلاعات من باید sort شده باشه به همین خاطر دارم از query استفاده می کنم.....
خودم sort کردن table رو بلد نبودم و توی سایت هم هرچی گشتم درموردش اطلاعات مفیدی پیدا نکردم ...
ممنون میشم اگه بیشتر راهنمایی کنید که از فیلتر استفاده کنم و اطلاعات sort شده هم باشه.
منتها تمام رکوردایی را که لازم نیست میگیره و برنامه را یواش میکنه.
این مشکل با استفاده از TQuery به راحتی قابل حله، فقط اینکه جه نوع تاریخ فرمتی را دارید اسیفاده میکنید ممکنه اشکال بوجود بیاره.
اَرژنگ
یک شنبه 02 بهمن 1384, 08:28 صبح
ببخشید این کد و باید چطوری بکار ببرم ..........
تمام کد رو به صورت رشته در نظر بگیرم یا ...............
در ObjectInspector ، در TQuery.Sql
select * from sabt where date_sabt=:sbDate
در ObjectInsepector ، در TQuery.Params
Set
DataType to ftDate
Set
Value to 2006/01/12
البته ممکنه که این نوع فرمت تاریخ را قبول نکنه، ولی استفاده از TTable.Filter معمولاً کاره اشتباهیه
ssmehizadeh
یک شنبه 02 بهمن 1384, 08:49 صبح
ممنون از جواباتون آقاارژنگ
ولی من از هر مدلی برای تاریخ استفاده می کنم باز هم میگه اعتبار نداره ..........
خوب من باید چیکار کنم کسی هیچ راهی سراغ نداره ......
یعنی تا حالا کسی با این مشکل برخورد نکرده ..........
اَرژنگ
یک شنبه 02 بهمن 1384, 09:22 صبح
ممنون از جواباتون آقاارژنگ
ولی من از هر مدلی برای تاریخ استفاده می کنم باز هم میگه اعتبار نداره ..........
خوب من باید چیکار کنم کسی هیچ راهی سراغ نداره ......
یعنی تا حالا کسی با این مشکل برخورد نکرده ..........
پروژه را ضمیمه کردم.
میتونید با عوض کردن DateSource.DateSet به Table1 و یا Query1 اینکه کار میکند را ببینید.
mzjahromi
یک شنبه 02 بهمن 1384, 12:00 عصر
اینجوری بنویس:
s1:='select * from sabt where date_sabt=:D1';
Query1.Active:=false;
Query1.SQL.Clear;
Query1.SQL.Add(s1);
Query1.Params[0].AsDate:=t1;
Query1.Active:=true;
ali_abbasi22145
یک شنبه 02 بهمن 1384, 12:11 عصر
سلام
با کامپوننت Infopower فقط کامپوننت wwfilterDialog1را روی فرمت بگذار و روی رویداد یک دگمه کد زیر را بنویس تمام!!!
wwfilterDialog1.Execute;
ssmehizadeh
یک شنبه 02 بهمن 1384, 13:01 عصر
ممنونم آقا ارژنگ عالی بود ..............
خیلی مرسی
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.