PDA

View Full Version : یه دستور Select اما مملو از شرط !



Developer Programmer
شنبه 28 شهریور 1383, 15:36 عصر
دوستان و سروران عزیز!
قرار بود در برنامه دیتابیس قابلیتی بذارم مثل جستجوی سازمان سنجش
اگر کاربر کد رو وارد کرد برنامه به دنبال کد بگردد
اگر کد و نام رو وارد کرد برنامه به دنبال کد و نام بگردد
و الی آخر تا اینجوری جستجو کاملتر بشه
با کمک و راهنمایی دوستان ... رشته ای که برنامه جهت جستجو تولید میکند در زیر آمده اما همیشه جواب تهی را برمیگرداند(!) این یعنی اینکه چیزی یافت نشده!


Select b.*,I.CodeOfItem,I.NameOfItem
From tbl_buys b ,tbl_Items I
Where
(
(B.CodeOfItem LIKE '%4%')
and (I.NameOfItem LIKE '%بو%')
and (B.NameOfPerson Not LIKE '%%')
and (B.DateOfBuy Not LIKE '%%')
and (B.Comment Not LIKE '%%')
)
and (I.CodeOfItem=B.CodeOfItem )

AminSobati
شنبه 28 شهریور 1383, 16:28 عصر
افشین عزیز،
قبل از انجام این Query (که سرشار از AND هستش!) اطمینان حاصل کنین که اقلا یک رکورد با این شرایط وجود داره، و حالا تنها تغییری که در Query لازمه بدین، قبل از کاراکترهای یونیکد، یک N قرار بدین تا اون String به یونیکد Convert بشه:


Select b.*,I.CodeOfItem,I.NameOfItem
From tbl_buys b ,tbl_Items I
Where
(
(B.CodeOfItem LIKE '%4%')
and (I.NameOfItem LIKE N'%بو%')
and (B.NameOfPerson Not LIKE '%%')
and (B.DateOfBuy Not LIKE '%%')
and (B.Comment Not LIKE '%%')
)
and (I.CodeOfItem=B.CodeOfItem

به قسمت I.NameOfItem دقت بفرمایید!
موفق باشین

Developer Programmer
شنبه 28 شهریور 1383, 21:22 عصر
اطمینان حاصل کنین که اقلا یک رکورد با این شرایط وجود داره،
عزیز دلم اون کلمه بو که نوشتم مخفف بوسه اژدها است که در جدول خریدها وجود داره درضمن کدش هم k04 هست که متاسفانه چیزی برگردانده نمیشه!

AminSobati
یک شنبه 29 شهریور 1383, 01:05 صبح
افشین جان دقیقا منظورتون از

Not LIKE '%%'
چیه؟ شاید شما به Dynamic Search نیاز داشته باشید (حدس). ولی اگر پاسخ سوالم رو بفرمایید خیلی بهتر میتونم هدف Query رو متوجه بشم.

Developer Programmer
یک شنبه 29 شهریور 1383, 11:09 صبح
امی جان فدات بشم
اول عرض کنم که اون N که میذارم Error میده!
دوم : از دوستان بخش دلفی که در مورد اون جستجو که در بالا ذکر شد پرسیدم دستوری مثل بالا رو واسه دادن ... هرجا که کاربر مقداری رو واسه جستجو وارد میکنه مینویسیم Like و هرچا که تهی مونده باشه Not Like
البته من دوست داشتم جایی رو که کاربر وارد نکرده اصلا در جستجو شرکت ندم ولی در میان انواع if و and وor گم میشم!

JavanSoft
یک شنبه 29 شهریور 1383, 13:55 عصر
همانگونه که دوستمان گفتند مشکل از عدم کنترال AND است

AminSobati
یک شنبه 29 شهریور 1383, 14:39 عصر
جالبه! افشین جان، این N رو آزمایش کن (Copy - Paste کن)، خودم تست کردم، Syntax این درسته با اینکه ظاهرا فرقی ندارن!

Select b.*,I.CodeOfItem,I.NameOfItem
From tbl_buys b ,tbl_Items I
Where
(
(B.CodeOfItem LIKE '%4%')
and (I.NameOfItem LIKE N'%بو%')
and (B.NameOfPerson Not LIKE '%%')
and (B.DateOfBuy Not LIKE '%%')
and (B.Comment Not LIKE '%%')
)
and (I.CodeOfItem=B.CodeOfItem )
اما من پیشنهادم اینه که شما Dynamic Query ایجاد کنین. مثلا روی کلاینت چک کنین که اگر فلان Textbox خالی نبود، یک قسمت به Query اضافه بشه و همین کار رو برای Textboxهای دیگه تکرار کنین و این Query رو تکه تکه بسازین و در نهایت یکباره به SQL Server ارسال کنین (تا به قول فرمایش خودتون جایی رو که کاربر خالی گذاشته، در جستجو شرکت ندین):


Dim QueryString As String

QueryString = "SELECT * FROM MyTable WHERE "

If txtFirstName <> "" Then
QueryString = QueryString + "FirstName='" + txtFirstName + "' AND "
End If

If txtLastName <> "" Then
QueryString = QueryString + "LastName='" + txtLastName + "' AND "
End If

If txtAge <> "" Then
QueryString = QueryString + "Age='" + txtAge + "'"
End If

حالا QueryString رو ارسال میکنیم برای یک Stored Procedure تا اون رو اجرا کنه:


CREATE PROC MyDynamicQuery
@QueryString NVARCHAR(1000)
AS
EXEC (@QueryString)

GO

البته موقع ساختن QueryString باز هم N باید قبل از Stringهای یونیکد قرار بگیره.
امیدوارم این کمکتون کرده باشه.
موفق باشید

Developer Programmer
یک شنبه 29 شهریور 1383, 19:17 عصر
برای یک Stored Procedure تا اون رو اجرا کنه
امین جان روم سیاه عین ذغال :oops: من تا حالا با Stored Procedure کار نکردم :!: برنامه رو هم تو Delphi7 مینویسم یوقت با کدی که دادی تفاوت نکنه عزیزم؟

راستی یه مقاله در مورد مهمهای SQL-Server بنویس ! :wink:

AminSobati
یک شنبه 29 شهریور 1383, 22:26 عصر
دور از جون این چه حرفیه! هر سوالی داری بپرس...
ضمنا کد Stored Procedure رو با TSQL نوشتم و اصلا با دلفی کاری نداره. در Query Analyzer اجراش کن. ولی نحوه Call کردن Stored Procedure در دلفی رو در بخش مربوط به دلفی بهتره مطرح کنی (حتما هست)
کد نحوه ساختن QueryString رو با VB نوشتم ولی ساده هستش و میتونی به دلفی تبدیلش کنی

موفق باشی :)