ورود

View Full Version : Filter بهتره یا Where



bmanfy
شنبه 16 آذر 1387, 09:59 صبح
سلام دوستان :
من یه بانک Sql رو به یه AdoQuery وصل کردم . حالا برای جستجو و محدود کردن جدولش میخوام بدنم از فیلتر مربوت به خود AdoQuery استفاده کنم بهتره یا در Sql مربوط به AdoQuery از دستور Where استفاده کنم ؟
یا شاید این دوتا با هم هیچ فرقی ندارن ؟

amin_alexi
شنبه 16 آذر 1387, 10:28 صبح
فکر کنم Where بهتره !؟
اگه فیلتر استفاده کنی خود Delphi هم باید یه چیزی معادل Where تولید کنه !!
اگه Where استفاده کنی دستت بیشتر بازه چون Filter یک سرس محدودیت داره ...

net_ved
شنبه 16 آذر 1387, 11:23 صبح
تا جایی که من میدونم دلفی معادل تولید نمی کنه .. select یا همون where که شما می گین باعث می شه اطلاعات از سرور دوباره سازی بشه ولی filter با همون اطلاعات توی حافظه کار میکنه پس سریع تره ولی بسته به کاری که انجام میدی از هردو باید به جاش استفاده بشه .

vcldeveloper
شنبه 16 آذر 1387, 21:18 عصر
قبلا درباره اش بحث کردیم...
هیچکدوم از اون یکی بهتر نیستند، بلکه هر کدوم کاربرد خودشان را دارند. فیلتر روی دیتاستی اعمال میشه که در حافظه وجود داره، پس خیلی سریعتر از Where هست، و نیازی هم به برقراری ارتباط مجددا با سرور نداره. اما فقط روی همون داده های موجود در حافظه اعمال میشه.
WHERE در کوئری روی کل نتایج یک کوئری، و در سمت سرور اعمال میشه، خوبیش اینه که محدود به تعداد خاصی از داده که فعلا در حافظه وجود دارند، نیست. از طرفی برای استفاده ازش باید با سرور ارتباط برقرار بشه، و داده جدید از سرور درخواست بشه.
WHERE موقعی استفاده داره که حجم داده در سرور زیاد باشه، و نباید کل اطلاعات را یک جا در حافظه کلاینت لود کرد. Filter زمانی کاربرد داره که یا کل داده در حافظه بارگزاری شده، یا باید فقط روی همین بخش از داده که در حافظه هست جستجو کرد، و نیازی به جستجوی روی سایر داده ها نیست.

SYNDROME
یک شنبه 17 آذر 1387, 08:07 صبح
خیلی از دستورات را شما در Where می توانید بنویسید که در Filter جواب نمی دهد و Error بر می گرداند.
اگر شما ترکیبی از And و OR را در filter بنویسید Bug می دهد در صورتی که در Where چنین مشکلی پیش نمی آید.
موفق باشید

net_ved
یک شنبه 17 آذر 1387, 09:12 صبح
فکر نکنم BUG بده ... And و Or رو ترکیب کردم .. چیزی نیافتم

bmanfy
دوشنبه 25 آذر 1387, 10:36 صبح
سلام دوستان ممنون از پاسخ هاتو ن :
اما نکته ای که هست تمام چیزهای که تو ی Where میشه نوشت رو هم تو filter میشه نوشت . یعنی اینو مطمئن هستم و خودم هم اتحان کردم . ستورات Sql رو کاملا میشه نوشت .

مرد مباح
دوشنبه 25 آذر 1387, 12:37 عصر
Filter توي خيلي مسائل ساده بهتر از Where هست چون هم كد نويسي كمتري ميخواد و هم يك تبديل ساده براي خود دلفيه. مشكلشم اينجاس كه نسبت به كارايي كه Where ميكنه خيلي ضعيفه.
بايد كارتو ببيني و خودت تصميم بگيري.

براي مثال من وقتي قراره كه توي يك Edit مقداري كه نوشته ميشه رو توي يك DBGrid نشون بدم و فيلتر كنم از Filter استفاده ميكنم و اين قضيه پرشي كه با Where كار كني رو توي DBGrid نشون ميده نداره.

SYNDROME
دوشنبه 25 آذر 1387, 16:50 عصر
سلام دوستان ممنون از پاسخ هاتو ن :
اما نکته ای که هست تمام چیزهای که تو ی Where میشه نوشت رو هم تو filter میشه نوشت . یعنی اینو مطمئن هستم و خودم هم اتحان کردم . ستورات Sql رو کاملا میشه نوشت .
میشه بگید کدام دستورات را چک کرده اید؟
مثلا Cast را چک کرده اید.
دستوراتی در SQL هستند که در Filter معرفی نشده اند.
اگر شما در SQL یک فیلد عددی داشته باشید و بخواهید آن را با دستور Like به همراه % استفاده کنید:


ID Like '%1%'

دستور فوق در SQL کار می کند ولی همین دستور در Filter اشکال می گیرد.
موفق باشید

net_ved
سه شنبه 26 آذر 1387, 10:29 صبح
اگر شما در SQL یک فیلد عددی داشته باشید و بخواهید آن را با دستور Like به همراه % استفاده کنید:
کد:
ID Like '%1%'
دستور فوق در SQL کار می کند ولی همین دستور در Filter اشکال می گیرد.
موفق باشید
کار می کنه .. واسه ADO چک کردم

FieldName Like '+''''+'%'+Trim(Edit1.Text)+'%'+''''

مرد مباح
سه شنبه 26 آذر 1387, 13:13 عصر
سيندورم جان.
منم فكر كنم كار ميكنه.
درباره فيلد از جنسهاي String كه مطمئنم جواب ميده ولي روي Number ها امتحال نكردم.
فرم راحتتر از بالاش هم به صورت زير هست :


filter := 'Fieldname like ''%param%''';
ويا
filter := Fieldname like '+QuotedStr('%Param%);

bmanfy
یک شنبه 01 دی 1387, 17:33 عصر
میشه بگید کدام دستورات را چک کرده اید؟
مثلا Cast را چک کرده اید.
دستوراتی در SQL هستند که در Filter معرفی نشده اند.
اگر شما در SQL یک فیلد عددی داشته باشید و بخواهید آن را با دستور Like به همراه % استفاده کنید:


ID Like '%1%'

دستور فوق در SQL کار می کند ولی همین دستور در Filter اشکال می گیرد.
موفق باشید


اره من هنوز رو حرفم هم هستم که میگم برای تمام دستورات Where کار میکنه . مگر برای عده ی معدودی . که البته روی سخن من به دستورات پر کاربرد Where بود .
و میبینید که دوستان دیگه هم در این باره تست کردن .