PDA

View Full Version : روش بهتر براي فيلتر چند منظوره



سعید صابری
چهارشنبه 23 دی 1388, 10:26 صبح
سلام

هر چي توي ذهنم گشتم عنوان بهتري پيدا نكردم!

من مي خوام چند تا فيلد همزمان فيلتر كنم. از روش زير استفاده مي كنم



if Edit1.Text <> '' then
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * from table');
ADOQuery1.SQL.Add('Where name LIKE '+QuotedStr('%'+Edit1.Text+'%'));
ADOQuery1.Open;
end;
if (Edit1.Text<>'') and (Edit2.Text <> '') then
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * from Table');
ADOQuery1.SQL.Add('Where name LIKE '+QuotedStr('%'+Edit1.Text+'%'));
ADOQuery1.SQL.Add(' And lname LIKE '+QuotedStr('%'+Edit2.Text+'%'));
ADOQuery1.Open;
end;
if (Edit1.Text<>'') and (Edit2.Text <> '') and (edit3.text<>'') then
.
.
.


سوالم اينه كه اگه مثلا بخوام اينكار براي 5 تا فيلد بدم بايد كلي شرط و كد بنويسم. دوستان لطف كنن راه ساده تري بهتري كه نخواد اين همه كد نويسي كنم پيشنهاد كنن ممنون ميشم

دلفــي
چهارشنبه 23 دی 1388, 11:33 صبح
سلام

هر چی توی ذهنم گشتم عنوان بهتری پیدا نکردم!

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

سوالم اینه که اگه مثلا بخوام اینکار برای 5 تا فیلد بدم باید کلی شرط و کد بنویسم. دوستان لطف کنن راه ساده تری بهتری که نخواد این همه کد نویسی کنم پیشنهاد کنن ممنون میشم

مي توني از روش زير هم استفاده كني :




ADOQuery1.SQL.Add('Select * from Table');
ADOQuery1.SQL.Add('Where Name LIKE :Type1 AND LName LIKE :Type2');
ADOQuery1.Parameters.ParamByName('Type1').Value := '%'+Edit1.Text+'%';
ADOQuery1.Parameters.ParamByName('Type2').Value := '%'+Edit2.Text+'%';

benyaminrahimi
چهارشنبه 23 دی 1388, 13:56 عصر
مي توني از dev express استفاده کنيد

بدون يک خط کد نويسي و وابسته به ديتا ست

و خيلي امکانات ديگه هم داره
در مورد چاپش هم قبلا بحث کردم

سعید صابری
چهارشنبه 23 دی 1388, 16:17 عصر
می تونی از روش زیر هم استفاده کنی :




ADOQuery1.SQL.Add('Select * from Table');
ADOQuery1.SQL.Add('Where Name LIKE :Type1 AND LName LIKE :Type2');
ADOQuery1.Parameters.ParamByName('Type1').Value := '%'+Edit1.Text+'%';
ADOQuery1.Parameters.ParamByName('Type2').Value := '%'+Edit2.Text+'%';



ممنون رفيق.زياد فرقي نمي كنه همون شد با سطر اضافه

hossein_h62
پنج شنبه 24 دی 1388, 07:39 صبح
می تونی از dev express استفاده کنید

بدون یک خط کد نویسی و وابسته به دیتا ست

و خیلی امکانات دیگه هم داره
در مورد چاپش هم قبلا بحث کردم

ولی گریدش راست به چپ نمیشه که ؟؟!!

سعید صابری
پنج شنبه 24 دی 1388, 08:18 صبح
ehlib راست به چپ هم ساپورت مي كنه بصورت كامل. البته امكاناش در حد dev نيست ولي خوبه. اما من نميخوام از هيچ كامپوننت كمكي استفاده كنم بايد از كامپوننت‌هاي موجود استفاده كنم

hossein_h62
پنج شنبه 24 دی 1388, 09:17 صبح
توی یه برنامه دیدم که برای فیلتر کردن فیلدها از یه چیزی مثله گرید استفاده میکنن.خیلی هم قویه.روی هر فیلدی کاربر بخاد میتونه فیلتر کنه و گزارش یا کوئری بگیره...

سعید صابری
پنج شنبه 24 دی 1388, 10:09 صبح
توی یه برنامه دیدم که برای فیلتر کردن فیلدها از یه چیزی مثله گرید استفاده میکنن.خیلی هم قویه.روی هر فیلدی کاربر بخاد میتونه فیلتر کنه و گزارش یا کوئری بگیره...

ممنون رفيق. ولي فكر كنم اصلا سوال منو نخوندي.
من نميخوام از هيچ كامپوننتي استفاده كنم

rasoolgh
پنج شنبه 24 دی 1388, 10:45 صبح
var
s : string
begin
s:='';
if edit1.text<>'' then
s := 'Field1 like '+Edit1.text;
if edit2.text<>'' then
begin
if s <>'' then
s :=s + ' and ';
s := s+'Field2 like '+Edit2.text;
end;
if edit3.text<>'' then
begin
if s <>'' then
s :=s + ' and ';
s := s+'Field3 like '+Edit3.text;
end;
if s <> '' then
s := ' where '+s;
ADOQuery1.SQL.Add('Select * from Table1 '+s);
ADOQuery1.open;
end;
به هر تعداد فيلد كه بخواهيد فيلتر كنيد مانند field2 و field3 ميتوانيد عمل كنيد

سعید صابری
پنج شنبه 24 دی 1388, 10:48 صبح
باز هم ممنون. ولي اينجوري بدرد من نمي خوره من بايد تعداد خط ها را كاهش بدم اينجوري 2 يا 3 برابر ميشه

rasoolgh
پنج شنبه 24 دی 1388, 15:21 عصر
كدوم خط ها؟
كد؟

سعید صابری
پنج شنبه 24 دی 1388, 15:39 عصر
آره. من بايد از كدي كه در پست اول گذاشتم از اون روش ساده تر بشه و تعداد كد ها كمتر بشه