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

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

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

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

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

متُد Application.currentdb برای دسترسی (به) یا دستکاری ( اعمال تغییرات ) شئ در دیتابیس


برای دستکاری ساختار دیتابیس و داده هایش از Visual Basic بایستی از مدل DAO استفاده نمائید.

متُد CurrentDb راهی را برای دسترسی دیتابیس جاری از طریق Visual Basic بدون داشتن اطلاعات نام دیتابیس فراهم می سازد.بعد از تعیین و اشاره یک متغیر به دیتابیس جاری یا فعال می توان به سایر اشیاء و مجموعه ها در سلسله مراتب DAO هم دسترسی پیدا کرد و هم آنها را دستکاری نمود. ( سلسله مراتب DAO در زیر بیان شده و طریقه دسترسی به اشیاء مثل فرم و جدول و کوئری و غیره) 






Dim db As Dao.DataBase

Set db=CurrentDb


طریقه دسترسی چیست ؟؟؟؟ در بالا تعریف متغیر به Database و Set کردن آن .... فرض کنید یک کلاس ماژول نوشتید تنها راه دسترسی به آن استفاده از Set است... بعدها با مطالعه بیشتر خواهید فهمید.


فرضا می خواهید به رکوردست دسترسی پیدا کنید و جداول یا کوئری را در آن باز کرده و ویرایش کنید ، می بینید که Recordset در زیرمجموعه یا سلسله مرتبه پائینتری از DataBase قرار دارد ( تصویر بالا )  لذا باید اول به دیتابیس ارتباط بزنیم و بعد رکوردست ، So نمی توان مستقیم بدون تعریف متغیر به database و بدون این Dao که به Access اتَچ است ارتباط بگیریم 


Dim db As Dao.Database

Dim rs As Dao.Recordset

Set db=CurrentDb

Set rs=db.OpenRecordset("Select * From ZeroTbl")

Rs.Close

'Set Rs=Nothing



پس تعریف متغیر و نسبت دادن به اشیاء و Set نقش مهمی را ایفا می کنند.در بالا جدول ZeroTbl در یک شئ رکوردست که اجازه اَپند یا ویرایش یا حذف را می دهد باز شده و چون در حافظه موقت ، فضایی را  اشغال می کند حتما بعد از دستکاری داده ها باید آن فضا را خالی نمود.... از Add ، Edit و Delete و سپس Rs.Update استفاده می نمایند برای اضافه ، ویرایش و یا حذف رکورد یا ردیف مورد نظر یا ردیف ها !!! در جریان باشید اگر No Current Record برایتان Raise یا شلیک شد دوست من مُصِّر نباش قرار نیست معجزه ای صورت بگیره مشکل از شماست نه اینکه دستتون اَتَک نداره ... نه !!! بلکه شما در حال ویرایش رکوردستی هستی که اصلا رکوردی نداره جانَم   ) 


اگر برای شما مطلب مفید بود خواهشا در نظر سنجی شرکت نُمائید با تشکر و در پناه حق 







تیر ۱۴۰۱ ... فقط دلجوئی و اظهار تاسف  : 


سیدمحمد شاهچراغی استاندار و  جمعی از مسئولان استان قم با حضور در شهرک دامشهر، ضمن بررسی موضوع حمله سگ‌های ولگرد به اهالی این شهرک، با خانواده‌های دو کودک جان‌باخته بر اثر حمله این سگ‌ها در هفته اخیر دیدار و از آنان دلجویی کرد.


تیر ۱۴۰۱ : 


به گزارش فارس کمپین «برخورد با هتک حرمت امام جعفر صادق (ع) در سالن عروسی در اراک» در سامانه فارس من ثبت شد.
 مخاطبان کمپینی با عنوان «برخورد با هتک حرمت امام جعفر صادق (ع) در سالن عروسی غیرمجاز اراک» در سامانه «فارس من» ثبت کردند.
متن کمپین به شرح زیر است:
در زمین‌های کشاورزی اراک منطقه کرهرود یک تالار باغ به صورت غیرمجاز ساخته شده است که حکم تخریب آن در سال ۹۳ صادر شد، ولی به دلایل نامعلوم تاکنون اجرا نشد.
در شب شهادت امام جعفرصادق (ع ) در این مکان، مراسم عروسی با سر و صدای زیاد و پخش آهنگ‌های مبتذل برگزار شد، که باعث ناراحتی قشر مذهبی منطقه شده است.
به گزارش فارس با توجه به جریحه‌دار شدن احساسات دوستداران اهل بیت(ع)در این منطقه، امضاکنندگان این کمپین خواستار اجرای حکم تخریب این تالار باغ که مرکز فساد در این ناحیه است، هستند.


دختر جوان به نام المیرا در طرح شکایت خود گفت:«برای انجام تست بازیگری به دفتر سینمایی این کارگردان رفته بودم که مورد تعرض او قرار گرفتم و مدتی بعد متوجه شدم که باردار هستم.»

در حالی که نتیجه آزمایش دی ان ای در پزشکی قانونی نشان می داد که پدر فرزند، کارگردان مشهور است؛ این کارگردان به زودی در شعبه 12 دادگاه کیفری یک استان تهران برای دفاع از عنوان اتهامی تجاوز جنسی پای میز محاکمه خواهد رفت.


















کار با رکوردست


لینکhttps://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/recordset-object-dao


از شی رکوردست برای دستکاری داده در دیتابیس در سطح رکورد استفاده میشود ( جدول یا کوئری ) 


چند تا تیپ داره یکیش SnapShot هست که ReadOnly است و قابل Edit نیست و بعدی Dynaset که Read و Write را دارد برای باز کردن رکوردست در دیتابیس جاری از متد OpenRecordset از CurrentDb استفاده میشود فرضا میخواهیم جدول یک را در رکوردست باز کنید 

***اول اظهار متغیری بعنوان رکوردست 

Dim Rs As DAO.Recordset ( اگر Object Library تیک نخورده باشد از Refrences ارور میدهد ).

***دوم ایجاد آن در بافر 

(Set Rs=CurrentDb.OpenRecordset("Table1",dbOpenDynaset

-برای دستکاری دیتا در رکورد : برای دیلیت از Rs.Delete  برای اضافه کردن از Rs.Add و برای ویرایش از Rs.Edit استفاده می کنیم و حتما باید بعد از اینها Rs.Update نوشته شود.

-برای رفتن به رکورد اول ، بعدی ، قبلی و آخر به ترتیب از

 MoveLast MovePrevious MoveNext MoveFirst استفاده می کنیم بیشتر برای لوپ زدن داخل رکوردست استفاده میشود.

***سوم  بعد از اتمام کار بستن رکوردست با Rs.Close و خالی کردن بافر از آن با Nothing

Rs.Eof  مقداری رو میده از نوع Boolean که آیا موقعیت رکورد جاری بعد از رکورد آخر هست یا خیر وقتی به آخرین رکورد برود و زمان رفتن به رکورد بعد از آن که چیزی نیست ارورمیدهد که به انتهای رکوردست رسیده  زمان خاتمه به حلقه هم از آن استفاده میشود مثل 

Do While Not Rs.Eof

("Debug.Print Rs.Field("FldName

Rs.MoveNext

Loop


-از Rs.Move برای انتقال پوزیشن رکورد جاری در شی رکوردست استفاده میشود که پارامتر اول آن Rows است 

-از Rs.AbsolutePosition برای گرفتن شماره رکورد در آن شی  رکوردست استفاده می شود.

-از Rs.FindFirst برای پیدا کردن مقدار یا عبارتی در رکوردست استفاد میشود و چک کردنش با پراپرتی بعدی یعنی NoMatch هست مثل 

     برای عدد Rs.FindFirst "FldName1=" & Me.txtValue

 برای تکست "'" & Rs.FindFirst "FldName1='" & Me.txt1


-از Rs.NoMatch برای تطابق داده ی پیدا شده با استفاده از  FindFirst استفاده میشود یعنی اگر توسط FindFirst پیدا شد چه عملی انجام دهد 

"'"  & Rs.FindFirst "FieldName='" & Me.TxtSearch 

If Rs.NoMatch=False Then 

 DO Something  ' 

End If 

- از Rs.RecordCount برای شمارش رکورد در رکوردست باز شده استفاده میکنیم البته اول باید به رکورد آخر برویم و بعد رکورداول و بعد رکوردکانت را استفاده کنیم تا درست عمل نماید.

- از Rs.BookMark بعنوان نشانگری  که به طور یونیک رکورد جاری را در شی رکوردست مشخص میکند استفاده میشود ... فرضا در ورد بعبارت ساده و قابل فهم  ، عباراتی را بعنوان بوک مارک در نظر می گیرید  ، زمان استفاده به آن صفحه ای که هست می رود . اینجا هم همینطور است فرضا در فرم رکوردی را اضافه میکنید و با استفاده از FindFirst و NoMatch و برابر قرار دادن BookMark فرم و BookMark  رکوردست میتوان به همان  رکورد در سابفرم رفت چون دیتای جدید بعد از رکورد آخر می آید 


برای ایجاد RowNumber یا LineNo  در فرم  کانتینیوس نه سینگل هم بوک مارک رکوردست با بوک مارک فرم برابر میشود و از AbsolutePosition باضافه ی یک استفاده میکنیم برای برگشت مقدار تابع فرضا 


(Function ROWNUM(FRM AS FORM

 اگر کارنت رکورد فرم مخالف رکوردکانت رکوردست بود بوک مارک رکوردست برابر بوک مارک فرم شود

ROWNUM=RS.ABSOLUTEPOSITION+1

END IF

END FUNCTION

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