ش | ی | د | س | چ | پ | ج |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Sets or returns the relative record number of a Recordset object's current record.
شماره رکورد مرتبط با رکورد جاری شئ رکورد ست را بر میگرداند و Zero Based است یعنی از صفر شروع میشود چون در فرم کانتینیوس نمی توان ردیف ترتیبی گذاشت برخلاف آبجکت گزارش در نتیجه برای شماره دادن به رکوردها از AbsolutePosition استفاده می نمایند البته با استفاده از BookMark که می بایست BookMark فرم و رکوردست منطبق بشوند و بعد کار اضافه کردن را انجام داد.
یادآوری میشود :
مقدار ویژگی AbsolutePosition از صفر شروع میشود تا رکورد کانت منهای یک ، اگر مقدار این پراپرتی مساوی یا بالاتر از رکوردهای پرشده باشد خطا میدهد با بررسی پراپرتی RecordCount می توانید تعداد رکوردهای پرشده در شئ رکوردست را تعیین بنمائید. حداکثر تنظیم مجاز پراپرتی AbsolutePosition مقدار پراپرتی RecordCount منهای یک است.
مقدار پراپرتی BookMark مشابه record number نیست اشتباه نشود.
می توان پراپرتی BookMark را با فرم هایی برای تنظیم بوک مارکی که بصورت یونیک رکورد خاصی را در جدول یا کوئری تحت فرم مشخص میکند بکار برد.
بوک مارک ها با رکوردهایی که نشان می دهند ذخیره نمی شوند ، فقط در حالی که فرم باز است معتبر هستند. آنها هر بار که یک فرم Bound شده باز می شود ، توسط Microsoft Access دوباره ایجاد می شوند.
پس زمانیکه فرم کانتینیوس که به جدول یا کوئری متصل است یا با عبارت SQL دیتا می گیرد باز میشود رکوردها دارای بوک مارک یونیک و واحدی هستند یا در رکورد ست هر بار که تنظیم میشود بوک مارک جدیدی به ِآن تخصیص داده خواهد شد . اگر رکوردی حذف شود و به بوک مارک مقداری تخصیص داده شود ( در همان زمان حذف ) خطا ایجاد میشود.
TEXTBOX CONTROLNAME :
ROWTEXT
IN CONTROLSOURCE PROPERTY :
=FORMROWNUMBER(ME)
'EOF POSITION AFTER LAST RECORD
DIM FRM AS FORM
DIM RS AS DAO.RECORDSET
SET FRM=ME.RECORDSETCLONE
RS.MOVELAST : RS MOVEFIRST
'ON ERTOR RESUME NEXT
IF NOT (RS.BOF OR RS.EOF) THEN
RS.BOOKMARK=FRM.BOOKMARK
FORMROWNUMBER=RS ABSOLUEPOSITION+1
END IF
SET RS=NOTHING
I HOPE TO WRITE THE CODE CORRECTLY
VARBOOKMARK IS A VARIABLE
VARBOOKMARK AS VARIANT
RS.MOVELAST
VARBOOKMARK=RS.BOOKMARK
DEBUG.PRINT ISEMPTY(VARBOOKMARK)
SN: DCount("*","TableName","[ID]<=" & [ID])
یادداشت :
پراپرتی OptionValue فقط به کنترل های زیر در یک Option Group اعمال میشود.
check box
option button
toggle button
با استفاده از برگه پراپرتی کنترل می توان این پراپرتی را مقدار داد. همینطور از طریق ماکرو یا Vba مگر اینکه بصورت دستی تنظیم کنید یا مقدار دهید.
اولین کنترلی که در Option Group قرار میگیرد مقدار یک را دارد و دومین مقدار عدد صحیح 2 و همینطور ادامه دارد چنانچه کنترل دیگری در این گروپ باشد.
پراپرتی OptionValue زمانی موجود است که کنترل داخل آپشن گروپ قرار داده شود !!! .وقتی که سه کنترل یاد شده در بالا در Option Group نباشد کنترل این پراپرتی را نخواهد داشت
در عوض این چنین کنترل هایی که در Option Group قرار نمی گیرند یک پراپرتی با نام Control Source دارد و مقدار هر کنترل در صورت سلکت شدن True و عدم انتخاب False خواهد بید.
پس چی شد دوستان طبق داکیومنت آفیس اگر شما Option Group نداشته باشید بنابراین پراپرتی Option Value هم نخواهید داشت .
فرضا در رویداد Open فرمی می نویسید که به تکست های موجود در فیلد ( کمبو باکس ) Value بدهد و در رویداد کلیک Option Group می نویسید که در صورت انتخاب هر کدام از کنترل های داخل آن Value که در رویداد Open فرم تنظیم کرده اید را در پنجره Msgbox نمایش بدهد.
---------------------------------------------
در رویداد Form_Open
Me.Controls("ABC").OptionValue = 15876
-------------------------------------
در رویداد کلیک Option Group
MsgBox "The ID for the selected shipper is " & _
Me.Controls("Ship Method Group").Value
--------------------------------------
برای مثال اگر کالمن ( فیلد ) دارای دو مقدار باشد Yes و No یا On و Off استفاده از Option Button کار انتخاب را راحت میکند.اگر کاربر یکی را انتخاب کند باعث عدم انتخاب باتن دیگر میشود پس یعنی فقط یک گزینه را می توان در یک Group انتخاب کرد و انتخاب MutiSelection نخواهید داشت مگر اینکه از Option Group استفاده نکنید و چند کنترل چک باکس تعبیه کنید
در زیر در جدول یک فیلدی ساخته شده با نام AccountClosed و دیتا تایپ YesNo ، همینجا خدمت دوستان عرض میکنم از فارسی نوشتن فیلد خودداری کنید !!!. همانطور که در تصویر زیر آن می بینید پراپرتی بنام CAPTION دارد که فارسی آنرا می توانید آنجا قید کنید دابل کوتیشن هم لازم نیست بگذارید و در تصاویر دیگر نحوه انتخاب OPTION GROUP از دیزاین فرم و کشیدن آن روی فرم را نمایش داده
در جدول شما فیلد موردنظر می تواند کمبو باکس باشد بجای YesNo و چندین آیتم را شامل شود . اگر از آپشن گروپ استفاده کنید و هر کدام از رشته های داخل کمبو را به پراپرتی OPTIONVALUE ارتباط دهید ( احتیاجی به مقدار دادن نیست چون خودشان مقدار می گیرند از یک تا ... همان نام را در آپشن به همان عبارت داخل کمبو تایپ کنید اسپیس ها یا فواصل بین کلمات را هم همانطور که در جدول است بگذارید) زمانیکه جدول را باز میکنید و روی فیلد کلیک میکنید VALUE را می بینید امتحان بنمائید.
در تصویر زیر که از یکی از سایتها کپی شده این OPTION GROUP با استفاده از رویداد AFTER UPDATE ش سابفرم را ریکوئری می کند SUB1.REQUERY
زمانیکه روی یکی از باتن ها کلیک می کنید سابفرم می بایست با توجه به ولیوی آنها فیلتر شود فرضا اگر ALL انتخاب شود باید فیلد SALE تیک خورده ها و نخورده ها (کلی ) در دیتاشیت لیست شود و چنانچه NO SALE انتخاب شود که ولیوی 2 دارد دیتاهایی که SALE آنها تیک نخورده نمایش داده شوند.
[Forms]![frm_Export]![optSelect]=0 ' ALL
[Forms]![frm_Export]![optSelect]=1 ' SALE
[Forms]![frm_Export]![optSelect]=2 ' NO SALE
(
[Forms]![frm_Export]![optSelect]=0
OR
( Sale=-1 AND [Forms]![frm_Export]![optSelect]=1)
OR
(Sale=FALSE AND [Forms]![frm_Export]![optSelect]=2)
)
فرض کنید دکمه ALL را SELECT یا انتخاب میکنید
عبارت اول TRUE
عبارت دوم TRUE AND FALSE =FALSE
عبارت سوم TRUE AND FALSE=FALSE
در نتیجه TRUE OR FALSE OR FALSE میشود TRUE و تمام
اگر دکمه SALE فشرده شود
عبارت اول FALSE چون ولیو باتن صفر نیست و یک است
عبارت دوم TRUE AND TRUE=TRUE
عبارت سوم TRUE AND FALSE = TRUE
در نتیجه FALE OR TRUE OR FALSE میشود TRUE و عبارت TRUE شده نمایش داده میشود.
اگر دکمهNO SALE فشرده شود
عبارت اول FALSE چون ولیو باتن صفر نیست و دو است
عبارت دوم TRUE AND FALSE=FALSE
عبارت سوم TRUE AND TRUE = TRUE
در نتیجه FALSE OR FALSE OR TRUE میشود TRUE و عبارت TRUE شده نمایش داده میشود. ( عبارت سوم TRUE است )
مثال دیگر سوالی که در یک تاپیک پرسیده شده بود :
دارم سعی میکنم فیلتری را روی ستونی به نام BILLED یک کوئری انجام میدهم که فیلد از نوع YESNO است ، با استفاده از کنترل چک باکس رو فرم.
جدول TIMESHEET دارم با اسم TBLTIMESHEET که حاوی اطلاعاتی مثل [DATE] [JOB NUMBER] [EMPLOYEE]
[HOURS] [BILLED] و غیره است ، زمان INVOICE برای JOB NUMBER مشخص گزارشی را برای یک JOB تولید کرده ام ، سپس چک باکسی برای هر رکورد.
من کوئری ساختم از جدول براساس فرم FRMJOBTIME در آن کوئری.یک کنترل تکست باکس روی فرم قرار داده ام برای فیلتر کردن گزارش.خب ، شرط در قسمت CRITERIA زیر ستون JOB NUMBER در کوئری مثل این است :
[Forms]![frmJobTime]![txtJobNum]
که عالی کار میکند.
حال مشکل واقعی من اینجاست :
در واقع میخواد اگر چک باکس تیکش برداشته شد تمام رکوردها نمایش داده شود
بالاخره دوستمون درژانویه سال 2015 جوابش را خودش پیدا کرد .
فرضا داخل کنترل TXTJOBNUM در فرم 1201 تایپ بشود میگوید :
tblTimesheet.[Job Number]) Like " * " & 1201 & " * "
در اینجا چون فیلد JOB NUMBER عددیست از کوتیشن استفاده نشده اگر دیتا تایپ فیلد تکست بود میشد :
tblTimesheet.[Job Number]) Like " '* " & 1201 & " * '"
در کل فرم فیلتر میشود و رکورد یا اگر یونیک نباشد یا پرایمری کی رکوردهایی را نمایش میدهد که JOB NUMBER برابر با 1201 باشد در قسمت بعد AND اضافه کرده و برای فیلد BILLED که صفر ( Uncheck ) یا منفی یک ( Checked ) میگیرد تابع شرطی نوشته با IIF که اگر کنترل چک باکس در فرم با نام CHKUNBILLEDFILTER تیک خورده بود FALSE را بر گرداند یا در غیر اینصورت * را .
tblTimesheet.[Job Number]) Like " '* " & 1201 & " * '" AND BILLED (CHECHBOX=TRUE) LIKE FALSE
عبارت بالا جاب نامبرهای *1201* را می آورد که فیلد بیلد فالز باشد.یعنی تیک چک نداشته باشند.
tblTimesheet.[Job Number]) Like " '* " & 1201 & " * '" AND BILLED (CHECHBOX=FALSE) LIKE *
عبارات بالا را تست کنید و به صحت یا عدم صحت یا کارآیی آنها پی ببرید.
Zero is used to represent false, and
One is used to represent true. For interpretation, Zero is interpreted as false and anything non-zero is interpreted as true.
برای چک باکس و خارج شدن از فیلتر روش استفاده از عبارت در کوئری بشکل زیر است :
Like [Forms]![frmName]![checkBox1] & "*" Or Is Null
So now, if the user does not wish to filter the result by selecting the check boxes, the result will show all data. Hopefully this will help others down the road
برای اینکه اگر یکی از دو تکست باکس txtDateFrom or txtDateTo نال باشد تمام رکوردها نشان داده شود باید غیر از Between ..... And دو تا شرط دیگر اضافه نمود ( دیتا تایپ در جدول از نوع DateTime است )
But you want all rows returned when either txtDateFrom or txtDateTo is Null. In that case you can add 2 conditions to your WHERE
clause:
WHERE
your_date_field Between [Forms]![Search Form]![txtDateFrom] And [Forms]![Search Form]![txtDateTo]
OR [Forms]![Search Form]![txtDateFrom] Is Null
در صورتی فیلترکردن بین دو تاریخ عمل نمیکند که فرمتی که در جدول ذخیره میشود و فرمت در کنترل تکست باکس مشابه نباشد!!! فرضا "/" در جدول ذخیره نشود مثلا کسانیکه فیلد را از نوع تکست انتخاب میکنند برای تاریخ شمسی و INPUT MASK می گذارند ولی "/" در جدول فقط نمایش داده میشود و این در حالی است که "/" در تکست باکس وجود دارد و نمایشی نیست
البته گفته شده اگر زبان به United Kingdom تغییر پیدا کند (آنها فرمت 24 ساعته دارند مثل کشور ما ) ساعت با فرمت 24 ساعته نمایش داده میشود.
Control Panel > Region > Tab : Formats > Date And Time Formats > Change To HH:SS