کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی
کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی

نشانک یا BookMark در اکسس و بررسی رفتن به رکورد خاص



کاربرد ویژگی Bookmark با فرم ها برای تنظیم نشانکی که بصورت یکتا یک رکورد خاص در فرم تحت جدول را مشخص می نماید.


Form.Bookmark


نشانک ها را در هر فرمی که کاملا بر اساس جدول های اکسس است می توان بکار برد . اگرچه دیگر محصولات دیتابیس می توانند نشانک ها را پشتیبانی نکنند . برای مثال شما نمی توانید نشانک ها را در یک فرم بر پایه یک جدول پیوندی ( link Table  ) که primary index ندارد استفاده نمائید.


Requery کردن یک فرم هر نشانک تنظیم شده ای روی رکوردها در فرم را ازبین می برد.اگرچه انتخاب Refresh در رکوردها نشانک ها را مورد تاثیر قرار نمی دهند. 


بدلیل اینکه اکسس یک نشانک یکتا برای هر رکورد در رکوردست یک فرم ایجاد می نماید زمانیکه یک فرم باز است !!!  ، یک نشانک فرم در رکوردست دیگر حتی زمانیکه دو رکوردست بر پایه یک جدول باشند کار نخواهد کرد !!!


Docmd.GoToRecord


استفاده از روش GoToRecord برای تبدیل رکورد مشخص شده به رکورد جاری در یک جدول باز ، فرم یا مجموعه نتایج کوئری ( پرس و جو ).



اگر پارامتر Type و Name آبجکت ( فرم فرضا ) خالی بگذارید روی آبجکت جاری انجام می گردد.


استفاده از روش GoToRecord برای تبدیل یک رکورد به رکورد جاری ( رکوردی که در آن قرار دارید یا کر سر در آن است ) یک فرم پنهان اگر فرم پنهان را در آرگومان های Type و Name آبجکت مشخص نمائید.


ایجاد رکورد خالی در جدول البته اگر کلیدی در جدول وجود نداشته باشد یا جای رکوردهایی که فیلدشان Primary key است و نمی تواند خالی باشد ( required آن Yes است )  پر شود که ارور نگیرید . فرضا یک جدول دارید که شماره پرونده فرد مذکور برای اقساط ثبت می گردد و جدول دیگری که جزئیات مربوطه یعنی  تعداد اقساط فرد با کد یونیک پرونده در آن ایجاد می شود با اکشن Docmd.GoroRecord !!!












Recordset.AbsoluePosition



Sets or returns the relative record number of a Recordset object's current record.


شماره رکورد مرتبط با  رکورد جاری شئ رکورد ست را بر میگرداند و Zero Based است یعنی از صفر شروع میشود چون در فرم کانتینیوس نمی توان ردیف ترتیبی گذاشت برخلاف آبجکت گزارش در نتیجه برای شماره دادن به رکوردها از AbsolutePosition استفاده می نمایند البته با استفاده از BookMark که می بایست BookMark فرم و رکوردست منطبق بشوند و بعد کار اضافه کردن را انجام داد.



یادآوری میشود : 


مقدار ویژگی AbsolutePosition از صفر شروع میشود تا رکورد کانت منهای یک ، اگر مقدار این پراپرتی مساوی یا  بالاتر از رکوردهای پرشده باشد خطا میدهد با بررسی پراپرتی RecordCount می توانید تعداد رکوردهای پرشده در شئ رکوردست را تعیین بنمائید. حداکثر تنظیم مجاز پراپرتی AbsolutePosition مقدار پراپرتی RecordCount منهای یک است.



Recordset.Bookmark property (DAO)

زمان ساختن یا باز کردن شئ رکوردست هرکدام از رکوردها یک بوک مارک یونیک یا واحدی را دارد و میتوان بوک مارک را برای رکورد جاری با تخصیص دادن مقدار این پراپرتی به متغیری ذخیره کرد.برای بازگشت سریع به آن رکورد در هر زمان بعد از ارکن به رکورد دیگری ،  پراپرتی بوک مارک شئ رکوردست به مقدار متغیر تنظیم میشود .

اگر این پراپرتی به مقدار رکورد حذفی تنظیم شود خطا یی حادث میگردد.


مقدار پراپرتی BookMark مشابه record number نیست اشتباه نشود.


Form.Bookmark property (Access)


می توان پراپرتی 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])
















ERROR 3021 : No current record



With frm.RecordsetClone
        Bookmark = frm.Bookmark.
        X = .AbsolutePosition + 1
    End With