PDA

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



parniant
پنج شنبه 30 آبان 1387, 08:25 صبح
با سلام
من تو برنامم سالهای مختلف رو ثبت می کنم و به ازای هر سال ترم رو هم ثبت می کنم (و رشته هایی رو که می خوام در اون سال ثبت بشن ) و برای سال و ترم از combobox استفاده می کنم و می خوام وقتی که سال مثلا 85-86 رو در combobox انتخاب می کنم ترم های مربوط به اون بیاد و در دستورات مربوط به comboboxchange می گم هر موقع سال مشابه سال موجود در coimbobox است ترم اون رو در combo مربوط به ترم نشان دهد اما مشکلی که دارم اینه که چون با یک سال و ترم درسهای زیادی ثبت کرده ام به ازای یک سال مثلا 85-86 چند ترم 1 و چند تا هم ترم 2 نشان داده می شوند در حالی که من می خوام اگه در اون سال ترم مثلا 1 ثبت شده است اونو فقط یکبار نشون بده از distinct استفاده می کنم اما چون دی بی گریدم به adoquery مربوط به این combobox متصل است فقط ستون مربوط به ترم پر است و بقیه ستون ها خالی است از group by هم استفاده می کنم اما پیغام خطا می دهد (البته شاید طریقه بکارگیری اش را درست نمی دانم )

ADOQuery4.Close;
adoquery4.SQL.Add('select distinct tterm,* from ttclocknahaye ');
ADOQuery4.SQL.Add('WHERE (tyear LIKE''' + combobox1.TEXT+'%'')order by ido');
adoQuery4.Open;
adoQuery4.First;
while not adoQuery4.Eof do
begin
ComboBox4.Items.Add(ADOQuery4.FieldValues['tterm']);
adoQuery4.Next;
end;
و این هم در مورد group by

adoquery4.SQL.Add('select tterm,* from ttclocknahaye ');
ADOQuery4.SQL.Add('WHERE (tyear LIKE''' + combobox1.TEXT+'%'')group by tterm');
adoQuery4.Open;
while not adoQuery4.Eof do
begin
ComboBox4.Items.Add(ADOQuery4.FieldValues['tterm']);
adoQuery4.Next;
end;
ممنون می شم کمک کنید

mafazel
پنج شنبه 30 آبان 1387, 10:25 صبح
با سلام
استفاده از Group By درسته ولی در هنگام استفاده از آن از * استفاده نکنید.
کد زیر رو امتحان کنید:


ADOQuery4.Close;
adoquery4.SQL.Clear;
adoquery4.SQL.Add('select distinct tterm from ttclocknahaye ');
ADOQuery4.SQL.Add('WHERE (tyear LIKE ' +QuotedStr( combobox1.TEXT+'%')+') Group by tterm');
adoQuery4.Open;
.....

parniant
پنج شنبه 30 آبان 1387, 22:11 عصر
سلام دوست عزیز
من خودم هم از این دستور استفاده کرده ام مشکلی که هست اینه که می خوام دی بی گریدم به این adoquery وصل باشه تا با تغییر سال و ترم در دی بی گریدم دیده بشه اما این روش که گفتید فقط ستون مربوط به ترم رو نشون می ده و بقیه ستون هایم رو نشون نمی ده

mafazel
جمعه 01 آذر 1387, 12:21 عصر
با سلام
بهترین راهش اینه که برای ComboBox از یک Query جداگانه استفاده کنید. بعد از اضافه کردن ترمها به ComboBox اونو ببندید که حافظه اشغال نکنه. ما معمولا تو برنامه هامون یه Query بنام QrTemp میذاریم که برای همین کارهای موقتی در همه جا ازش استفاده می کنیم. یا در همون روش قبلی خودتون بعد از اضافه کردن ترم ها به ComboBox، یک SQL دیگر برای Query بنویسید و از * استفاده کنید.
موفق باشید.