PDA

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



farzadkamali
دوشنبه 22 دی 1393, 19:14 عصر
با سلام
من با دستور sql خیلی راحت فیلتر زیر رو انجام میدم. minimumstandard و qty دو ستون هستند. من می خوام رکوردهایی رو نمایش بده که minimumstandard>qty باشه. منتها نمی خوام ، یعنی نمی تونم از کوئری استفاده کنم و حتما باید از دستور فیلتر استفاده کنم.


select * from product where minimumstandard>qty


اما با دستور فیلتر نمیشه. چرا؟


module.queryBuyList.Filter:='minimumstandard>qty';
module.queryBuyList.Filtered:=true;

hadisalahi2
دوشنبه 22 دی 1393, 19:47 عصر
پیغام خطا میده یا خروجی نداره؟

farzadkamali
دوشنبه 22 دی 1393, 20:01 عصر
پیغام خطا میده یا خروجی نداره؟

پیغام خطا میده.



---------------------------

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

hadisalahi2
دوشنبه 22 دی 1393, 20:23 عصر
نوع فیلدهایی که توی شرط مقایسه میزاری چیه؟
احتمالا نوع فیلدها به هم نمیخوره

farzadkamali
دوشنبه 22 دی 1393, 20:43 عصر
نوع فیلدهایی که توی شرط مقایسه میزاری چیه؟
احتمالا نوع فیلدها به هم نمیخوره

integer هست

دلفــي
سه شنبه 23 دی 1393, 09:49 صبح
دستور فيلتر به صورت n -> 1 عمل ميكنه ، يعني فيلدي كه انتخاب ميكنيد تك تك ركوردهاش با يك متغير ثابت مقايسه ميشه و در نتيجه ركوردهايي كه شامل شرط فيلتر مي شوند انتخاب مي گردند ، در دستوري كه شما نوشته ايد حالت n - > n وجود داره و عمل فيلتر امكانپذير نيست .

یوسف زالی
سه شنبه 23 دی 1393, 10:07 صبح
در دستوري كه شما نوشته ايد حالت n - > n وجود داره و عمل فيلتر امكانپذير نيست .

:متعجب::متعجب::متعجب:
از کدوم منبع؟؟؟

دلفــي
سه شنبه 23 دی 1393, 13:47 عصر
:متعجب::متعجب::متعجب:
از کدوم منبع؟؟؟

در دستور نوشته شده دو فيلد از يك جدول بايد باهم ركورد به ركورد مقايسه شوند مثلا مقدار فيلد1 در ركورد اول بايد با مقدار فيلد2 در همه ي ركوردهاي موجود در همان فيلد2 مقايسه شود و سپس همين روال براي ركوردهاي بعدي از فيلد1 انجام خواهد شد و بالعكس و اين خارج از بحث فيلترسازيست و دستور نوشته شده هرگز جواب نمي دهد.

یوسف زالی
سه شنبه 23 دی 1393, 14:15 عصر
دستور فيلتر به صورت n -> 1 عمل ميكنه

فیلتر کردن اطلاعات بصورت خطی انجام می شه نه یک به n یا n به n.
در رکوردست خروجی هرچیز داشتید، می تونید روش اعمال نظر و فیلتر انجام بدید. این که بگیم یک به n هست یا نه، در اینجا کاربرد نداره.
در هر سلکتی می تونید هر فیلتری رو روی ردیف های موجود اعمال کنید.
شاید منظور شما این بوده باشه که یکی از فیلد ها حالت تجمیعی داره، در اون مورد هم می شه باز فیلتر رو انجام داد، به شرطی که سلکت اصلاح بشه.
شاید هم منظورتون فیلدی از جدول دیگه باشه، باز با یک join یا subselect می شه به راحتی انجامش داد.
اگر منظور شما چیز دیگه ای هست، بفرمایید.

دلفــي
چهارشنبه 01 بهمن 1393, 08:59 صبح
فیلتر کردن اطلاعات بصورت خطی انجام می شه نه یک به n یا n به n.
در رکوردست خروجی هرچیز داشتید، می تونید روش اعمال نظر و فیلتر انجام بدید. این که بگیم یک به n هست یا نه، در اینجا کاربرد نداره.
در هر سلکتی می تونید هر فیلتری رو روی ردیف های موجود اعمال کنید.
شاید منظور شما این بوده باشه که یکی از فیلد ها حالت تجمیعی داره، در اون مورد هم می شه باز فیلتر رو انجام داد، به شرطی که سلکت اصلاح بشه.
شاید هم منظورتون فیلدی از جدول دیگه باشه، باز با یک join یا subselect می شه به راحتی انجامش داد.
اگر منظور شما چیز دیگه ای هست، بفرمایید.

همان "خطي" كه شما گفتيد يعني 1 به n و منظور من هم اين بود كه كل ركوردهاي موجود در يك فيلد ( كه ميشه همان n ) را مي توان فقط با يك مقدار فيلتر كرد ، درسته كه ميشه براي فيلترينگ از شرطهاي مختلفي استفاده كرد ولي در حالت كلي همه اين شرط ها در نهايت يك شرط كلي به حساب مياد و اين شرط كلي بر روي تك تك ركوردها اعمال ميشه مثلا شرط زير براي فيلتر كردن بازه ي اعداد :


if ((x >= 1) and (x <= 5)) or ((x>=10) and (x<=15)) then
....


در اين دستور درسته كه از دو شرط استفاده شده ولي در كل يك شرط كلي به حساب مياد ولي اين شرط كلي بر روي تك تك ركوردها اعمال شده و در نهايت اعدادي كه مابين 1و5 و نيز 10و15 هستند فيلتر شده و نمايش داده مي شوند .

در دستوري كه دوستمون نوشتن ( minimumstandard > qty ) هر دو طرف شرط يعني ركوردهاي فيلد qty و minimumstandard به صورت مجموعه هستند يعني n در حالي كه يك طرف شرط بايد به صورت ثابت و تك باشد .

دوست خوبم You-See (http://barnamenevis.org/member.php?70247-You-See) اميدوارم منظورمو به درستي رسونده باشم .

یوسف زالی
چهارشنبه 01 بهمن 1393, 09:48 صبح
دوست خوبم You-See (http://barnamenevis.org/member.php?70247-You-See)
اميدوارم منظورمو به درستي رسونده باشم

ممنون که به جای ناراحتی، برخورد حرفه ای می کنید.
دلیل اصلاح کردن جمله شما، نادرست بودن اونچه که هردو می دونیم و باهاش آشنا هستیم، نیست، علتش استفاده و تعاریف دقیق عباراته، ممکنه کسی بعدا ارجاع به این مطالب داشته باشه، و مطلب رو با ارتباط های درون دیتابیسی (Relation) اشتباه بگیره.



در حالي كه يك طرف شرط بايد به صورت ثابت و تك باشد .

البته می دونم که "تک باشد" مفهوم کلی تری داره، مثلا این که فیلد، ثابت، تابع، ساب سلکت و هراونچه که بشه ازش خروجی تک ردیفه و تک فیلده استخراج کرد، می تونه باشه، بعضی از این موارد در فیلتر قابل استفاده نیستند و دلیلش هم اینه که باید در هنگام فیلتر کردن، دیتا موجود باشد و نیازی به بازگشت و گرفتن کوئری مجدد در رکوردست نباشد.

مشکل من بیشتر سر استفاده نادرست، از نظر من، از کلمات "یک به n" بود.

موفق باشید.