PDA

View Full Version : شرط فیلتر کردن فیلدهای خالی در Query



Rasool-GH
یک شنبه 02 مرداد 1390, 00:09 صبح
سلام خدمت همه اساتید

من نیاز دارم که در یک Query شرطی قرار بدم که رکوردهای مورد نظر را با توجه به خالی بودن یا پر بودن یک فیلد خاص در جدول به من بده .

یک جدول دارم که شامل نام و فامیل است و یک فرم برای گرفتن کوری درست کردم که یک TextBox و یک ChekBox داره . حالا میخوام یک Query بگیرم به این صورت که لیست افرادی با نام خاص رو استخراج کنه با این شرط که در صورت علامت خوردن ChekBox افرادی که فیلد فامیل براشون تکمیل نشده لیست بشن و در صورت برداشتن علامت ChekBox افرادی که فیلد فامیل براشون تکمیل شده لیست بشن

ببخشید که یکم بد توضیح دادم .

لطفا بگید در Query برای فیلد فامیل چه شرطی قرار بدم که به ChekBox هم وابسته باشه . ممنون .

Rasool-GH
یک شنبه 02 مرداد 1390, 20:25 عصر
سلام
یک مورد دیگه هم به کمک نیاز دارم . در TextBox چه کاراکتری قرار بدم که همه اسمها در Query لیست بشه و به یک اسم خاص محدود نشه .

linktaz
یک شنبه 02 مرداد 1390, 21:37 عصر
سلام خدمت همه اساتید

من نیاز دارم که در یک Query شرطی قرار بدم که رکوردهای مورد نظر را با توجه به خالی بودن یا پر بودن یک فیلد خاص در جدول به من بده .

یک جدول دارم که شامل نام و فامیل است و یک فرم برای گرفتن کوری درست کردم که یک TextBox و یک ChekBox داره . حالا میخوام یک Query بگیرم به این صورت که لیست افرادی با نام خاص رو استخراج کنه با این شرط که در صورت علامت خوردن ChekBox افرادی که فیلد فامیل براشون تکمیل نشده لیست بشن و در صورت برداشتن علامت ChekBox افرادی که فیلد فامیل براشون تکمیل شده لیست بشن

ببخشید که یکم بد توضیح دادم .

لطفا بگید در Query برای فیلد فامیل چه شرطی قرار بدم که به ChekBox هم وابسته باشه . ممنون .
دوست عزيز اين ميتوني از اين روش استفاده كني:
دوتا كوئري درست كن يكي براي استخراج اسامي كه فاميلي ندارند و يكي براي اونائي كه فاميلي دارند.
براي اوني كه فاميلي نداره توي شرط اش بذار is null
براي اوني كه فاميلي داره كه از دستور like استفاده كن
توي فرم ات هم روي command bottom از يه if استفاده كن كه اگر check box تيك خورده بود بره query 1 رو اجرا كنه و در غير اين صورت بره كوئري 2
ببخشيد سريع گفتم.عجله داشتم.براي محدود نشدن به يه اسم خاص هم از دستور like اسفاده كن(سرچ كني مطلب زياد هستش)
موفق باشي

Rasool-GH
یک شنبه 02 مرداد 1390, 21:50 عصر
ممنون بابت راهنمایی خوبتون
من جون این Query رو داخل یک فرم نمایش میدم نیاز دارم که کل کار در یک Query انجام بشه .

یه مثال میزنم که روشن تر باشه
من برای فیلتر کردن فیلدهای عددی از شرط زیر استفاده کردم و جواب هم داد ولی برای فیلدهای Text به مشکل برخورد کردم .

<[Forms]![Form1]![CheckBox1]-"1"

اگه راهی داره و به نظرتون میرسه راهنمایی کنین

mohammadgij
یک شنبه 02 مرداد 1390, 23:56 عصر
فايلت رو آپ كن تا برات درستش كنن دوستان و توضيحات هم بدن. اما من يه راه به شما ميگم بايد جواب بده.
شما After Update فيلد CheckBox1 همون كاري رو بكن كه دوست عزيزمون linktaz گفته. اگه True شد كوئري 1 و اگه False شد كوئري 2 رو اجرا كن.
راه ديگه اينكه كه در فرمي كه نشون ميدي RecordSource فرم رو با يك دستور ساده




If CheckBox1=true then
me.subformName.recordSource = "Select * from query 1 Where field1=-1 and (family = null or family="")"
else
me.subformName.recordSource = "Select * from query 1 Where field1<>-1 and (family <> null and family<>"")"
end if


ست كني كه اينن دستور رو هم ميتوني افتر آپديت همون چك باكس بنويسي

Rasool-GH
دوشنبه 03 مرداد 1390, 10:09 صبح
اقا از راهنمايي شما ممنونم

اين روش رو هم امتحان ميكنم . اگه امكان داره لطف كنين و در مورد استفاده از دستور IIf در Query توضيح بدين كه دستور به چه صورت بايد نوشته بشه .

تا جايي كه امكان داره بايد فرمها و كوئري ها كم بشه . چون همين الان حدود 50 تا كوئري دارم با 80 تا فرم . مشكلاتم خيلي زياد شده .

Rasool-GH
چهارشنبه 05 مرداد 1390, 01:03 صبح
سلام خدمت همگی
فایل رو پیوست کردم در صورت امکان راهنمایی کنید که چطور یه CheckBox دیگه داشته باشم که دستور کارهای انجام شده و انجام نشده در یک شرط وابسته به CheckBox به طور جداگانه لیست بشن

ممنون

mehdiqwerty
پنج شنبه 06 مرداد 1390, 14:22 عصر
سلام
خوبید
شما برا اداره برق درودزن هستی؟

Rasool-GH
شنبه 08 مرداد 1390, 20:00 عصر
سلام
بله کارمند اداره برق هستم . ((درودزن )) کجاست ؟
این یه پورتال داخلیه که دارم واسه خودم میسازم . تو اداره خیلی به کارم میاد و شما مال کجایی ؟

کسی نیست این مشکل منو حل کنه خیلی نیاز دارم . ممنون میشم دوستان یاری کنن

dadsara
یک شنبه 09 مرداد 1390, 09:51 صبح
سلام
دوست عزیز در شرط مربوط به تاریخ ثبت نوشته اید تاریخ ثبت خالی نباشد و بزرگتر از A و کوچکتر از B باشد این درحالی است که فیلدی که باید بزرگتر از یک تاریخ و کوچکتر از یک تاریخ دیگر باشد اصولا دیگر نمی تواند خالی باشد پس اسن شرط را بردارید
برای فیلد تاریخ اجرا چنانچه این فیلد پر نمی شود آنرا را صفر اشغال کنید . باقی کارها خودبخود درست می شود

Rasool-GH
دوشنبه 10 مرداد 1390, 00:11 صبح
سلام

ممنون از توجه شما . من در حال حاضر بانک رو دارم و چند هزار رکورد هم ذخیره شده . نمیتونم همشو ادیت کنم و بتا به دلایلی باید فیلد مورد نظر یا خالی باشه یا تاریخ داشته باشه

Rasool-GH
دوشنبه 10 مرداد 1390, 00:12 صبح
در ضمن اون شرطی که تو اون فیلد هست نیاز به اصلاح داره . یعنی به شکلی بشه شروط رو قرار داد که از زیاد شدن کوئری ها جلوگیری بشه

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

Rasool-GH
چهارشنبه 02 شهریور 1390, 19:43 عصر
سلام

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

یک فیلد تو کوئری با دستور زیر ایجاد کردم و شرط اون رو =0 قرار دادم

(Expr1: IIf([Forms]![Form1]![Check1];([sabt].[tarikhe]) Is Not Null;([sabt].[tarikhe]) Is Null

sabt اسم جدول موجوده و tarikh هم اسم فیلد مورد نظر من داخل جدوله که میخوام پر یا خالی بودنشو برسی کنم

hghb57
پنج شنبه 03 شهریور 1390, 10:47 صبح
سلام خدمت همگی
فایل رو پیوست کردم در صورت امکان راهنمایی کنید که چطور یه CheckBox دیگه داشته باشم که دستور کارهای انجام شده و انجام نشده در یک شرط وابسته به CheckBox به طور جداگانه لیست بشن

ممنون

فايل پيوست را ببين
من امكان تغيير در چك باكس هاي راكد بودن كار و انجام شدن كار در فرم dk را اضافه كردم

Rasool-GH
جمعه 04 شهریور 1390, 20:54 عصر
سلام
خیلی ممنون از زحمتی که کشیدین . داه حل جالبی بود

اگه امکان داره دلیل اینکه یک شرط را در هر دو قسمت ceriteria و or تکرار کردین توضیح بدین . ممنون

hghb57
شنبه 05 شهریور 1390, 08:51 صبح
در اين Query براي تاريخ انجام دو حالت در نظر گرفته شده است. الف آيا فعاليت انجام شده است يا خير ب) آيا فعاليت در تاريخ مورد نظر انجام شده است يا نه
براي مورد الف من يك فيلد جديد به Query اضافه كردم كه اگر تاريخ انجام Null است مقدار False وگرنه مقدار True را برگرداند و مقدار اين فيلد جديد بايد برابر چك باكس باشد

Expr1: IIf([tarikhe-anjam] Is Null;False;True)
براي مورد ب بايد به اين نكته توجه داشته باشد كه اگر فعاليت انجام شده باشد بايد تاريخ انجام با Range داده شده در فرم مقايسه شود ولي اگر فعاليت انجام نشده باشد اين مقايسه معنا ندارد و هميشه مقدار False برگشت داده مي شود بنابراين من براي فيلد تاريخ انجام محدوديت زير را در نظر گرفتم

((([dastore-kar].[tarikhe-anjam])>[Forms]![dastore-kar]![T23] And ([dastore-kar].[tarikhe-anjam])<[Forms]![dastore-kar]![T24]) OR [dastore-kar].[tarikhe-anjam] is Null)

البته من محدوديت را در SQL تعريف كردم و در حالت Design view به اين شكل Criteria و OR نشان داده شد.