PDA

View Full Version : سوال: عدم اجرای دستور SQL در Filter مربوط به ADO



SYNDROME
پنج شنبه 20 تیر 1387, 07:04 صبح
با سلام
من می خواهم مخالف دستور Like را اجرا کنم
دستور زیر را در SQL می نویسم و جواب می دهد.


select *
From Tbl_Test
Where Code Not Like '%1%'

فیلد Code از نوع Nvarchar است.
ولی وقتی قسمت شرط را می خواهم در Filter مربوط به ADO بنویسم :
این دستور


ADOQuery1.Filter := ' CodeGroup Not Like ''%1%''';
ADOQuery1.Filtered := True;

پیغام خطای زیر نمایش داده می شود


Arguments Are Of the Wrong Type, Are Out of Acceptable Range, or Are in Conflict with one another

ممنون می شوم بنده را راهنمایی کنید
موفق باشید

hedi
پنج شنبه 20 تیر 1387, 20:56 عصر
دوست عزیز اول بهت بگم اگه می خواهی نوشته ای را داخل کاما بگذاری احتیاج به این نداری که حتما از علامت آن استفاده کنی می تونی از تابع QutedStr استفاده کنی بعد هم به نظر من این دستور در دلفی مثل این که با آرگومان ورودی شما از نظر نوع یا خارج از Rang کاری خود کار نمی کند بهتر از Help دلفی بهره بگیری در غیر این صورت هم بهت پیشنهاد می کنم که از همان دستورات SQL استفاده کنی موفق باشی

SYNDROME
پنج شنبه 20 تیر 1387, 21:02 عصر
دوست عزیز اول بهت بگم اگه می خواهی نوشته ای را داخل کاما بگذاری احتیاج به این نداری که حتما از علامت آن استفاده کنی می تونی از تابع QutedStr استفاده کنی بعد هم به نظر من این دستور در دلفی مثل این که با آرگومان ورودی شما از نظر نوع یا خارج از Rang کاری خود کار نمی کند بهتر از Help دلفی بهره بگیری در غیر این صورت هم بهت پیشنهاد می کنم که از همان دستورات SQL استفاده کنی موفق باشی
دوست عزیز من می خواهم از عمل فیلتر استفاده و به دلیل مشکلاتی که وجود دارد نمی توانم از Text مربوط به ADO استفاده کنم.
می خواهم دلیل این اشکال را بدانم.
با تشکر از دوستان

vcldeveloper
شنبه 22 تیر 1387, 01:46 صبح
ظاهرا امکان ترکیب این دو عملگر با هم وجود نداره، من حالت های زیر را تست کردم:


NOT Field LIKE 'Phrase'
NOT (Field LIKE 'Phrase')
Field NOT LIKE 'Phrase'
Field NOT (LIKE 'Phrase')

SYNDROME
شنبه 22 تیر 1387, 08:19 صبح
ظاهرا امکان ترکیب این دو عملگر با هم وجود نداره، من حالت های زیر را تست کردم:


NOT Field LIKE 'Phrase'
NOT (Field LIKE 'Phrase')
Field NOT LIKE 'Phrase'
Field NOT (LIKE 'Phrase')
با تشکر از شما
با توجه به این نکته ، برای اینکه من عمل فوق را انجام دم باید از چه روشی استفاده کنم؟
البته به این نکته توجه کنید که نمی توانم Text مربوط به ADO را عوض کنم.
خودم به این نتیجه رسیدم که می توانم از OnFilterRecord و استفاده از Pos و . . . چنین عملی را انجام دهم.
نظر شما چیست؟
موفق باشید

A.Farzin
پنج شنبه 03 مرداد 1387, 21:49 عصر
' CodeGroup Not Like ''%1%''' مربوط به زماني است كه عمل پردازش دستور را بخواهد Query Analyser برنامه SQL Server انجام دهد. زماني كه شما از Filter استفاده مي‌كنيد در واقع پردازش دستور توسط ADO صورت مي‌گيرد نه توسط موتور SQL Server.
اگر دستورتان را به شكل زير بدهيد، به نظر من اجرا خواهد شد:

.Fiter = "Not CodeGroup Like '*1*'"
اين را هم ببينيد:
http://barnamenevis.org/forum/%D9%85%D8%A8%D8%A7%D8%AD%D8%AB-%D9%85%D8%B1%D8%A8%D9%88%D8%B7-%D8%A8%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%AF%D8%B1-vb/112611-%D8%AE%D8%B7%D8%A7-%D8%AF%D8%B1-adodb-recordset-filter.html#post559484

SYNDROME
جمعه 04 مرداد 1387, 07:55 صبح
' CodeGroup Not Like ''%1%''' مربوط به زماني است كه عمل پردازش دستور را بخواهد Query Analyser برنامه SQL Server انجام دهد. زماني كه شما از Filter استفاده مي‌كنيد در واقع پردازش دستور توسط ADO صورت مي‌گيرد نه توسط موتور SQL Server.
اگر دستورتان را به شكل زير بدهيد، به نظر من اجرا خواهد شد:

.Fiter = "Not CodeGroup Like '*1*'"
اين را هم ببينيد:

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

A.Farzin
دوشنبه 07 مرداد 1387, 19:02 عصر
من دستور شما را هم تست کردم ولی به این نکته دقت کنید اینجا تالار دلفی است.
چشم! ولي نگفتيد كه جواب داد يا نــــــــــــــــــــه؟

اصغر (پآچ)
دوشنبه 07 مرداد 1387, 19:59 عصر
سلام دوست من

ببین این روشی که می گم مطمئن نیستم جواب بده فقط یه پیشنهاده بهم بگو که جواب گرفتی یا نه


SELECT * FROm tbl_Test WHERE NOT IN(
select*
From Tbl_Test
Where Code Like'%1%')


موفق و موید باشی

SYNDROME
دوشنبه 07 مرداد 1387, 21:30 عصر
چشم! ولي نگفتيد كه جواب داد يا نــــــــــــــــــــه؟
نه دوست عزیز کار نکرد.

سلام دوست من
ببین این روشی که می گم مطمئن نیستم جواب بده فقط یه پیشنهاده بهم بگو که جواب گرفتی یا نه


SELECT * FROm tbl_Test WHERE NOT IN(
select*
From Tbl_Test
Where Code Like'%1%')

موفق و موید باشی
دوست عزیز اگر بخواهیم دستورات SQL را بنویسیم جواب می دهد و هیچ مشکلی ندارد.
ولی به این نکته دقت کنید که اگر این اتفاق بیفتد با زدن هر کلید یک Request به SQL می رود و این در برنامه شبکه کار چندان درستی نیست.
موفق باشید

اصغر (پآچ)
دوشنبه 07 مرداد 1387, 21:37 عصر
سلام دوست من

پس چه کار باید کرد؟ من خودم با همین روش تو شبکه کار می کنم چطور باید استفاده کنم!

موفق و موید باشی

SYNDROME
چهارشنبه 09 مرداد 1387, 23:03 عصر
سلام دوست من
پس چه کار باید کرد؟ من خودم با همین روش تو شبکه کار می کنم چطور باید استفاده کنم!
موفق و موید باشی
بهتر است از Filter استفاده کنید.
موفق باشید