PDA

View Full Version : adoquery



farzad_az_shiraz
جمعه 07 دی 1386, 10:37 صبح
سلام
من میخوام وقتی برنامم اجرا میشه جدولم بر حسب تاریخ فیلتر شده باشه.
1) جدول من با یه جدول دیگه جوین هست و تاریخ فقط مال یکی از جدولها هست.
وکدی را که توی adoquery ، tsring نوشتم اینه :



SELECT visit.v_id, visit.b_id , visit.v_date , visit.v_time , visit.v_kind,bimar.b_name, bimar.b_lname,
bimar.b_fname
FROM visit CROSS JOIN bimar
where (visit.b_id=bimar.b_id)

آیا میشه جلوی دستور where که نوشتم شرط تاریخ هم اضافه کنم ؟ فکر کنم اگه بخوام این کار را کنم باید ار متغیر استفاده کنم وی چطوری ؟

توی adoquery ،onfilterrecord هم این کد را نوشتم جواب نداد :



Accept:=ADOquer2.FieldValues['v_date']=FCalendar1.TodayDate;


ممنون میشه یه کمک فوری به من بکنید.
راستی فیلد جدولم که میخوام فیلتر بشه v_date و اسم جدولم که این فیلدش هست visit هست.
این را هم بگم که با onfilterrecord برای بقیه فیلدهام جواب میده ولی واسه v_date که از نوع ( datetime,char)یعنی هر دوشو تست کردم جواب نمیده.پایگاه داده من sql server هست

ghabil
جمعه 07 دی 1386, 12:31 عصر
همون در ادامه Where بنویس


and DateField = تاریخی که میخوای


چون جداولت اسماشون با هم فرق داره و اسم فیلدات هم با هم فرق داره هیچ نیازی به متغییر و اینا نیست

afshin_delphikar
جمعه 07 دی 1386, 13:46 عصر
سلام نخسته.
چه جور میشه یه شرطی رو از برنامه گرفت و اونو توی دستور sql جا داد.یعنی مثلا توی یه ادیت باکس چیزی نوشت و اون بشه شرطمون واسه جلوی where

Touska
جمعه 07 دی 1386, 14:14 عصر
ADODataSet1.CommandText := 'select * from Parsita_Update_Tools where ' +
'Parsita_Serial = '+QuotedStr(Trim(Serial));

این یک روشش هست راه های دیگه برای رسیدن به خدا زیاده ;)

Amir_Safideh
جمعه 07 دی 1386, 15:52 عصر
اگر منظورت اینه که میخوای مقدار تاریخ رو به صورت یه پارامتر به ADOQuery پاس کنی این روش رو تست کن دستور Select رو به این شکل بنویس :


SELECT visit.v_id, visit.b_id , visit.v_date , visit.v_time , visit.v_kind,bimar.b_name,
bimar.b_lname,bimar.b_fname
FROM visit CROSS JOIN bimar
where (visit.b_id=bimar.b_id) And (DateField =:@Date)

بعد هنگامیکه میخوای ADOQuery رو باز کنی این پارامتر رو به این صورت به ADOQuery بفرست :


with ADOQuery1 do
begin
Close;
Parameters.ParamByName('@Date').Value := EDite1.Text;
SQL;
Open;
end;


البته از روش فیلتر کردن هم میتونی استفاده کنی .

farzad_az_shiraz
جمعه 07 دی 1386, 18:57 عصر
قابیل جان ممنون ولی تاریخ من ثابت نیست بلکه پادامتر هست.
amir_safideh خیلی ممنون.دقیقا همین را نوشتم و مشکلم حل شد.
در ضمن با فیلتر که کار میکنم واسه همه فیلدا جواب میده الا تاریخ خودم هم تو خماریش موندم .حتی فیلد تاریخ را از datetime به char تبدیل کردم ولی جواب نمی ده اگه کسی میدونه کمک کنه. بازم ممنون از همگی.

Amir_Safideh
دوشنبه 10 دی 1386, 11:39 صبح
اگر نوع فیلد تاریخ شما از نوع کاراکتر باشه و فرمت تاریخ هم رعایت شده باشه(مثلا به این صورت 06/06/1385) قاعدتا نباید مشکلی باشه اگر شما میخواهید جدولتون رو بر اساس رکوردهایی که برابر یک تاریخ هستند فیلتر کنید این کد باید جواب بده :


with ADOQuery1 do
begin
Filtered := False;
Filter := 'DateFiled = '+Edit1.Text;
Filtered := True;
end;

اگر هم میخواهید بین دو تا تاریخ فیلتر کنید این کد باید مشکل رو حل کنه :


with ADOQuery1 do
begin
Filtered := False;
Filter := 'DateFiled >= '+Edit1.Text+' And DateField <= '+Edit2.Text;
Filtered := True;
end;

farzad_az_shiraz
دوشنبه 10 دی 1386, 13:27 عصر
ممنون تست میکنم ببینم چی میشه.