PDA

View Full Version : مشکل با جستجو در رکورد های یک فیلد



Shahryar_Bmp
جمعه 05 مرداد 1386, 18:30 عصر
سلام :لبخندساده:
من تو بانکی که با اکسس درست کردم فیلدی به نام Date دارم که string است و من می خواهم با کمک دستورات sql به طور مثال بزگترین مقدار فیلد gheymat که در کل بانک که مثلا 3000 است رو در فیلد bgh ریختم و میخوام با توجه به bgh مقدار date از همون رکورد رو در یک لیبل بریزم
البته من سرچ کردم و نتیجه ای مناسب کارم پیدا نکردم
در ضمن از دوستان هم ممنونم که سری جواب میدن

SYNDROME
جمعه 05 مرداد 1386, 20:00 عصر
با سلام

سلام :لبخندساده:
من تو بانکی که با اکسس درست کردم فیلدی به نام Date دارم که string است و من می خواهم با کمک دستورات sql به طور مثال بزگترین مقدار فیلد gheymat که در کل بانک که مثلا 3000 است رو در فیلد bgh ریختم و میخوام با توجه به bgh مقدار date از همون رکورد رو در یک لیبل بریزم
البته من سرچ کردم و نتیجه ای مناسب کارم پیدا نکردم
در ضمن از دوستان هم ممنونم که سری جواب میدن
می توانی با دستور زیر بزرگترین مقدار یک فیلد را به دست آوری.


SELECT MAX(Date1) AS MAXDate1
FROM TempTable

در مثال بالا بزرگترین مقدار تاریخ به دست می آید.
با دستور MAXشما می توانید بزرگترین مقدار یک فیلد Numberرا به دست آورید.
این دستور بر روی رشته هایی که دارای ساختار یکسان هستند (مانند Date1در مثال بالا)نیز جواب می دهد.
Date1برای ذخیره سازی تاریخ حتمالا به شکل زیر ذخیره می شود
دو عدد / دو عدد/دو عدد(01/01/86 ، 12/12/85)
ولی اگر به شکل روبرو ذخیره شود جواب نمی دهد(1/1/86 ، 12/12/85)
موفق باشید

Shahryar_Bmp
جمعه 05 مرداد 1386, 20:01 عصر
من از این استفاده کردم ولی جواب نداد :

ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select (Date As sql5)');
ADOQuery1.SQL.Add('From GreenHouse1');
ADOQuery1.SQL.Add('Where date Like bgh');
ADOQuery1.Active := True;
Label11.Caption := ADOQuery1.FieldByName('sql5').AsString;

Shahryar_Bmp
جمعه 05 مرداد 1386, 20:03 عصر
با سلام

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


SELECT MAX(Date1) AS MAXDate1
FROM TempTable

در مثال بالا بزرگترین مقدار تاریخ به دست می آید.
با دستور MAXشما می توانید بزرگترین مقدار یک فیلد Numberرا به دست آورید.
این دستور بر روی رشته هایی که دارای ساختار یکسان هستند (مانند Date1در مثال بالا)نیز جواب می دهد.
Date1برای ذخیره سازی تاریخ حتمالا به شکل زیر ذخیره می شود
دو عدد / دو عدد/دو عدد(01/01/86 ، 12/12/85)
ولی اگر به شکل روبرو ذخیره شود جواب نمی دهد(1/1/86 ، 12/12/85)
موفق باشید
مشکل من این نیست من این مقدارو بدست آوردم و در فیلده bgh که در پست بالا گفتم قرار دادم و حالا میخواهم که مقدار bgh در هر رکوردی که هست Date در اون رکورد رو برام در لیبل بریزه

Shahryar_Bmp
جمعه 05 مرداد 1386, 20:05 عصر
2 بار پست شده !!

Batman
جمعه 05 مرداد 1386, 22:17 عصر
دوست عزیز (gemelife) اگه درست متوجه شده باشم این کد رو هم تست کن
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('select date from tablename where(gheymat=:gheymat);
adoquery1.parameters.parambyname('gheymat').value: =edit1.text;
adoquery1.open;
label1.caption:=adoquery1.fields[date].value;

توی کروشه بالا شماره فیلد رو قرار بدید (از صفر)
موفق باشید

SYNDROME
جمعه 05 مرداد 1386, 22:23 عصر
با سلام
مقدار بزرگترین عدد را که به دست آورده اید در یک متغییر بریزید.من با کد زیر مقدار بزرگترین عدد را به دست آورده ام و در فیلد Sریخته ام:(فیلد Sاز نوع رشته است)


ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select MAX(bgh) as MAxbgh');
ADOQuery1.SQL.Add('From GreenHouse1');
ADOQuery1.Active := True;
S := ADOQuery1.FieldByName('MAxbgh'').Asstring;

حالا مقدار متغییر تاریخ همان رکورد را با کد زیر برمی گردانم و در Labelمی ریزم.


ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select *');
ADOQuery1.SQL.Add('From GreenHouse1');
ADOQuery1.SQL.Add('Where bgh='+S);
ADOQuery1.Active := True;
Label11.Caption := ADOQuery1.FieldByName('Date').AsString;

موفق باشی

Shahryar_Bmp
جمعه 05 مرداد 1386, 23:42 عصر
سلام
بازم مشکلم حل نشد
من فکر میکنم که شما درست منظورمو نفهمیدید پس بزارید کامل توضیح بدم :
من دارم بانک اطلاعاتی یک گلخانه رو می نویسم و میخوام یک قسمت گزارش بده که بیشترین مقدار محصول (Weight) چقدر بوده حالا این رو خودم و با کمک دوستان حل کردم مشکل الان اینه که من میخوام بدونم مثلا اگه بیشترین مقدار محصول 500 کیلو گرم در روز
6/5/86 بوده تاریخ (Date) در خروجی (لیبل نمایش بده)
البته از کد های دوستان اسفاده کردم ولی جواب نداد :

ADOQuery1.SQL.Clear;
adoquery1.sql.add('select Date As sql5 from GreenHouse1 where sql3=sql3');
ADOQuery1.Active := True;
در این کد sql3 مقدار بیشترین محصول است که توسط

ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select Max(weight) as sql3 From GreenHouse1');
ADOQuery1.Active := True;
S := ADOQuery1.FieldByName('sql3').Asstring;
Label14.Caption:=s;
بدست اومده و sql5 هم فیلد string برای قرار دادن تاریخ در خروجی
ممنون

علامت سوال
شنبه 06 مرداد 1386, 00:20 صبح
اگه بانکت اکسس هست حتما از [date] بجای date در دستورات SQL آستفاده کن

Shahryar_Bmp
شنبه 06 مرداد 1386, 00:38 صبح
راستی فیلد Date در این بانک از نوع رشته (string) است

علامت سوال
شنبه 06 مرداد 1386, 00:47 صبح
ببین از دستور زیر استفاده کن


SELECT MAX(gheymat) AS Expr1, [date]
FROM dr
GROUP BY [date]
ORDER BY Expr1 DESC

در این حالت اولین رکوردی که در Query ظاهر شد جواب مسئله هست

SYNDROME
شنبه 06 مرداد 1386, 00:56 صبح
با سلام
عزیز دل برادر پس من دقیقاً درست متوجه شده ام.
اگر در کد بالا نگاه کنی من در دستور اول بیشترین مقدار فیلد bgh را به دست آوردم.حالا شما به جای فیلد bgh از فیلد weightرا قرار بده و من مقدار فوق را در متغییر Sذخیره کردم.
سپس بیشترین مقدار bgh را دوباره در جدول جستجو کردم و رکورد مورد نظر را پیدا و مقدار فیلد Dateآن را در Labelمورد نظر ریختم.حالا شما بیشترین مقدار Weightرا که از دستور اول پیدا کردید را دوباره مثل من در جدول جستجو کرده و رکورد مورد نظر را پیدا کنید سپس مقدار Dateآن را در Labelمورد نظر بریزید.
موفق باشید