PDA

View Full Version : سوال: اعمال فیلتر با ADO بصورت چند منظوره - اساتید حرفه ای کمک



mina.azarm
یک شنبه 10 خرداد 1388, 12:35 عصر
سلام به همه اساتید و زحمتکشان این سایت نازنین

یک سوال دارم که مدت ها است ذهن مرا به خود مشغول کرده و هنوز موفق به انجام آن نشده ام.

من با استفاده از نمونه کد زیر می توانم دستور بدهم که در صورت زدن دکمه مربوطه عملیات فیلتر بروی فیلدهای مورد نظر من در صورت اینکه چک باکس آنها تیک خورده باشد، اعمال شود و البته کار با موفقیت و به درستی نمایش داده می شود.

لطفا کد زیر را ببینید تا بقیه ماجرا را برای شما تعریف کنم:


var
sFilter : String;
begin
DBGrid3.DataSource.DataSet.Filtered := False;

sFilter := '';

if ch1.Checked then begin
if sFilter <> '' then
sFilter := sFilter + ' OR ';

sFilter := sFilter + ' (position = '+ QuotedStr(ech1.Text) + ')';
end;

if ch2.Checked then begin
if sFilter <> '' then
sFilter := sFilter + ' AND ';

sFilter := sFilter + ' (testimony = '+ QuotedStr(ech2.Text) + ')';
end;

if ch3.Checked then begin
if sFilter <> '' then
sFilter := sFilter + ' AND ';

sFilter := sFilter + ' (jensiyat = '+ QuotedStr(ech3.Text) + ')';
end;

if ch4.Checked then begin
if sFilter <> '' then
sFilter := sFilter + ' AND ';

sFilter := sFilter + ' (organization = '+ QuotedStr(ech4.Text) + ')';
end;

if ch5.Checked then begin
if sFilter <> '' then
sFilter := sFilter + ' AND ';

sFilter := sFilter + ' (age = '+ QuotedStr(ech5.Text) + ')';
end;


DBGrid3.DataSource.DataSet.Filter := sFilter;
DBGrid3.DataSource.DataSet.Filtered := True;
DBGrid3.DataSource.DataSet.First;
label49.caption:=Inttostr(adotable3.recordcount);

حالا همانطور که می بینید این کد کار خود را بخوبی انجام می دهد.
اما مشکل من با کد دوم است. لطفا ملاحظه کنید:
در این کد مشخصه CheckedComboBox1 همان کامپوننت 1.4 enhanced CheckedComboBox است و بصورت رایگان می توانید از روی اینترنت پیدا کنید. البته اگر خواستید برایتان می فرستم.
کار این کامپوننت این است که در داخل کامبو باکس در کنار هر خط یک چک باکس قرار می دهد.


var
gfilter1 : string;

begin
DBGrid4.DataSource.DataSet.Filtered := False;
gfilter1 := '';

if CheckedComboBox1.Checked[0] then begin
if gFilter1 <> '' then
gFilter1 := gFilter1 + ' OR ';

gFilter1 := gFilter1 + Format(' (time = %s)',[QuotedStr('0')]);
end;
if CheckedComboBox1.Checked[1] then begin
if gFilter1 <> '' then
gFilter1 := gFilter1 + ' OR ';

gFilter1 := gFilter1 + Format(' (time = %s)',[QuotedStr('4')]);
end;
if CheckedComboBox1.Checked[2] then begin
if gFilter1 <> '' then
gFilter1 := gFilter1 + ' OR ';

gFilter1 := gFilter1 + Format(' (time = %s)',[QuotedStr('8')]);
end;


if CheckedComboBox2.Checked[0] then begin
if gFilter1 <> '' then
gFilter1 := gFilter1 + ' OR ';

gFilter1 := gFilter1 + Format(' (daycount = %s)',[QuotedStr('all day')]);

end;
if CheckedComboBox2.Checked[1] then begin
if gFilter1 <> '' then
gFilter1 := gFilter1 + ' OR ';

gFilter1 := gFilter1 + Format(' (daycount = %s)',[QuotedStr('saturday')]);
end;

if CheckedComboBox2.Checked[2] then begin
if gFilter1 <> '' then
gFilter1 := gFilter1 + ' OR ';

gFilter1 := gFilter1 + Format(' (daycount = %s)',[QuotedStr('sunday')]);
end;

DBGrid4.DataSource.DataSet.Filtered := False;
DBGrid4.DataSource.DataSet.Filter := gFilter1;
DBGrid4.DataSource.DataSet.Filtered := True;
DBGrid4.DataSource.DataSet.First;
label52.caption:=Inttostr(adotable4.recordcount);

کد دوم را اجرا می کنم و 4 و 8 را در کامبوباکس اول تیک می زنم و روز شنبه و یکشنبه را در کامبوباکس دوم تیک می زنم. حالا من می خواهم برنامه لیست افرادی را جزو ساعات 4 و 8 هستند و در روز شنبه و یکشنبه قرار دارند را به من نمایش دهد.
با این کد این کار بدرستی انجام نمی شود. در اصل خروجی این کد این است که اگر شما در کامبوباکس اول مثلا 4 و 8 را تیک بزنید نتایج درست نمایش داده می شود. یا اگر در کامبوباکس دومی شنبه و یکشنبه را تیک بزنید نتایج درست نمایش داده می شود.
اما اگر بخواهید بر فرض 4 و 8 و شنبه و یکشنبه را تیک بزنید ، نتایج بر هم می ریزد.
من خیلی روی این موضوع کار کردم ولی نتوانستم حلش کنم. اما یک فکر به ذهنم رسید که اگر عملی شود نتیجه می دهد. ما بیاییم نتایج فیلتر را مرحله به مرحله بدست آوریم.
یعنی برای هر فیلتر یک دکمه قرار دهیم.
مثلا برای بدست آوردن فیلتر 4 و 8 از یک دکمه و برای شنبه و یکشنبه از دکمه دیگر استفاده کنیم. فقط باید فلیتر دکمه دومی بر اساس فیلتر اولی باشد که این را هم هر کاری می کنم نمی شود.
یعنی وقتی من 4 و 8 را فیلتر کردم. وقتی می خواهم افراد شنبه و یکشنبه را جدا کنم. برنامه نیاید و بر اساس کل اطلاعات بانک فیلتر را اعمال کند. بلکه بر اساس فیلتر قبلی که محدوه را برای ما اماده کرده فیلتر را انجام دهد.
وقتی من لیست افراد 4 و 8 ساعتی را فیلتر می کنم. حالا می خواهم از داخل نتایج بدست آمده از فیلتر ساعت. لیست افرادی روز مورد نظرم را فیلتر کنم.
وقتی من از این روش نیز استفاده می کنم. 4 و 8 را درست در می اورد ولی وقتی شنبه و یکشنبه را می خواهم از داخل نتایج 4 و 8 در بیاورم. برنامه دوباره از کل بانک نتایج شنبه و یکشنبه را برای من در می آورد و همین باعث می شود نتایج فیلتر 4و 8 ساعتم بهم بخورد.

لطفا کمک کنید که بدجوری مخم ترکید.

ممنون از شما که وقتتان را برای خواندن سوالم گذاشتید.

as13851365
یک شنبه 10 خرداد 1388, 15:13 عصر
کد زیر رو دو دفعه استفاده کردید ( آیا خطای کپی ، پیست رخ داده ) ؟

if CheckedComboBox2.Checked[2] then begin
if gFilter1 <> '' then
gFilter1 := gFilter1 + ' OR ';

gFilter1 := gFilter1 + Format(' (daycount = %s)',[QuotedStr('sunday')]);
end;

if CheckedComboBox2.Checked[2] then begin
if gFilter1 <> '' then
gFilter1 := gFilter1 + ' OR ';

gFilter1 := gFilter1 + Format(' (daycount = %s)',[QuotedStr('mondy')]);
end;

در قسمت بالا شما در هر مرحلهCheckedComboBox2.Checked[2] رو بررسی می کنید

mina.azarm
یک شنبه 10 خرداد 1388, 15:52 عصر
سلام
الان رفعش می کنم

راستی چیزی دستگیرت شد؟

as13851365
دوشنبه 11 خرداد 1388, 11:19 صبح
منظور شما رو از " چیزی دستگیرت شد؟" متوجه نشدم ولی اگه منظورت کدهات بود که باید بگم من برای این جور مباحث ترجیح می دم با دستورات sql کار کنم تا با فیلتـر ، حال اگه منظور دیگری داشتی واضحتر بگی زودتر می فهمم

mina.azarm
دوشنبه 11 خرداد 1388, 12:38 عصر
سلام
شما اگر می توانی با adoquery و با دستورات sql مشکل منو حل کنید لطفا راهنمایی کنید.

مرسی

bmanfy
دوشنبه 11 خرداد 1388, 20:02 عصر
با سلام .
مشکل شما در این بخشه که نباید Or بنویسید :


if CheckedComboBox2.Checked[0] then begin
if gFilter1 <> '' then
gFilter1 := gFilter1 + ' OR ';

باید به جای Or از and استفاده کنید .
چرا که به عنوان مثال میخواهید در روزهای مشخص و ساعات مشخص باشه .
یعنی دوتا شرط برقرار باشه . پس دیگه نیاز به دوتا فیلتر نیست . از طرفی وقتی شما فیلتر دوم رو به یک Ado نسبت بدهید قبلی از بین میره .

البته در Sql میشه دوتا بازجست به یک جدول اعمال کرد به این صورت که اولین بازجست رو درون یک جدول کمکی میریزید ( As TempTbl) و بازجست دوم بر روی این جدول کمکی صورت بگیره .
اما برای این کار شما نیازی به این دنگو فنگا نیست .
که با همون فیلتر حل میشه .
اما خوب میشه گفت بهینه نیست . چرا که یک مرتبه کل اطلاعات واکشی میشه و باز از بین اونها شما یکسری رو فیلتر میکنی . بهتره همون اول اطلاعاتی رو که لازم داری واکشی کنی .

مثل کد زیر :


Var
SqlTemp : String ;
Begin
//------------ get Sql
if ch1.checked then
SqlTemp := '(position =' + QuotedStr(ech1.Text) + ')';
if ch2.checked then
if SqlTemp <> then
SqlTemp := SqlTemp + ' And | Or ';
{ and Other Code Of filtring }
//------------ Set Sql
with AdoQuery do
begin
close ;
Sql.Clear ;
Sql := sqlTemp ;
Open;
end ;//with
end ;


امیدوارم منظور شما رو درست فهمیده باشم .

mina.azarm
دوشنبه 11 خرداد 1388, 21:08 عصر
سلام
مشکل من حل نشد.
اما برای حل این موضوع یک نظریه دارم که نمی دانم میشه انجامش داد یا نه!

من فکر می کنم اگر ما فیلتر را مرحله به مرحله انجام بدیم مشکل حل میشه.

یعنی اینکه برای هر فیلد با محدوده هاش یک دکمه جدا گانه بگذاریم.

منظورم این است که ما مثلا اول بگوییم لیست افرادی که روزانه 4 ساعت کار می کنند را برنامه فیلتر کند. بعد بدون اینکه دوباره فیلتر از اول شروع کنه به فعالیت بگوییم از نتایج فیلتر قبلی که بدست آمد حالا از داخل این نتایج آنها که روزهای شنبه و یکشنبه می آیند را فیلتر کن.
بعد از این دو فیلتر حالا بگوییم از نتایجی که فیلتر اول داد و فیلتر دوم محدودترش کرد حالا افرادی را برای من از داخل این لیست فیلتر کن که ....

as13851365
سه شنبه 12 خرداد 1388, 10:00 صبح
من اگه جای تو بودم همچین کاری نمی کردم یعنی اصلا معنی نداره که تک تک برای هر کاری دکمه قرار بدی !

من در برنامه کتابخانه از کد زیر استفاده کردم حالا شما از روی کدی که من قرار دادم کدی برای کار خود بنویس و ازش استفاده کن. ( من در برنامه از 4 المنت [سه تا Edit و یک کامبوباکس] استفاده کردم )


procedure Tk_book.Edit4Change(Sender: TObject);
var q:string;
t:boolean;
begin
q:='select * from book ';
t:=false;

if edit4.Text<>''then
begin
t:=true;
q:=q+'where name_book like "%'+edit4.text+'%"';
end;
if edit5.Text<>''then
begin
if t=true then
q:=q+' and name_nevisande like "%'+edit5.text+'%"'
else
begin
t:=true;
q:=q+'where name_nevisande like "%'+edit5.text+'%"'
end;
end;
if Edit6.Text<>'' then
begin
if t=true then
q:=q+' and entesharat like "%'+edit6.Text+'%"'
else
begin
t:=true;
q:=q+'where entesharat like "%'+edit6.Text+'%"'
end;
end;
if ComboBox3.ItemIndex>0 then
begin
if t=true then
q:=q+' and mozo='+get_mozo(ComboBox3.Text)
else
q:=q+'where mozo='+get_mozo(ComboBox3.Text);
end;
run_query(q);
end;

mina.azarm
سه شنبه 12 خرداد 1388, 10:53 صبح
سلام
مرسی
آیا من همین کد شما را در برنامه ام بگذارم اجرا میشود.
هیچ کلمپوننتی نیاز نیست. مثلا adoquery یا ...
اگر هست لطفا بگویید کدهای آن چی هستش.
راستی میشه کدتون را برای من تنظیم کنی.

ببین من 3 تا کامبوباکس دارم که داخل هر کدام 3 تا چک باکس است. البته این یک مثال است و من بیشتر از اینها محدوده دارم.
بوسیله کامپوننت enhanced checkedcombobox 1.4 freeware ساختمش.
هر کامبوباکسی برای یک فیلد است و چک باکس های هر کامبوباکس محدوده های هر فیلد است.

من می خواهم اگر در کامبوباکس اولی 2 یا 3 تا چک باکس را تیک زدم و در کامبوباکس دومی و سومی هم همینطور مثلا 1 یا 2 تا تیک زدم. فیلتر بر اساس تمامی این محدودها اعمال بشه.
حالا اگر کل کدی را که می تونه منو کمک کنه برایم بفرستی ممنون می شم. نمونه کد من برای آن این است:


var
gfilter1 : string;

begin
DBGrid4.DataSource.DataSet.Filtered := False;
gfilter1 := '';

if CheckedComboBox1.Checked[0] then begin
if gFilter1 <> '' then
gFilter1 := gFilter1 + ' OR ';

gFilter1 := gFilter1 + Format(' (time = %s)',[QuotedStr('0')]);
end;
if CheckedComboBox1.Checked[1] then begin
if gFilter1 <> '' then
gFilter1 := gFilter1 + ' OR ';

gFilter1 := gFilter1 + Format(' (time = %s)',[QuotedStr('4')]);
end;
if CheckedComboBox1.Checked[2] then begin
if gFilter1 <> '' then
gFilter1 := gFilter1 + ' OR ';

gFilter1 := gFilter1 + Format(' (time = %s)',[QuotedStr('8')]);
end;


if CheckedComboBox2.Checked[0] then begin
if gFilter1 <> '' then
gFilter1 := gFilter1 + ' OR ';

gFilter1 := gFilter1 + Format(' (daycount = %s)',[QuotedStr('all day')]);

end;
if CheckedComboBox2.Checked[1] then begin
if gFilter1 <> '' then
gFilter1 := gFilter1 + ' OR ';

gFilter1 := gFilter1 + Format(' (daycount = %s)',[QuotedStr('saturday')]);
end;

if CheckedComboBox2.Checked[2] then begin
if gFilter1 <> '' then
gFilter1 := gFilter1 + ' OR ';

gFilter1 := gFilter1 + Format(' (daycount = %s)',[QuotedStr('sunday')]);
end;

DBGrid4.DataSource.DataSet.Filtered := False;
DBGrid4.DataSource.DataSet.Filter := gFilter1;
DBGrid4.DataSource.DataSet.Filtered := True;
DBGrid4.DataSource.DataSet.First;
label52.caption:=Inttostr(adotable4.recordcount);

هر کسی بتواند منو کمک کند واقعا جهاد کرده :چشمک:

از شما هم ممنون as13851365 (http://barnamenevis.org/forum/member.php?u=35098)

mina.azarm
پنج شنبه 14 خرداد 1388, 15:27 عصر
کسی به داد ما برسه

as13851365
شنبه 16 خرداد 1388, 15:45 عصر
در کد زیر چون مقدار اولیه خالی است نیازی به شرط نیست

var
gfilter1 : string;

begin
DBGrid4.DataSource.DataSet.Filtered := False;
gfilter1 := '';

if CheckedComboBox1.Checked[0] then begin
if gFilter1 <> '' then
gFilter1 := gFilter1 + ' OR ';

gFilter1 := gFilter1 + Format(' (time = %s)',[QuotedStr('0')]);
end;

قسمت بالا رو می تونی به این صورت خلاصش کنی :

var
gfilter1 : string;

begin
DBGrid4.DataSource.DataSet.Filtered := False;
gfilter1 := '';

gFilter1 := Format(' (time = %s)',[QuotedStr('0')]);

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

1 ) نام جدول و یا جدول هایی که می خواهی اطلاعات رو ازش استخراج کنی رو بده ( می خواهی عمل فیـلتر در چه جدولی انجام بشه نام آن جدول رو بگو )
2 ) نام فیلدها مربوط به جستجو رو مشخص کن
3 ) نام چک باکس ها رو مشخص کن و تعیین کن که کدام چک باکس برای کدام فیلد است.

اگه این اطلاعات رو بگی با دستورات SQL درستش می کنیم .

mina.azarm
یک شنبه 17 خرداد 1388, 14:14 عصر
سلام لطفا این کد را نگاه کنید.
شما با استفاده از این کد می توانید در هربار فیلتر لیست افرادی را که در هر یک از این کامبوباکس ها گفته ام را پیدا کنید حالا چه فقط یک گروه از یک فیلد یا نمایش مثلا افراد روزهای شنبه و یکشنبه که در این کد در بخش فیلد "روزخدمت" است. حالا من می خواهم به جایی اینکه بشود مثلا فقط افراد روز شنبه و سه شنبه را ببینیم بشود لیست افرادی را ببینیم که شنبه و سه شنبه هستند و "محل" آنها مثلا checkcombo9.Items.Strings[0] و checkcombo9.Items.Strings[2] است و نوبت آنها checkcombo7.Items.Strings[0] است.
من از کامپوننت1.4 enhanced checked combobox استفاده می کنم که می توانید از نت پیدا کنید.



DBGrid2.DataSource.DataSet.Filtered := False;

Filter1 := '';
Filter2 := '';
Filter3 := '';
Filter4 := '';
Filter5 := '';
Filter6 := '';
Filter7 := '';
Filter8 := '';
Filter9 := '';
Filter10 := '';
Filter11 := '';

if checkcombo1.Text <> '' then begin
if Filter1 <> '' then
Filter1 := Filter1 + ' OR ';

Filter1 := '(نام =' + QuotedStr(checkcombo1.Text)+')';
end;

if checkcombo2.Text <> '' then begin
if Filter2 <> '' then
Filter2 := Filter2 + ' OR ';

Filter2 := '(فامیلی =' + QuotedStr(checkcombo2.Text)+')';
end;

if checkcombo3.Checked[0] then begin
if Filter3 <> '' then
Filter3 := Filter3 + ' OR ';

Filter3 := Filter3 + Format(' (جنسیت = %s)',[QuotedStr(checkcombo3.Items.Strings[0])]);
end;
if checkcombo3.Checked[1] then begin
if Filter3 <> '' then
Filter3 := Filter3 + ' OR ';

Filter3 := Filter3 + Format(' (جنسیت = %s)',[QuotedStr(checkcombo3.Items.Strings[1])]);
end;


if checkcombo4.Checked[0] then begin
if Filter4 <> '' then
Filter4 := Filter4 + ' OR ';

Filter4 := Filter4 + Format(' (شیفت = %s)',[QuotedStr(checkcombo4.Items.Strings[0])]);
end;
if checkcombo4.Checked[1] then begin
if Filter4 <> '' then
Filter4 := Filter4 + ' OR ';

Filter4 := Filter4 + Format(' (شیفت = %s)',[QuotedStr(checkcombo4.Items.Strings[1])]);
end;
if checkcombo4.Checked[2] then begin
if Filter4 <> '' then
Filter4 := Filter4 + ' OR ';

Filter4 := Filter4 + Format(' (شیفت = %s)',[QuotedStr(checkcombo4.Items.Strings[2])]);
end;


if checkcombo5.Checked[0] then begin
if Filter5 <> '' then
Filter5 := Filter5 + ' OR ';

Filter5 := Filter5 + Format(' (پست = %s)',[QuotedStr(checkcombo5.Items.Strings[0])]);
end;
if checkcombo5.Checked[1] then begin
if Filter5 <> '' then
Filter5 := Filter5 + ' OR ';

Filter5 := Filter5 + Format(' (پست = %s)',[QuotedStr(checkcombo5.Items.Strings[1])]);
end;
if checkcombo5.Checked[2] then begin
if Filter5 <> '' then
Filter5 := Filter5 + ' OR ';

Filter5 := Filter5 + Format(' (پست = %s)',[QuotedStr(checkcombo5.Items.Strings[2])]);
end;


if checkcombo6.Checked[0] then begin
if Filter6 <> '' then
Filter6 := Filter6 + ' OR ';

Filter6 := Filter6 + Format(' (روزخدمت = %s)',[QuotedStr(checkcombo6.Items.Strings[0])]);
end;
if checkcombo6.Checked[1] then begin
if Filter6 <> '' then
Filter6 := Filter6 + ' OR ';

Filter6 := Filter6 + Format(' (روزخدمت = %s)',[QuotedStr(checkcombo6.Items.Strings[1])]);
end;
if checkcombo6.Checked[2] then begin
if Filter6 <> '' then
Filter6 := Filter6 + ' OR ';

Filter6 := Filter6 + Format(' (روزخدمت = %s)',[QuotedStr(checkcombo6.Items.Strings[2])]);
end;


if checkcombo7.Checked[0] then begin
if Filter7 <> '' then
Filter7 := Filter7 + ' OR ';

Filter7 := Filter7 + Format(' (نوبت = %s)',[QuotedStr(checkcombo7.Items.Strings[0])]);
end;
if checkcombo7.Checked[1] then begin
if Filter7 <> '' then
Filter7 := Filter7 + ' OR ';

Filter7 := Filter7 + Format(' (نوبت = %s)',[QuotedStr(checkcombo7.Items.Strings[1])]);
end;


if checkcombo8.Checked[0] then begin
if Filter8 <> '' then
Filter8 := Filter8 + ' OR ';

Filter8 := Filter8 + Format(' (مدت = %s)',[QuotedStr(checkcombo8.Items.Strings[0])]);
end;
if checkcombo8.Checked[1] then begin
if Filter8 <> '' then
Filter8 := Filter8 + ' OR ';

Filter8 := Filter8 + Format(' (مدت = %s)',[QuotedStr(checkcombo8.Items.Strings[1])]);
end;
if checkcombo8.Checked[2] then begin
if Filter8 <> '' then
Filter8 := Filter8 + ' OR ';

Filter8 := Filter8 + Format(' (مدت = %s)',[QuotedStr(checkcombo8.Items.Strings[2])]);
end;


if checkcombo9.Checked[0] then begin
if Filter9 <> '' then
Filter9 := Filter9 + ' OR ';

Filter9 := Filter9 + Format(' (محل = %s)',[QuotedStr(checkcombo9.Items.Strings[0])]);
end;
if checkcombo9.Checked[1] then begin
if Filter9 <> '' then
Filter9 := Filter9 + ' OR ';

Filter9 := Filter9 + Format(' (محل = %s)',[QuotedStr(checkcombo9.Items.Strings[1])]);
end;
if checkcombo9.Checked[2] then begin
if Filter9 <> '' then
Filter9 := Filter9 + ' OR ';

Filter9 := Filter9 + Format(' (محل = %s)',[QuotedStr(checkcombo9.Items.Strings[2])]);
end;


if checkbox10.checked then begin
if Filter10 <> '' then
Filter10 := Filter10 + ' OR ';
Filter10 := '(نوع =' + QuotedStr('True')+')';
end;


if (Filter1 <> '') and (Filter2 = '') and (Filter3 = '') and (Filter4 = '') and (Filter5 = '') and (Filter6 = '') and (Filter7 = '') and (Filter8 = '') and (Filter9 = '') and (Filter10 = '') then begin
Filter11 := Filter1;
end;
if (Filter2 <> '') and (Filter1 = '') and (Filter3 = '') and (Filter4 = '') and (Filter5 = '') and (Filter6 = '') and (Filter7 = '') and (Filter8 = '') and (Filter9 = '') and (Filter10 = '') then begin
Filter11 := Filter2;
end;
if (Filter3 <> '') and (Filter1 = '') and (Filter2 = '') and (Filter4 = '') and (Filter5 = '') and (Filter6 = '') and (Filter7 = '') and (Filter8 = '') and (Filter9 = '') and (Filter10 = '') then begin
Filter11 := Filter3;
end;
if (Filter4 <> '') and (Filter1 = '') and (Filter3 = '') and (Filter2 = '') and (Filter5 = '') and (Filter6 = '') and (Filter7 = '') and (Filter8 = '') and (Filter9 = '') and (Filter10 = '') then begin
Filter11 := Filter4;
end;
if (Filter5 <> '') and (Filter1 = '') and (Filter3 = '') and (Filter4 = '') and (Filter2 = '') and (Filter6 = '') and (Filter7 = '') and (Filter8 = '') and (Filter9 = '') and (Filter10 = '') then begin
Filter11 := Filter5;
end;
if (Filter6 <> '') and (Filter1 = '') and (Filter3 = '') and (Filter4 = '') and (Filter5 = '') and (Filter2 = '') and (Filter7 = '') and (Filter8 = '') and (Filter9 = '') and (Filter10 = '') then begin
Filter11 := Filter6;
end;
if (Filter7 <> '') and (Filter1 = '') and (Filter3 = '') and (Filter4 = '') and (Filter5 = '') and (Filter6 = '') and (Filter2 = '') and (Filter8 = '') and (Filter9 = '') and (Filter10 = '') then begin
Filter11 := Filter7;
end;
if (Filter8 <> '') and (Filter1 = '') and (Filter3 = '') and (Filter4 = '') and (Filter5 = '') and (Filter6 = '') and (Filter7 = '') and (Filter2 = '') and (Filter9 = '') and (Filter10 = '') then begin
Filter11 := Filter8;
end;
if (Filter9 <> '') and (Filter1 = '') and (Filter3 = '') and (Filter4 = '') and (Filter5 = '') and (Filter6 = '') and (Filter7 = '') and (Filter8 = '') and (Filter2 = '') and (Filter10 = '') then begin
Filter11 := Filter9;
end;
if (Filter10 <> '') and (Filter1 = '') and (Filter3 = '') and (Filter4 = '') and (Filter5 = '') and (Filter6 = '') and (Filter7 = '') and (Filter8 = '') and (Filter9 = '') and (Filter2 = '') then begin
Filter11 := Filter10;
end;

DBGrid2.DataSource.DataSet.Filtered := False;
DBGrid2.DataSource.DataSet.Filter := Filter11;
DBGrid2.DataSource.DataSet.Filtered := True;
DBGrid2.DataSource.DataSet.First;
label43.caption:=Inttostr(adotable2.recordcount);


مرسی

bmanfy
جمعه 22 خرداد 1388, 19:12 عصر
لطفا برای نوشتن کد ها از تگ کد استفاده کنید استفاده کنید (در بالا ی پنجره نوشتن) تا کدها تون به درستی نمایش داده بشه .(این جوری زودتر به جو.اب هم میرسید)

as13851365
شنبه 23 خرداد 1388, 12:02 عصر
سلام لطفا اين کد را نگاه کنيد.
شما با استفاده از اين کد مي توانيد در هربار فيلتر ليست افرادي را که در هر يک از اين کامبوباکس ها گفته ام را پيدا کنيد حالا چه فقط يک گروه از يک فيلد يا نمايش مثلا افراد روزهاي شنبه و يکشنبه که در اين کد در بخش فيلد "روزخدمت" است. حالا من مي خواهم به جايي اينکه بشود مثلا فقط افراد روز شنبه و سه شنبه را ببينيم بشود ليست افرادي را ببينيم که شنبه و سه شنبه هستند و "محل" آنها مثلا checkcombo9.Items.Strings[0] و checkcombo9.Items.Strings[2] است و نوبت آنها checkcombo7.Items.Strings[0] است.
من از کامپوننت1.4 enhanced checked combobox استفاده مي کنم که مي توانيد از نت پيدا کنيد.


یعنی مشکلی ندارید دیگه ! همه چیز حل شد . ( آخه از پست شما چیزی معلوم نیست ولی فکر کنم حل شده باشه )