PDA

View Full Version : یه مشکل در جستجوی پیشرفته



elham366
پنج شنبه 15 مرداد 1388, 11:08 صبح
سلام
من توی جستجوی پیشرفته مشکل دارم،میشه کمک کنید؟!
این فرم یه چیزی مثل جستجوی پیشرفته گوگله، من یکی از query هام که کار نمیکنه رو اینجا گذاشتم،این کوئری توی خود اکسس کار میکنه ولی اشتباه!


SELECT Titles.BookName, Titles.Author, Categories.CategoryName, Titles.UnitPrice, Titles.Publisher, Titles.DateTime
FROM Titles INNER JOIN Categories ON Titles.Category = Categories.CategoryID
WHERE (((Titles.BookName) Like '*a*' And (Titles.BookName)<>'*b*') AND ((Titles.Author)<>'*b*') AND ((Categories.CategoryName)<>'*b*') AND ((Titles.Publisher)<>'*b*') AND ((Titles.DateTime)=#8/4/2009#)) OR (((Titles.BookName)<>'*b*') AND ((Titles.Author) Like '*a*' And (Titles.Author)<>'*b*') AND ((Categories.CategoryName)<>'*b*') AND ((Titles.Publisher)<>'*b*') AND ((Titles.DateTime)=#8/4/2009#)) OR (((Titles.BookName)<>'*b*') AND ((Titles.Author)<>'*b*') AND ((Categories.CategoryName) Like '*a*' And (Categories.CategoryName)<>'*b*') AND ((Titles.Publisher)<>'*b*') AND ((Titles.DateTime)=#8/4/2009#)) OR (((Titles.BookName)<>'*b*') AND ((Titles.Author)<>'*b*') AND ((Categories.CategoryName)<>'*b*') AND ((Titles.Publisher) Like '*a*' And (Titles.Publisher)<>'*b*') AND ((Titles.DateTime)=#8/4/2009#));


من اینجوری فکر میکنم که طبق این چیزی که من نوشتم باید رکوردهایی انتخاب بشن که به هیچ عنوان فیلدی که دارای حرف b باشد رو نداشته باشه، تاریخشون حتماً 2009/4/8 باشه و
حداقل یه فیلدی داشته باشند که حرف a رو داشته باشه، ولی درست کار نمیکنه! همه فیلدهایی که تاریخشون 2009/4/8 و شامل حرف a هستند رو میاره! اصلاً به قسمت مخالف b بودنش توجه نمیکنه!!! میشه بهم بگید که توی کجای این شرط ها اشتباه نوشتم؟
با تشکر

Reza_Yarahmadi
پنج شنبه 15 مرداد 1388, 16:33 عصر
شرطت رو چک نکردم ببینم چطوره (خیلی طولانیه! :چشمک:)
ولی فکر کنم اگه به جای شرط

(Titles.BookName) Like '*a*'از دستور

(Titles.BookName) Like '%a%' و به جای دستور

(Titles.BookName)<>'*b*'از دستور

(not(Titles.BookName) like '%b%')استفاده کنی مشکلت تا حدودی برطرف بشه.

mn_zandy63
پنج شنبه 15 مرداد 1388, 21:10 عصر
همونطور که دوستمون گفتند٬ مشکل شما در اینه که عملگر های SQL و ACCESS با هم متفاوتند.
به جای * باید از % استفاده کنید
و در دستوراتی که برای مخالف بودن از <> استفاده کرده اید (به علت وجود % در رشته) باید از NOT LIKE استفاده کنید.
و تاریخ نیز‍ به این شکل فکر نمیکنم جواب بده.
Query تون رو به این شکل بنویسید:



WHERE (Titles.BookName NOT LIKE '%b%') AND (Titles.Author NOT LIKE '%b%') AND (Categories.CategoryName NOT LIKE '%b%') AND (Titles.Publisher NOT LIKE '%b%')
AND (Titles.DateTime = CONVERT(DATETIME, '2009-04-08 00:00:00', 102)
AND ((Titles.BookName LIKE '%a%') OR (Titles.Author LIKE '%a%') OR (Categories.CategoryName LIKE '%a%') OR (Titles.Publisher LIKE '%a%'))


البته برای چک تاریخ میتوانید به صورت رشته هم بنویسید :


(Titles.DateTime = '2009/4/8')

elham366
جمعه 16 مرداد 1388, 12:45 عصر
همونطور که دوستمون گفتند٬ مشکل شما در اینه که عملگر های SQL و ACCESS با هم متفاوتند.
به جای * باید از % استفاده کنید
و در دستوراتی که برای مخالف بودن از <> استفاده کرده اید (به علت وجود % در رشته) باید از NOT LIKE استفاده کنید.
و تاریخ نیز‍ به این شکل فکر نمیکنم جواب بده.
Query تون رو به این شکل بنویسید:



WHERE (Titles.BookName NOT LIKE '%b%') AND (Titles.Author NOT LIKE '%b%') AND (Categories.CategoryName NOT LIKE '%b%') AND (Titles.Publisher NOT LIKE '%b%')




AND (Titles.DateTime = CONVERT(DATETIME, '2009-04-08 00:00:00', 102)

AND ((Titles.BookName LIKE '%a%') OR (Titles.Author LIKE '%a%') OR (Categories.CategoryName LIKE '%a%') OR (Titles.Publisher LIKE '%a%'))


البته برای چک تاریخ میتوانید به صورت رشته هم بنویسید :


(Titles.DateTime = '2009/4/8')




اِ اِ اِ... اینجوری دیگه اصلاً کار نمیکنه!!! تا اونجایی که من میدونم این سینتکسی که من باهاش نوشتم ماله اکسسه،منم دارم با اکسس کار میکنم دیگه!!!
ولی فکر میکنم یه جایی توی منطق شرط هام مشکل دارم، تاریخش هم درست کار میکنه چون اون طرف توی سی شارپ که کد نوشتم رشته در نظر گرفتمش... کلاً همه چیز تا قبل از اینکه قسمت مخالف یه چیزی بودن رو بهش اضافه کنم درست کار میکرد...

mn_zandy63
جمعه 16 مرداد 1388, 13:18 عصر
[/LEFT]

اِ اِ اِ... اینجوری دیگه اصلاً کار نمیکنه!!! تا اونجایی که من میدونم این سینتکسی که من باهاش نوشتم ماله اکسسه،منم دارم با اکسس کار میکنم دیگه!!!
ولی فکر میکنم یه جایی توی منطق شرط هام مشکل دارم، تاریخش هم درست کار میکنه چون اون طرف توی سی شارپ که کد نوشتم رشته در نظر گرفتمش... کلاً همه چیز تا قبل از اینکه قسمت مخالف یه چیزی بودن رو بهش اضافه کنم درست کار میکرد...

آآه٬ من عذر میخوام٬ فکر کردم قبلا با Access نوشتی حالا میخوای توی SQL اجراش کنی :چشمک:

mn_zandy63
جمعه 16 مرداد 1388, 13:28 عصر
http://office.microsoft.com/en-us/access/HA100666111033.aspx#2

همونطور که اینجا نوشته یک نکته مشخصه٬ اونم اینکه٬ به جای:


<>'*b*'
باید بنویسی:


NOT LIKE '*b*'

elham366
شنبه 17 مرداد 1388, 10:37 صبح
نع،بازم جواب نداد! یعنی یکی از این اساتید محترم که در اینجا حضور دارند و تا به حال بیش از پنجاه بار از جستجوی پیشرفته در برنامه هایشان استفاده کرده اند نمی تونه به من بگه این شرط هارو چه جوری بنویسم؟ فکر کنم براتون خیلی ساده باشه ها!:لبخند:

mn_zandy63
یک شنبه 18 مرداد 1388, 01:42 صبح
نع،بازم جواب نداد! یعنی یکی از این اساتید محترم که در اینجا حضور دارند و تا به حال بیش از پنجاه بار از جستجوی پیشرفته در برنامه هایشان استفاده کرده اند نمی تونه به من بگه این شرط هارو چه جوری بنویسم؟ فکر کنم براتون خیلی ساده باشه ها!:لبخند:

خیلی select ت به هم ریختست٬ شاید یکی از این پرانتزات اینور اونور شده. این رو access خودش برات اینکارش کرده احتمالا.
از اول دستی بنویسش ببین درست نمیشه.

elham366
یک شنبه 18 مرداد 1388, 15:57 عصر
خیلی select ت به هم ریختست٬ شاید یکی از این پرانتزات اینور اونور شده. این رو access خودش برات اینکارش کرده احتمالا.
از اول دستی بنویسش ببین درست نمیشه.
آخیش ... بالاخره درست شد...مرسی:قلب:

fafa_2000
پنج شنبه 21 آبان 1388, 11:58 صبح
میشه کد کاملش را بفرستی؟