نوشتن ساب کوئری
دوستان اکسسی نه فراتر از استاندارد اکسس حتما عملگرهای منطقی را با دقت مطالعه کنید چون در کوئری های پیشرفته کارگشا هستند.( ما هم مثل شما فراگیر بوده ایم پس تلاش کنید )
در تصویر بالا جدولی به نام U1 با یک فیلد Unit ساخته شده ( که نتیجه و داده ای ندارد ) باید کوئری نوشته شود که در صورت خالی بودن آن تمام داده های جدول تصویر اول یعنی U ( شامل دو فیلد Unit,Dia ) نمایش داده شود.( مثل تصویرزیر )
در داخل جدول U1 متن یا متن هایی زیر هم ، یا وارد میشه یا در جائی ( فرمی ) توسط دستور insert into به این جدول موقت یا Temporary اضافه می شود.حال می خواهیم بر اساس این جدول ، جدول U که شامل دو فیلد Unit و Dia است فیلتر شود.... از Select استفاده کردیم در Where دو شرط با عملگر Or نوشتیم یکی داده های فیلد Unit مساوی داده های آن فیلد در جدول U1 باشد و دیگری کانت یا رکوردهای جدول U1 برابر 0 باشد .
عملگرهای منطقی را با دقت مطالعه کنید :
False Or False=False
True Or False=True
True Or True=True
True Or Null=Null
توضیح بیشتر :
حالت اول - فرض کنیم جدول U1 خالی باشد (یعنی داخل فیلد Unit داده ای Export نشده باشد ) جوابِ اشتراک U و U1 فالز ( False است ) و جواب شمارش ( کانت ) جدول U1 نیز که صفر است True میشود در نتیجه طبق گفته بالا Fasle Or True تمام داده های جدول U ( البته طبق فیلدهایی که در Select Query ) نوشتید نمایش داده خواهد شد
حالت دوم - فرض می کنیم در فیلد Unit از جدول U داده هایی تایپ یا Export شده ، بنابراین اگر خوش بین باشیم که یک یا چند داده در دو جدول مشترک باشند جواب True خواهد بود و در شرط بعدی جوابِ کانت جدول U1 دیگر صفر نیست و False می شود ( چرا False می شود ؟؟؟؟!!!! چون در شرط بعد از Or گفتیم که کانت جدول در صورتی True در نظر گرفته شود که نتیجه اش صفر را برگرداند) لذا با توجه به گفته عملگرها True Or False در نتیجه مشترک ها ( داده های فیلد Unit از جدول U که در U1 وجود دارد ) نمایش داده خواهد شد فرضا اگر در جدول U1 داده 120A وارد شده باشد جدول U طبق همین داده فیلتر خواهد شد یعنی یک ردیف در جواب کوئری خواهید دید.
حالت سوم - کوئری نتیجه ای ندارد ، شرط قبل از Or >>> اگر جدول U و U1 در داده ی فیلد Unit اشتراکی نداشته باشند ( یعنی داده یا داده هایی در جدول U1 و فیلد Unit وارد شده باشد که اصلا در فیلد مربوطه در U موجود نباشد ) جواب False است ، جوابِ شرط بعد از Or هم چون قرار است صفر بودن کانت جدول صحت کار باشد ولی عدد غیر صفر را در این حالت ( جدوا U1 خالی نیست ) نشان میدهد پس نتیجه این شرط هم False است .... False Or False باعث میشود که کوئری Result نداشته باشد چون اشتراکی در جداول در فیلد Unit ندارند.
شهریور ۱۴۰۱ :
دختر ۲۲ ساله کردستانی که همراه خانواده اش به تهران سفر کرده بود، توسط گشت ارشاد، جلب و ساعاتی بعد با عارضه قلبی و در حالی که هوشیاری نداشته به بیمارستان برده می شود و در لحظه نگارش این متن، وضعیت مساعدی ندارد.
دایی مهسا امینی دختری که پس از بازداشت در اداره پلیس به کما رفت در مصاحبه با روزنامه اینترنتی فراز گفت:
قلبش نیمهفعال شده و کلیههایش دیگر کار نمیکنند. دکترها گفتند فقط دعا کنید. اینجا ما طلبکاریم.
فرمانده پلیس آمد، قول دادند تصویر دوربینهای مداربسته را نشانمان دهند.
امروز نوبت دختر ما بود، فردا نوبت دختری دیگر است
چنانچه آنطور که ضدانقلاب میگوید و این فرد در اثر شکنجه به کما رفته حتما باید با متخلفین و خاطیان برخورد شود و پلیس باید در این زمینه پاسخگو باشد. مجازات برخورد با بیحجابی ضرب و شتم نیست و در سابقه پلیس نیز تاکنون گزارشی از برخورد فیزیکی با بدحجابان گزارش نشده است.
به گزارش تجارتنیوز، مهسا امینی دختری سنندجی بود که در بزرگراه شهید حقانی تهران بازداشت شد. اعتمادآنلاین نوشت: دایی مهسا امینی فوت او را تایید کرد.
انا للّله و انا الیه الراجعون و شوربختانه خانم مهسا امینی این دختر ۲۲ ساله و میهمان پایتخت در تاریخ ۲۵ شهریور ۱۴۰۱ یا با کفایت پلیس یا بد شانسی خودش وفات نمود تسلیت به خانواده ایشان.
ای کاش آقای سید علی خامنه ای در مراسم پیاده روی اربعین و راهپیمائی روز ۲۲ بهمن دستور دستگیری بدحجابان یا باصطلاح بدپوششان را صادر کند و به مصلحت نظام خویش نیاندیشد که هیچ حکومتی جز حکومت مهدی پابرجا نیست حتی اگر در مسیر آن باشد.
در تصویر زیر سه Toggle Button در OptionGroup با نام Frame5 قرار گرفته و ولیوی آنهای به ترتیب 0 تا 2 است با کلیک روی اولین باتن ، تمام رکوردهایی که فیلد chk آنها تیک خورده یا نخورده در سابفرم آورده میشود Forms!Form1!Frame5=0 ، کلیک روی باتن دوم رکوردهایی که فیلد chk آنها غیر صفر است در سابفرم لیست میشود و باتن آخر هم لیست رکوردهایی است که فیلد chk آنها صفر یا تیک ندارند
در تصویر زیر فرمی Simulate شده که سه کنترل CheckBox برای فیلتر کردن گرید A تا B ( فیلد Grade ) و دو کنترل CheckBox دیگر برای فیلتر کردن تیک خورده ها یا نخورده ها ( فیلد chk )، دارد چنانچه هیچکدام از ۵ چک باکس تیک نخورده باشند کل داده نمایان خواهد شد.( تعداد کل ورودی در تصویر ۹ رکورد بوده )
سمت راست تصویر چهار رکورد نمایش داده شده دقیقا تیک چک باکس گرید A و تیک چک باکس ( Unchecked مربوط به فیلد chk ) در فرم زده شده ... طبق عبارت Sql کوئری شامل رکوردهایی با گرید A که تیک Chk آنها نخورده باشد.
بین هر فیلد از عملگر منطقی AND استفاده میشود و برای لیست کردن چند آیتم خاص از یک فیلد OR کاربرد دارد.
?'A' AND FALSE=FALSE
?'A' AND TRUE=NULL
'A' OR TRUE=TRUE
'A' OR FALSE=0
'A' OR TRUE=1
FALSE OR TRUE=TRUE
TRUE OR FALSE=TRUE
TRUE AND FALSE=FALSE
FALSE AND FALSE=FALSE
FALSE OR FALSE=FALSE
NULL AND FALSE=FALSE
NULL AND TRUE=NULL
NULL AND NULL=NULL
برای ارسال داده ها به اکسل نام کوئری را در دستور DOCMD.OUTPUTTO قرار می دهید.
Method vba/api/access.docmd.outputto
در تصویر زیر ، تصویر اول تمام رکوردهای جدول t نمایش داده شده شامل ۹ رکورد ایجاد شده با INSERT INTO ، تصویر سوم که فیلد DATE دارد شامل رکوردهایی است که کوچکت مساوی یک تاریخ خاص و نیز کوچکتر مساوی عدد 105 است ، تصویر چهارم یا آخر در تصویر زیر ، از رکوردهای داخل تصویر سوم آنهایی که تیک چک فیلد CHK آنها زده شده ( یا باصطلاح غیر صفر است ) را نمایش میدهد که شامل دو رکورد است .
در لینک زیر روش بیان شده ، البته هزینه بر است (کلا در چند خط خیلی کوتاه و شامل 4 تصویر که بعد از اعمال کد SQL جدول فیلترشده) . برای ارسال داکیومنت آن درخواست دهید و بعد از واریز مبلغ ده هزار تومان به ایمیل شخصی ارسال خواهدشد.
Multi Filter Select-Query-Access-
در تصویر زیر ، رکوردهایی که نام محصول به les ختم می شود لیست شده البته در SQL بجای علامت * در اکسس از % استفاده شده.اگر در اکسس عبارت جستجو بین دو * قرار بگیرد تمام رکوردهایی که نام محصول شامل آن عبارت است را می آورد چه آخر باشد چه هر جای دیگر رشته در فیلد نام محصول.
MULTIFILTER IN ACCESS :
در تصویر زیر اینطور تصور شده که فرمی با دو چک باکس برای فیلتر کردن فیلد Available و یک کنترل تکست باکس برای فیلتر کردن محتویات فیلد GradeNo موجود است.
در تصویر در صورت تیک داشتن یا نداشتن جفت تکست باکس کل رکوردها که 11 رکورد با Insert Into ایجاد شده در سابفرم نمایش داده میشود. در صورت تیک چک باکس اول رکوردهای دارای مقدار صفر یا False فیلد Available و تیک چک باکس دوم مقادیر غیر صفر یا True لیست میشوند . البته سابفرم باید Requery شود تا نتیجه فیلترشدن را ببینید.
برای اینکه در سابفرم تمام رکوردهای False و True فیلد Available نمایش داده شود می بایست :
Available=False Or Available=True
حال اگر قرار باشد فیلد Available در کوئری بیلدر مقادیر ولیوی چک باکس ها در فرم را بگیرد میشود :( در صورتیکه جفت چک باکس ها تیک نخورده باشند = False )
Available=False Or Available=False
و در اینصورت فقط مقادیر صفر یا False ها نمایش داده میشود ولی ما می خواهیم در صورت تیک نداشتن دو چک باکس و داشتن ولیوی صفر دو مقدار False و True را مشاهده بنمائیم.پس باید یکی از طرفین مخاف False شود.
FALSE OR <>FALSE=TRUE نمایش همه
TRUE OR <>FALSE = هاTRUE نمایش
FALSE OR <>TRUE= ها FALSE نمایش
TRUE OR <>TRUE=TRUE نمایش همه
در تصویر زیر دو تکست باکس تصور شده که در صورت تایپ عدد در این دو باکس اعدادی بین این دو که در جدول باشد نمایش داده میشود ، در صورتیکه یک باکس یا هر دو خالی بود از فیلتر در می آید . البته بدین شکل که اگر باکس دوم خالی باشد همه ی رکوردها و اگر باکس اول خالی باشد رکوردها تا مقدار باکس دوم مشاهده میشود در این دو تکست باکس چک میشود که اگر PartNo در جدول نباشد ارور بدهد در رویداد LOST FOCUS می توان با DlookUp چک کرد اگر نبود پراپرتی OldValue مقدار Value تکست باکسی شود که در حال Exit از آن هستید از رویداد Exit هم میشود بهره برد.
حال در تصویر زیر تکست باکس اول در فرم Null و تکست باکس دوم 1003 است ( جدول کلا 11 رکورد دارد )
(GradeNo>='' Or True) And (GradeNo<='1003' Or False)
عبارت بالا برای زمانی نیست که در دو تکست باکس اعدادی تایپ شود که در جدول وجود ندارد یا حتی در آنها کاراکتر غیر عددی وارد شود اگر صحت موجود بودن مقادیر در جدول چک نشود این عبارت False را بر می گرداند و هیچ رکوردی نمایش داده نخواهد شد.
(GradeNo='123' Or False) AND (GradeNo='896' Or False)
False And False=False ' No Record
بررسی عبارات زیر :
(GradeNo Between '458' And '678' Or False Or False)
458 , 678 Not Exist in Above Table
FALSE AND FALSE OR FALSE OR FALSE=FALSE
پس چون نتیجه FALSE است رکوردی نمایش داده نخواهدشد.
(GradeNo Between Null And '678' Or True Or False)
678 Not Exist in Above Table
NULL AND FALSE OR TRUE OR FALSE=TRUE
پس چون نتیجه TRUE است تمام رکوردها نمایش داده خواهدشد.
(GradeNo Between Null And Null Or True Or True)
Two Boxes Are Null
NULL AND NULL OR TRUE OR TRUE=TRUE
پس چون نتیجه TRUE است تمام رکوردها نمایش داده خواهدشد.
برای اینکه مقادیر وارد شده در دو تکست باکس را صحت سنجی نکنیم و در صورت تایپ مقداری خارج از جدول می بایست یک عبارت دیگر به شرط اضافع کرد مثل
OR (TRUE AND FALSE)
که در صورت پر بودن تکست باکس ها ،دو TRUE و FALSE داخل پرانتز TRUE شوند و در نتیجه کل رکوردها نمایش داده شوند و در اینجا جستجو کننده پی خواهد برد که یکی از مقادیر تایپ شده یا هر دو در جدول وجود ندارد البته جلوگیری از تایپ عددی یا تاریخی خارج از محتویات فیلد کار خوب و استانداردی است ولی خوب کوئری نویسی آسان بنظر میرسد ولی می بینید به همین سادگی که گفته شد نیست مگر اینکه عملگرهای منطقی را کاملا فرا بگیرید.
>>>>>> nullguide-oper
اگر دو تکست باکس پر باشند ولی در جدول ناموجود می توانید عبارت بالا را اضافه کنید . ( ... BETWEEN....AND...OR...OR)
(NULL(FALSE) AND NULL(FALSE) OR TRUE OR TRUE )OR (TRUE AND TRUE)=TRUE (NULL OR TRUE=TRUE)
تکست باکس اول NULL است و تکست باکس دوم مقداری که در فیلد GRADENO وجود ندارد یا حاوی کاراکتر غیر عددیست.
(NULL(FALSE) AND FALSE OR FALSE OR TRUE) OR (TRUE AND FALSE)=TRUE
NULL AND FALSE=FALSE
FALSE OR FALSE OR TRUE=TRUE
TRUE OR (TRUE AND FALSE)=TRUE OR FALSE=TRUE
جستجو بین دو تاریخ :
دو کنترل تکست باکس به نام های TXTDATEFROM و TXTDATETO . ( سعی کنید دو تا باکس را چک کنید اگر تاریخ اولی از باکس دومی بزرگتر بود خطائی صادر کرده یا باکس را NULL در نظر بگیرد.
BETWEEN TXTDATEFROM AND TXTDATETO OR FORMS!FORM1!TXTDATEFROM IS NULL OR FORMS!FORM1!TXTDATETO IS NULL
فرضا در جدول تاریخ های 1397/01/30 و 1398/02/01 نداریم تکست باکس ها را با این دو رشته پر می کنیم بعد از خروج از تکست باکس ها پراپرتی VALUE میشود مقادیری که گفته شد.چون دو تاریخ در جدول نیست پس برای هر کدام FALSE را بر می گرداند و نتیجه آخر FALSE است و هیچ رکوردی نمایش داده نخواهد شد.
(FALSE AND FALSE OR FALSE OR FALSE) =FALSE OR FALSE=FALSE ' NO RESULT
اگر تکست باکس اول NULL باشد و تکست باکس دوم دارای رشته ای باشد که داخل جدول نباشد( =FALSE) و بالعکس تمام رکوردها لیست خواهند شد :
(NULL AND FALSE OR TRUE OR FALSE)=FALSE OR TRUE OR FALSE=TRUE 'SHOW ALL RECORDS
تصویر زیر ، خود گویای توضیحات ارائه شده بالا است . جدول شامل کلا ۱۱ رکورد است یکی از تکست باکس ها خالیست و برابر NULL و در دیگری عددی خارج از اعداد جدول ، زمان اجرای کوئری تمام ۱۱ رکورد نمایش داده شده.
دوستان فراگیر ، مطالبی که در این یادداشت ها قرار داده میشود کاملا توضیح داده شده از کپی کاری پرهیز و سعی کنید برای خواندن مطالب وقت گذاشته ، به داکیومنت آفیس که مرجع است مراجعه کنید . لطفا در نظر سنجی هم شرکت کنید ( از انتخاب منو گوشه راست بالا ). بنده برنامه نویس نیستم فقط یادداشت هایی که از سایتهای خارجی استخراج کرده را برای خودم و شما به اشتراک خواهم گذاشت انشاءا... .کلام آخر ، کد آماده به درد تازه واردها نخواهد خورد سعی کنید مطالب را از همین بلاگ یاد بگیرید.
نظرات باز است در زیر همین یادداشت هم می توانید اعلام نظر بفرمائید و نظرسنجی فراموش نشود !!!
وقتی تکست 1 با لیبل "کد از " و تکست 3 با لیبل "کد تا " نال باشد
[Between [forms]![Form2]![Text1] And [forms]![Form2]![Text3?
Null
([isnull([forms]![Form2]![Text1?
True
[isnull([forms]![Form2]![Text3)?
True
( null or ( True or true?
True
جواب آخر True شد پس کل داده ها در دیتیل کانتینیوس فرم نمایش داده میشود
به تکست 1 داده 100 که در جدول از نوع نامبر است داده میشود خروجی به ترتیب زیر است
[forms]![Form2]![Text1]?
100
[forms]![Form2]![Text3]?
Null
[Between [forms]![Form2]![Text1] And [forms]![Form2]![Text3
Null
([isnull([forms]![Form2]![Text1?
False
([isnull([forms]![Form2]![Text3?
True
( null or ( False or true?
True
اگر در تکست 1 عدد 100 و در تکست 3 عدد 103 وارد شود
[forms]![Form2]![Text1]?
100
[forms]![Form2]![Text3]?
103
[Between [forms]![Form2]![Text1] And [forms]![Form2]![Text3
100
([isnull([forms]![Form2]![Text1?
False
([isnull([forms]![Form2]![Text3)?
False
False or False?
False
false Or 100?
100
Filter a query based on data entered in a text box
برای باز شدن کوئری میتوان از ماکرو و اکشن OpenQuery استفاده کرد
نمونه ماکرو
زنجیره فیلتر را مدیریت می کند. یک شی ImageProcess را می توان با استفاده از "WIA.ImageProcess" به عنوان ProgID در فراخوانی به CreatObject ایجاد کرد.
مثال Image Resize
Dim Thumb 'As ImageFile
Dim Img 'As ImageFileDim IP 'As ImageProcess"Img ="WIA.ImageFile"IP ="WIA.ImageProcess"Thump="WIA.ImageFileThumb.LoadFile "C:\WINDOWS\Web\Wallpaper\BlissThumb.bmp"Img.LoadFile "C:\WINDOWS\Web\Wallpaper\Bliss.bmp"Set IP.Filters(1).Properties("ImageFile") = ThumbIP.Filters.Add IP.FilterInfos("Stamp").FilterIDIP.Filters(1).Properties("Top") = Img.Height - Thumb.HeightIP.Filters(1).Properties("Left") = Img.Width - Thumb.WidthSet Img = IP.Apply(Img)Img.SaveFile "C:\WINDOWS\Web\Wallpaper\BlissStamp.bmp"
شامل مجموعه ای از همه اشیاء FilterInfo موجود است. برای جزئیات بیشتر در مورد دسترسی به شی FilterInfos ، از ویژگی FilterInfos (ImageProcess) در شی ImageProcess دیدن کنید.
To get further documentation for ImageProcess
, we can just "ask it"! Run this:
()Sub List_WIA_ImageProcess_Filters Dim f As Object, x As Long For Each f In CreateObject("WIA.ImageProcess").FilterInfos x = x + 1 Debug.Print "#" &x &": " &f.Name &" = " &f.Description &vbLf Next fEnd Sub
RotateFlip = Rotates in 90 degree increments and Flips, horizontally or vertically.
RotationAngle - Set the RotationAngle property to 90, 180, or 270 if you wish to rotate, otherwise 0 [the default]FlipHorizontal - Set the FlipHorizontal property to True if you wish to flip the image horizontally, otherwise False [the default]FlipVertical - Set the FlipVertical property to True if you wish to flip the image vertically, otherwise False [the default]FrameIndex - Set the FrameIndex property to the index of a frame if you wish to modify a frame other than the ActiveFrame, otherwise 0 [the default]
Crop = Crops the image by the specified Left, Top, Right, and Bottom margins.
Left - Set the Left property to the left margin (in pixels) if you wish to crop along the left, otherwise 0 [the default]Top - Set the Top property to the top margin (in pixels) if you wish to crop along the top, otherwise 0 [the default]Right - Set the Right property to the right margin (in pixels) if you wish to crop along the right, otherwise 0 [the default]Bottom - Set the Bottom property to the bottom margin (in pixels) if you wish to crop along the bottom, otherwise 0 [the default]FrameIndex - Set the FrameIndex property to the index of a frame if you wish to modify a frame other than the ActiveFrame, otherwise 0 [the default]
Scale = Scales image to the specified Maximum Width and Maximum Height preservingAspect Ratio if necessary.
MaximumWidth - Set the MaximumWidth property to the width (in pixels) that you wish to scale the image to.MaximumHeight - Set the MaximumHeight property to the height (in pixels) that you wish to scale the image to.PreserveAspectRatio - Set the PreserveAspectRatio property to True [the default] if you wish to maintain the current aspect ration of the image, otherwise False and the image will be stretched to the MaximumWidth and MaximumHeightFrameIndex - Set the FrameIndex property to the index of a frame if you wish to modify a frame other than the ActiveFrame, otherwise 0 [the default]
Stamp = Stamps the specified ImageFile at the specified Left and Top coordinates.
ImageFile - Set the ImageFile property to the ImageFile object that you wish to stampLeft - Set the Left property to the offset from the left (in pixels) that you wish to stamp the ImageFile at [default is 0]Top - Set the Top property to the offset from the top (in pixels) that you wish to stamp the ImageFile at [default is 0]FrameIndex - Set the FrameIndex property to the index of a frame if you wish to modify a frame other than the ActiveFrame, otherwise 0 [the default]
Exif = Adds/Removes the specified Exif Property.
Remove - Set the Remove property to True if you wish to remove the specified Exif property, otherwise False [the default] to add the specified exif propertyID - Set the ID property to the PropertyID you wish to Add or RemoveType - Set the Type property to indicate the WiaImagePropertyType of the Exif property you wish to Add (ignored for Remove)Value - Set the Value property to the Value of the Exif property you wish to Add (ignored for Remove)FrameIndex - Set the FrameIndex property to the index of a frame if you wish to modify a frame other than the ActiveFrame, otherwise 0 [the default]
#6: Frame = Adds/Removes the specified Frame.
Remove - Set the Remove property to True if you wish to remove the specified FrameIndex, otherwise False [the default] to Insert the ImageFile before the specified FrameIndexImageFile - Set the ImageFile property to the ImageFile object whose ActiveFrame that you wish to add (ignored for Remove)FrameIndex - For Remove, set the FrameIndex property to the index of the frame you wish to remove, otherwise for add, set the FrameIndex to the index of the frame to insert the ImageFile before, otherwise 0 [the default] to append a frame from the ImageFile specified
#7: ARGB = Updates the image bits with those specified.
ARGBData - Set the ARGBData property to the Vector of Longs that represent the ARGB data for the specified FrameIndex (the width and height must match)FrameIndex - Set the FrameIndex property to the index of the frame whose ARGB data you wish to modify, otherwise 0 [the default] to modify the ActiveFrame
#8: Convert = Converts the resulting ImageFile to the specified type.
FormatID - Set the FormatID property to the supported raster image format desired, currently you can choose from wiaFormatBMP, wiaFormatPNG, wiaFormatGIF, wiaFormatJPEG, or wiaFormatTIFFQuality - For a JPEG file, set the Quality property to any value from 1 to 100 [the default] to specify quality of JPEG compressionCompression - For a TIFF file, set the Compression property to CCITT3, CCITT4, RLE or Uncompressed to specify the compression scheme, otherwise LZW [the default]
فرض کنید کنترل چک باکسی در فرم ساخته اید به نام Check2 که در فرم اصلی با نام Form3 قرار گرفته میخواهید آن چک باکس را به رکوردسورس فرم وصل کنید به این منظور که هر زمان باتنی با نام فیلتر را فشردید بر حسب تگ آن چک باکس فیلتر در دیتیل اعمال گردد.
در تگ چک باکس مقدار را وارد کنید ( فرض می کنیم میخواهیم فیلد تحصیلات در دیتیل با مقدار چک باکس فیلترشود پس مقدار تگ را دیپلم قرار می دهیم ) سپس به دیزاین فرم رفته و در رکورد سورس به کوئری بیلدر می رویم ( با زدن سه نقطه کنار باکس رکوردسورس) .
در قسمت Criteria فیلد Education تایپ میکنیم
Forms!Form3!Check2.Tag
حتما در رویداد باتن فیلتر منبع فرم را ریکوئری کنید
Me.Requery
زمانیکه فرم باز شود دیتیل فرم طبق مقداری که در پراپرتی تگ ( Tag ) چک باکس گذاشتید فیلتر میشود و امکان حذف فیلتر را ندارید. (مگر ساخت باتن دیگر و نوشتن Me.FilterOn=False )
اگر بخواهید زمان بازشدن فرم کل رکوردها نمایش داده شود و زمانیکه بر روی باتن فیلتر فشردیدآنوقت فیلترانجام شودباید دریک ستون دیگرفیلدEducation را انتخاب و توتالزرا Where کنید و سپس در کریتریای آن بنویسید
(iif(Forms!Form3!Check2=True,Forms!Form3!Check2.Tag,False
موردبالا بعد از برداشتن تیک دیتیل را خالی نمایش میدهد که برای اینکار از Is Null آن چک باکس و false در iff ذکرشده استفاده می کنیم.
فیلتر کردن تاریخ :
- دو تکست باکس به نام های Text12 و Text14در فرم دارید و می خواهید رکوردهای بین دو تاریخ درج شده در دو تکست باکس فیلترشود در همان کوئری بیلدر در شرط فیلد تاریخ می نویسید
Between Forms!Form3!Text12 And
Forms!Form3!Text14
*** Null معادل هیچ مقداری نیست جمع مقادیر با Null همان Null میشود پس برای فیلد رکوردی که Null است یا کنترلی که Null است باید صفر در نظرگرفته شود تا جواب جمع Null نشود و ارور دریافت نکنید !!!
اگر یکی از تکست باکس ها یا جفت خالی باشند چه اتفاقی خواهد افتاد به رفتار عملگرها مراجعه کنید ) ؟!!!
طبق داکیومنت اکسس بولین مقدار ندارد ولی برای فالز صفر و برای ترو هر عددی غیر از ترو می تواند باشد
Between True And Null=Null
Between Null And True=Null
Between Null And Null=Null
( یکسری از دوستان فقط بلدن کپی کنن !!! در عبارت بالا فاصله
رعایت شود )
نکته !!! اگر در تکست باکسها الگوی ورودی یا Input Mask استفاده کردید برای تاریخ حتما باید مثل Input Mask فیلد تاریخ باشد یعنی اگر در فیلد تاریخ جدول از 0 ;0000/00/00 استفادا کردید که اسلش ها هم درنظر گرفته میشود اگر Inpust Mask تکست باکس ها را فقط 0000/00/00 در نظر بگیرید چون مچ نمی شود خالی نمایش میدهد و یا اگر اینپوت ماسک شما در جدول بصورت 0000/00/00 ( که اسلش ها در نظر گرفته نمی شود ) باشد و در تکست باکس از اینپوت ماسک استفاده نکرده باشید و خودتان تاریخ را با اسلش تایپ کنید باز هم مچ نمیشود چون در جدول فرضا 13980120 ثبت شده ولی شما در تکست باکس 1398/01/20 وارد کرده اید . ( پس خالی بودن دیتیل فرم بدین معنیست که مچ نشده چه تاریخ مورد نظر در مقدار فیلد جدول نباشد یا اینکه الگوی شما با تکست باکس نخواند )
پس اول چک کنید که الگوها یکی باشند !!! بعد از تطبیق دادن اگر شما یکی از تکست باکس ها را خالی رها کنید زمانیکه باتن فیلتر را کلیک می کنید باز هم دیتیل را خالی نمایش می دهد برای اینکه اگر یکی از آنها خالی بود از حالت فیلتر خارج شود کافیست با آن آدرس تکست باکس عبارت Is Null را بکار ببرید ( بافاصله !!! ). اشتباه نکنید در محیط وی بی تابع IsNull وجود دارد.
Between (Forms!Form3!Text12 Or Forms!Form3!Text12 is Null) And
(Forms!Form3!Text14 Or Forms!Form3!Text14 is Null)
برای درک عبارت بالا بهتر است حتما عملکرد عملگرها را بدانیم
Boolean Operation
not
NULL
= NULL
NULL
or false
= NULL
NULL
or true
= true
NULL
or NULL
= NULL
NULL
and false
= false
NULL
and true
= NULL
NULL
and NULL
= NULL
The Microsoft Access IsNull function returns TRUE if the expression is a null value. Otherwise, it returns FALSE.
فرضا در Text12 هیچ مقداری وجود ندارد ( Null ) یعنی Null است و is Null برابر True ( چون در اینجا تکست 12 Null است پس True را بر می گرداند ) پس طبق بالا داریم
Null Or True=True
A | β | AND(&&) | OR(| |) | NOT(exclA) |
---|---|---|---|---|
FALSE | FALSE | FALSE | FALSE | TRUE |
FALSE | TRUE | FALSE | TRUE | TRUE |
TRUE | FALSE | FALSE | TRUE | FALSE |
TRUE | TRUE | TRUE | TRUE | FALSE |
When Visual Basic converts numeric data type values to Boolean
, 0 becomes False
and all other values become True
. When Visual Basic converts Boolean
values to numeric types, False
becomes 0 and True
becomes -1.
در مورد Between...And :
If expr, value1, or value2 is Null, Between...Andreturns a Null value.
برای شرط تاریخ میتوان با Iif شرطی نوشت که اگر تکست باکس شروع خالی بودبرای عملگر بزرگتر ( برای تکست باکس شروع ) First یا Min ( بهتر است استفاده شود ) فیلد تاریخ اعمال شود و برای عملگر کوچکتر ( برای تکست باکس خاتمه ) اگر تکست باکس خاتمه خالی بود Last یا Max فیلد تاریخ ( که بهتر است )