PDA

View Full Version : فیلتر یک فیلد عددی جدول



farzadkamali
یک شنبه 12 مرداد 1393, 13:58 عصر
سلام من از دستور زیر برای فیلتر استفاده می کنم.


adotable1.filter:="'name like ''%' + Trim(Edit1.Text) + '%''';"
adotable1.filtered:=true


اما اگر فیلد جدول از نوع عددی int باشه. جواب نمیده و ارور میده.
می خوام دستور فیلتر روی فیلد عددی مثل کد زیر روی انجام بده (البته کارم با کد زیر راه میوفته. اما می خوام معادل دستور فیلترش رو بدونم)


ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from members where unitnum like'''+Edit1.Text+'%''');
ADOQuery1.Open;


با وارد کردن یک عدد در textbox ، رکوردهایی که اولشون با اون عدد شروع میشه فیلتر میشن.

ممنون می شم راهنمایی کنین.

یوسف زالی
یک شنبه 12 مرداد 1393, 15:36 عصر
سلام.
به % ها توجه کنید متوجه می شید.
ضمنا علائم " (دابل کوت) در دلفی توجیه نداره.

farzadkamali
یک شنبه 12 مرداد 1393, 16:44 عصر
سلام.
به % ها توجه کنید متوجه می شید.
.
متوجه نمیشم. میتونید یه مثال بزنید


ضمنا علائم " (دابل کوت) در دلفی توجیه نداره.
آره. یه اشتاه تایپی بود

یوسف زالی
یک شنبه 12 مرداد 1393, 21:26 عصر
متن ارور رو بگذارید.
در بالا از یک عدد % باید استفاده بشه مثل پایین.

farzadkamali
یک شنبه 12 مرداد 1393, 22:32 عصر
متن ارور رو بگذارید.

filter cant be opened



در بالا از یک عدد % باید استفاده بشه مثل پایین.
جفت حالت جواب میده فرق نداره. اما باید نوع فیلد رشته باشه و اگه int باشه جواب نمیده.

یوسف زالی
دوشنبه 13 مرداد 1393, 00:01 صبح
اوه حالا گرفتم، نوع فیلد اصلا رشته نیست.
باید از cast استفاده کنید.
cast(field as varchar(20)) like..

farzadkamali
دوشنبه 13 مرداد 1393, 10:01 صبح
بازم ارور میده.

Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.


دستور درسته؟
module.adotable1.Filter:='cast(id as nvarchar(20)) ''' + Trim(Edit1.Text) + '%''';

یوسف زالی
دوشنبه 13 مرداد 1393, 10:04 صبح
پس لایکش کو؟

farzadkamali
دوشنبه 13 مرداد 1393, 10:07 صبح
پس لایکش کو؟

اینم از لایکش. من معمولاً آخر همه لایک ها رو میزنم (بابت هر پست یه لایک ).

اما بازم ارور میده.

Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.


این دستور درسته؟
module.adotable1.Filter:='cast(id as nvarchar(20)) ''' + Trim(Edit1.Text) + '%''';

یوسف زالی
دوشنبه 13 مرداد 1393, 10:09 صبح
قربونت برم منظورم دستور لایکه!
:قهقهه:

در رشته شما like استفاده نشده

farzadkamali
دوشنبه 13 مرداد 1393, 10:15 صبح
فدای شما
اینم لایکش.
module.adotable1.Filter:='cast(id as nvarchar(20)) like ''' + Trim(Edit1.Text) + '%''';

اما بازم همون ارور رو میده

یوسف زالی
دوشنبه 13 مرداد 1393, 10:18 صبح
خب، نتایج:

شی رکوردست مربوط به ADO اجازه typecast نمی ده، بنابراین چند تا راه دارید:

1- استفاده از cast در کوئری خود، و نه در فیلتر، بعد فیلد cast شده رو می تونید در فیلتر استفاده کنید
2- استفاده از <= و => به جای like در فیلد های عددی (or between)
3- استفاده از رویداد onfilterrecord برای فیلتر کردن تمام فیلد ها

farzadkamali
دوشنبه 13 مرداد 1393, 11:16 صبح
از روش دوم چگونه استفاده میشه؟

یوسف زالی
دوشنبه 13 مرداد 1393, 11:18 صبح
filter := '(field >= ' + DnLimit + ') or (field <= ' + UpLimit + ')'