View Full Version : سوال: IIF در Query
Rasool-GH
چهارشنبه 07 دی 1390, 14:58 عصر
سلام دوستان
من داخل کوئری برای گرفتن گزارش از شرط زیر استفاده کردم که در صورت انتخاب یک مقدار در کمبوباکس همون رو فیلتر کنه و در صورت انتخاب نشدن همه موارد موجود در جدول رو نمایش بده
like "*" & [combo addres] & "*"
کد بالا به خوبی کار میکنه به جز در مواردی که داخل فیلد مقدار Null یا "" ذخیره شده باشه . یعنی مقادیر خالی رو لیست نمیکنه . حالا من کد رو به شکل زیر تغییر دادم ولی ایراد گرفت . اگه کسی میتونه کمک کنه
iif([combo addres] Is Null;like "*" Or Is Null; [combo addres])
pmoshir
چهارشنبه 07 دی 1390, 15:28 عصر
فكر كنم اگر نمونه كارتون رو بزاريد پاسخگويي راحت تر باشه!!
aromega65
چهارشنبه 07 دی 1390, 22:56 عصر
به این صورت امتحان کنی درست میشه
IIf(IsNull([Forms]![Form1]![[combo addres]);[نام فیلد جدول];[Forms]![Form1]![[combo addres])
اگه خواستی شامل همه بشه بصورت زیر
like "*" & (IIf(IsNull([Forms]![Form1]![[combo addres]);[نام فیلد جدول];[Forms]![Form1]![[combo addres])) & "*"
Rasool-GH
شنبه 10 دی 1390, 11:08 صبح
ممنون كه راهنمايي كردين
در هر دو كد بالا مقصود براورده نميشه
من نياز دارم كه در حالتي كه در داخل كمبو چيزي انتخاب نشده همه موارد كه شامل مقادير Null و "" ميشه رو ليست كنه ولي اگر در كمبو مقداري انتخاب شد فقط همون عبارت رو ليست كنه
Like "*" & [combo addres] & "*" Or Is Null
اين هم جواب نداد
Like "*" & Nz([combo addres];"*") & "*" Or Is Null
در اين كد تمام موارد در حالتي كه چيزي انتخاب نشده ليست ميكنه ولي مشكل اينجاست كه در حالي كه ايتمي انتخاب ميشه مقادير خالي هم ليست ميشه كه من نميخوام اين حالت باشه و در حالت انتخاب يك ايتم فقط همون ايتم فيلتر بشه
aromega65
یک شنبه 11 دی 1390, 22:00 عصر
سلام
تو برنامه من درست کار میکنه ،دقیقا همون جوری که منظور شماست
اگه خواستید نمونه بزارید تا درستش کنم
Rasool-GH
دوشنبه 12 دی 1390, 07:48 صبح
ممنون ميشم اگه يه نگاهي بندازين
خيلي درگيرم كرده . داره ميره روي اعصاب
aromega65
دوشنبه 12 دی 1390, 22:29 عصر
ممنون كه راهنمايي كردين
در اين كد تمام موارد در حالتي كه چيزي انتخاب نشده ليست ميكنه ولي مشكل اينجاست كه در حالي كه ايتمي انتخاب ميشه مقادير خالي هم ليست ميشه كه من نميخوام اين حالت باشه و در حالت انتخاب يك ايتم فقط همون ايتم فيلتر بشه
تو نمونه ای که فرستادین دقیقا همین جوری عمل میکنه پس مشکل شما کجاست؟:متفکر:
Rasool-GH
سه شنبه 13 دی 1390, 12:39 عصر
داداش گلم توجه كنيد كه من ميخوام اگه داخل باكس نوشتم 1 فقط همون ركوردي كه فيلد 4 اون 1 هست بياد واي اگه باكس خالي بود همه ركوردها بياد (در اين نمونه فقط ركوردهايي مياد كه فيلد 4 اونها پر باشه . )
توجه كنيد كه در جدول 6 ركورد وجود داره و در حالتي كه باكس خاليه بايد 6 ركورد ليست بشه
Rasool-GH
سه شنبه 13 دی 1390, 21:03 عصر
اقای امیری شما چیزی به نظرتون نمیرسه که منو از این درد سر نجات بده . در حد سر نخ هم باشه خوبه ها
Abbas Amiri
سه شنبه 13 دی 1390, 21:15 عصر
از این کوئری چه استفاده ای می خواهید بکنید؟
mj_bayati
سه شنبه 13 دی 1390, 21:43 عصر
سلام
برات درستش کردم :لبخند:
فقط اینو بدون که همین سؤال نزدیک یک سال ذهن منو به خودش مشغول کرده بود :چشمک:
80133
Rasool-GH
سه شنبه 13 دی 1390, 23:09 عصر
اقا ممنون
این خیلی جالب بود . حوصله داری یه توضیح در مورد عملکرد False <> بدی
mj_bayati
چهارشنبه 14 دی 1390, 14:22 عصر
سلام
این عملگر در واقع کار خاصی انجام نمیده. ولی چاره ای جز بودنش نیست !! :متفکر:
در حقیقت SQL این رو میخواد که شرطش معنی پیدا کنه...
بذار تاریخچه اش رو بگم...
:قهقهه:
من یک سال این مسأله رو مخم راه میرفت :عصبانی: و آخرش (دقیقاً روز عیدغدیر امسال) بود که یهویی به ذهنم زد یه بار دقیق شرط رو بخونم...
:متفکر:
اونوقت متوجه شدم که ما این شرط رو به زبون خودمون مینویسیم ولی SQL چیز دیگه ای برداشت میکنه!!!
:گیج:
بعد مجبور شدم این شرط رو تو فضای SQL طراحی کنم، چون با زبان خود اکسس (Expression Builder) امکان نوشتن این شرط نیست. :شیطان:
زمانیکه SQL میخواد شرط رو به زبان اکسس تبدیل کنه، مجبور میشی اون عملگر رو آخرش اضافه کنی.
:تشویق:
حالا واضح شد؟
شاید حالا که حل شده ساده باشه، اما معما چو حل گشت آسان شود :چشمک:
موفق باشید
Rasool-GH
چهارشنبه 14 دی 1390, 16:31 عصر
نه قربان اصلا هم ساده نیست . اصل اینه که بتونی از دانسته ها استفاده کنی
من خیلی درگیر این موضوع بودم . خیلی ممنون
Rasool-GH
شنبه 17 دی 1390, 12:38 عصر
سلام داداش
اگه ميشه لطف كن و براي اين مشكل هم راه حل بده
در حالتي كه از جداول با ريليشن داخل كوئري استفاده ميشه چطور ميشه همه ركوردها رو ليست كرد
mj_bayati
شنبه 17 دی 1390, 13:02 عصر
علیک سلام
اگه منظورتون رو درست فهمیده باشم درست شد :تشویق:
راهش اینه که روی ارتباط دوبار کلیک کنی و یکی از سه گزینه مورد نظر رو انتخاب کنی:
گزینه اول: برا اینه که آن فیلدهایی برگرده که در هر دو جدول وجود دارد
گزینه دو و سه: برا اینکه یکی از جدولها رو اصل قرار بده و تمام رکوردهای اون رو بیاره و بعد اون فیلد از رکوردهایی که در جدول مشابه وجود دارند رو هم بیاره
80333
به نمونه تکمیل شده نگاه کن میفهمی چی شد :متفکر:
اگه چیز دیگه ای منظورتون بوده بفرمایین :چشمک:
Rasool-GH
یک شنبه 18 دی 1390, 11:30 صبح
كاملا درسته و منظور من براورده شد . يه سوال كوچيك دارم . در صورتي كه اين جداول ريليشنهاي ديگه اي هم با هم داشته باشن و در داخل كوئري اونها رو حذف كنيم در عملكرد برنامه مشكلي پيش مياد ؟؟؟
به نمونه توجه كنيد . براي اجرا شدن كوئري حتما بايد ارتباط بين دو جدول شناسنامه و بخش داخل كوئري حذف بشه
mj_bayati
یک شنبه 18 دی 1390, 13:37 عصر
نه مشکلی پیش نمیاد
یعنی این ریلیشن هایی که شما در کوئری ایجاد یا حذف میکنید فقط مربوط به کوئری شماست و جای دیگه ای اعمال نمیشه
خیالت راحت :لبخند:
اون ریلیشن هایی هم که در هنگام فراخوانی تیبل ها خود کوئری میده، فقط یه پیشنهاده....
والا شما میتونی طبق نیاز خودت اونها رو پاک کنی یا تغییر بدی
فقط مهم اینه که ارتباطات منطقی باشه :متفکر:
گاهی شما برای منطقی شدن مجبورید دوتا (یا بیشتر) کوئری تو در تو بسازید تا ارتباطاتتون منطقی بشه!!
موفق باشین
Rasool-GH
یک شنبه 18 دی 1390, 19:54 عصر
اقا ممنون و مطلب رو به صورت چکیده اماده میکنم و اخر این تاپیک میزارم که هم تاپیک بسته بشه و هم اموزشی باشه واسه سایرین
hamid-nice
جمعه 25 اسفند 1391, 03:11 صبح
سلام به همه دوستان عزیز
آقای mj_bayati فایلی که در پست 11# گذاشتید خیلی عالی بود واقعا که من هم درگیر این موضوع بودم
اما یک سوال دارم که این هم در ارتباط با همون هر چی هم سعی کردم نشد
یک فایل ضمیمه کردم که میخوام اعداد بین text3 , text5 از Field3 را هم در جستجو لحاظ کنه که اگر هر کدوم خالی بود همه را بیاره
خیلی ممنون می شم اگه شما یا هر کس دیگری فایل ضمیمه را برای این منظور تصحیح کنه
با تشکر فراوان
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.