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

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

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

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

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

تابعی برای جمع آوری مقدار از رکوردست






Field2.IsComplex DAO.Property :

مقدار True(عددی غیر صفر) یا False(برابرصفر) را که نشان دهنده وجود یک دیتا تایپ چند مقداری است را باز می گرداند.... ( multi-valued data type )


Null=No Valid Data

named-argument


Join:

اگرExpression خالی باشد Set Result=Null

Static Values As New Collection

Set Records=CurrentDb.OpenRecordSet....

(dbOpenSnapShot)

CollValues Records , Delimiter , Result

Values.Add Result

Join=Result




CollValues:


ByRef Rec As DAO.RecordSet

ByRef Delimiter

ByRef Result





Dim SubRec As DAO.RecordSet

Dim Value As Variant

'If Rec.RecordCount>0 Then

While Not Rec.EOF

      Value=Rec.Field(0).Value

          If Rec.Fields(0).IsComplex Then

                 Set SubRec=Rec.Fields(0).Value

                 CollValues SubRec , Delimiter , Result

         ElseIf Nz(Value)="" Then

         ElseIf IsEmpty(Result)

              Result=Value

         Else

              Result=Result & Delimiter & Value

         End If

Rec.MoveNext

Wend

'Else

'Result=Null

'End If



















Expression,Domain,Criteria : 

Const SqlMask As String = "Select {0} From {1} {2}"
Const SqlLead As String = "Select "
Const SubMask As String = "({0}) As T"

Const FilterMask As String = "Where {0}"

Dim Sql As String
Dim SqlSub As String
Dim Filter As String


اگر Expression خالی باشد باید فکر چاره ای باشید و همینطور آرگومان های بعدی


اگر Select را در Domain( که نام جدول یا کوئری و یا زبان اس کیو ال ممکن است داخلش نوشته شده باشد ) یافت نتیجتا Domain یک عبارت اس کیو ال است.
If InStr(1, LTrim(Domain), SqlLead, vbTextCompare) = 1 Then 

در اینجا اگر در آرگومان Domain عبارت Select را بیابد متغیر SqlSub می شود جایگزین کردن Domain با {0}

SqlSub = Replace(SubMask, "{0}", Domain)
Else

در غیر اینصورت Domain نام جدول یا کوئری است.

SqlSub = Domain

End If
اگر آرگومان Criteria پر باشد 
If Trim(Criteria) <> "" Then 
ساخت یک شرط را خواهیم داشت . که عبارت داخل Criteria را بجای {0} در FilterMask قرار خواهد داد.
Filter = Replace(FilterMask, "{0}", Criteria)
End If 
حالا ساخت نهایی Sql که باتابع Replace تودرتو یا Nested Replace انجام گرفته و اگر اشتباهی در نوشتار نداشته باشیم خروجی یک عبارت Sql درست خواهد بود.
Sql = Replace(Replace(Replace(SqlMask, "{0}", Expression), "{1}", SqlSub), "{2}", Filter) 

یعنی درواقع در Replace های بالا جای ۲ ۱ ۰ عبارت یا رشته هایی که داخل آرگومان ها هستند  قرار داده شدِس.


Example : 


Expression="[First Name] & ' ' & [Last Name] & '<' & [Email Address] & '>'"

Domain="Tbl1"

Criteria="[Job]='" & [Job] & "'"


Change To Sql :


"Select [First Name] & ' ' [Last Name] & '<' & [Email Address] & '>' From Tbl1 Where [Job]=' & [Job] & '"



با قرار دادن Optional قبل از آرگومان ها می شود آنها را در تابع اختیاری کرد نه اجباری ( Required ).



وقتی دیتا تایپ فیلدی عددی نیست مثل نام بای  از تک کوتیشن بین آنها استفاده کنیم : 

"FirstName='" & Variable1 & "'"

اگر بنویسید :

"FirstName=" & Variable1 & ""

قطعا دچار خطا خواهید شد ، برای دیتا تایپ عددی نیازی به قرار دادن تک کوتیشن ها ندارید.









متد Database.OpenRecordSet




جهت پیشگیری از وقوع جرم، صرفا سازمان هلال احمر با همکاری کمیته امداد امام خمینی(ره)، سازمان بسیج مستضعفین، سازمان بهزیستی کشور، وزارت امور خارجه و سایر دستگاه‌های مرتبط موضوع ماده (۲) این قانون، اقدامات لازم در زمینه جذب، هدایت و توزیع کمک‌های غیردولتی داخلی و خارجی را با رعایت اصل هشتادم (۸۰) قانون اساسی انجام می‌دهند و هیچ شخص حقیقی یا حقوقی دیگری مجاز به تبلیغ و جمع آوری کمک‌های مالی مردمی نیست.





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



نوشتاری :

expression.OpenRecordset (NameTypeOptionsLockEdit)

آرگومان اول یعنی Name : 

منبع رکوردها برای رکوردست جدید.منبع می تواند نام جدول ، کوئری و یا عبارت Sql باشد.دیتا تایپ رشته یا String است.


آرگومان دوم یعنی Type : 

یک متغیر ثابت و نشاندهنده نوع رکودرستی است باز می شود.

یادداشت : اگر رکوردستی را در فضای کاری مایکروسافت اکسس باز می کنید و نوع آن را مشخص نکردید ، متد OpenRecordset یک رکوردست از نوع جدول ایجاد می کند در صورت امکان . اگر لینکی به جدول یا کوئری تعئین کنید ، این متد یک رکوردست نوع dynaset می سازد.


dbOpenDynaset

dbOpenSnapShot

dbOpenTable




بعضی آپشن ها ( آرگومان سوم ) :


dbAppendOnly : به کاربر اجازه میدهد که رکوردهای جدیدی به dynaset اضافه کند اما وی را از خواندن رکوردهای موجود جلوگیری میکند.

dbDenyWrite : دیگر کاربران را از تغییر رکوردهای رکوردست باز می  دارد.

dbReadOnly : رکوردست را بصورت فقط خواندنی باز می کند.

dbSeeChanges : یک خطای اجرا ایجاد می کند در زمان ویرایش داده ای توسط کاربر دیگر فقط در نوع dynaset.

dbSqlPassThrough : یک عبارات Sql به دیتابیس ODBC ارسال میکند فقط در حالت snapshot . ( باز کردن رکوردست در این حالت )







به گزارش خبرگزاری فارس از اصفهان؛ روابط عمومی وزارت دفاع در اطلاعیه‌ای اعلام کرد: شامگاه هشتم بهمن ۱۴۰۱ حوالی ساعت ۲۳۳۰ حمله ناموفق با استفاده از ریزپرنده به یکی از مجتمع‌های کارگاهی وزارت دفاع صورت گرفت و خوشبختانه با پیش بینی ها و تمهیدات پدافندی صورت گرفته یکی از آنها مورد اصابت پدافند هوایی مجتمع و دو فروند دیگر آنها در تله های پدافندی گرفتار و منفجر شدند.




ملیت فرح دیبا ایرانی نیست.


 در روایت است وقتی تلقین به بعضی مردگان خوانده می شود و او را تکان می دهند و می گویند: "اِسمَع!اِفهَم!" ملایکه میخندند که این زنده بود نفهمید الان چگونه بفهمد؟!!!️ 

خدا کند ما از این دسته نباشیم که ملائکه به ما بخندند. إن شاءالله تا زنده هستیم، بشنویم و بفهمیم.


یک جای دیگر که ملائکه می خندند، زن بی حجابی است که رویش را از نامحرم نمی گرفته و حالا مرده است. وقتی او را دفن می کنند، باید روی او ر ا باز کنند و عقب بزنند، قبر کن می گوید: "یک محرم بیاید"

 

اینجاست که ملائکه می خندند و می گویند: "این وقتی زنده بود، همه سر و صورت او را می دیدند و محرم و نامحرم نداشت، حالا می گویید محرم بیاید، رویش را عقب بزند؟!



۱۰بهمن ۱۴۰۱ : 

اسرائیل در پاسخ به انتقامی که جوانان فلسطینی نسبت به کشتار جنین توسط سربازانشان در روزهای اخیر از آنها گرفتند، در تحرکاتی عجولانه، پس از اقدام ناکام چندریزپرنده در ایران و انهدام آن‌ها، مواد غذایی و لوازم پزشکی صادراتی از ایران به سوریه را در بوکمال (نقطه مرزی سوریه و عراق) مورد حمله پهپادی خود قرارداد و اسباب بازیِ بچه‌های این شهر را فراهم کرد. در این حمله دو کفی مورد اصابت قرار گرفت و مابقی تریلی ها در مسیر دمشق در حال حرکت هستن. این حمله کشته و زخمی به همراه نداشت. منبع: آخرین خبر



۱۰ بهمن ۱۴۰۱ : 

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




سیما پروانه گهر، خبرنگار از ممنوعیت گریم برای گویندگان زن خبر در صداوسیما خبر داد.

سیما پروانه گهر در تویئتر خود نوشت:

از دو ماه قبل، گریمورهای بخش‌های خبری را مرخص و اعلام کردند گویندگان زن‬⁩ خبر باید بدون هیچ گونه آرایشی جلو دوربین بروند.




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




۱۵ بهمن ۱۴۰۱ : بر اساس اعلام وزارت خزانه داری آمریکا، شخصیت های تحریم شده شامال حسین شمس آبادی، علی رضا تنگسیری، ابوالفضل ناظری، محسن اسدی، محمدصادق حیدری موسی، ابوالفضل صالح نژاد، محمدرضا محمدی و ابوالقاسم والاگوهر هستند که به گفته وزارت خزانه داری آمریکا در هیات مدیره شرکت پرآور پارس حضور دارند.

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



۱۵ بهمن ۱۴۰۱ : شعارهای بیگانه هراسی هواداران اتلتیکو علیه کوشا دلشاد و «تروریست» خطاب کردن این مربی ایرانی باعث شد تا دلشاد کمتر از دو روز کار در تیم جدید، از سمتش استعفا بدهد.




وضع دختران و زنان در زندان های سازمان اطلاعات و امنیت کشوری طاغوت






۱۵ بهمن ۱۴۰۱ : 

وزارت خارجه آلمان در جدیدترین تلاش برای ایران‌هراسی، به شهروندان خود هشدار داد که ایران را ترک و از سفر به این کشور خودداری کنند.

به گزارش گروه بین‌الملل خبرگزاری تسنیم، وزارت امور خارجه آلمان مدعى «خطر جدی دستگیری‌های خودسرانه، بازجویی و حبس‌های طولانی‌مدت برای اتباع آلمانى» شده و در وب‌سایت خود نوشته است که این هشدار شامل شهروندان دوتابعیتی ایرانی نیز می‌شود.












طرح صیاد شیرازی با عنوان «آتش به جای خون» مطرح شد که البته با واکنش اعتراض‌آمیز شماری از فرماندهان ارشد رده‌های عملیاتی سپاه ازجمله محمدابراهیم همت مواجه شد. محسن رضایی براساس این نظر که شرایط و روابط ارتش و سپاه خیلی خاص است، همت را به‌دلیل مخالفتش در جلسه با صیاد شیرازی، به‌مدت ۴۸ ساعت در قرارگاه بازداشت کرد. رضایی خود روایت کرده با وجود آن‌که حق با همت بوده، اما نحوه برخورد و مخالفتش با فرمانده نیروی زمینی ارتش را به مصلحت ندانسته و در نتیجه، فرمان بازداشتش را صادر کرده است. همت نیز در مدت بازداشتش در سنگری در قرارگاه به نماز و عبادت و سکوت مشغول شد و پس از پایان زمان تعیین‌شده به کارهای معمول خود پرداخت.













آرایه در اکسس



کد زیر از Access vba programming کپی شده   که به تفسیر ساده تر آن پرداختیم.



Sub modArray_StatesInAnArray()

بارگزاری فهرستی از ایالات از جدول Customers داخل آرایه ای با اندازه مشخص ... با سایز ۲۰

 Const lngArraySize = 20

 Dim lngCounter As Long

 نیازمند این است که دیتا تایپ Variant باشد برای استفاده در لوپ ForEach

 Dim varAState As Variant 

 Dim strState(lngArraySize) As String

 Dim db As Database

 Set db = CurrentDb

 lngCounter = 0

 Dim rst As Recordset

متغیری که به Object یا شئ ای اشاره می کند ( بعنوان نشانگر ) را با Set  اظهار می کنند ... در کد زیر رکوردستی در حافظه موقت ایجاد شده و  درون آن داده های ستونِ [State/Province]  از جدول مشتریان ( بدون تکرار ) قرار می گیرد با شرط پر بودن این فیلد یعنی بدون Null ها .

 Set rst = db.OpenRecordset("SELECT DISTINCT [State/Province] " & _

 " FROM Customers WHERE [State/Province] IS NOT NULL", _

 dbOpenDynaset)

در کد زیر لوپی زده شده در رکوردست ( مجموعه داده )

 Do While Not rst.EOF

در اینجا بعلت جلوگیری از خطا (  بعلت اینکه تعداد داده های فیلد از سایز یا اندازه ۲۰ [تعداد ردیف ها ] بیشتر است یا ممکن است کمتر باشد )  از یک شرط استفاده شده.

 If lngCounter > lngArraySize Then

 'this would cause a problem

 Stop

 End If

در اینجا و با توجه به لوپ آرایه با داده های فیلد پر می شوند.

 strState(lngCounter) = rst![State/Province]

یک شمارشگر قرار داده تا در شرط بالا یعنی if بکار برده شود.... از DOEVENTS می توانید در اول کدها استفاده کنید تا اگر کدها را اشتباه نوشتید ( مثلا لوپ درجا بزند و پایانی نداشته باشد ) سیستم هنگ نکند

 lngCounter = lngCounter + 1

این خط ( MoveNext ) برای انتقال به رکورد بعد ( ردیف ) در رکوردست لازم است وگرنه همان داده اولین ردیف را پر می کند.

 rst.MoveNext

 Loop

در کد زیر لوپی میزند در آرایه strState و مقادیر را در صفحه immediate window نمایش میدهد ( Debug.Print ) که می توانید در صفحه ویژوال آنرا مشاهده کنید.

 For Each varAState In strState

 If varAState <> "" Then

چاپ در Debug که با Ctrl+G می توانید به صفحه مورد نظر ببرید.

 Debug.Print varAState

 End If

 Next

 Debug.Print "Lower bound : " & LBound(strState)

 Debug.Print "Upper Bound : " & UBound(strState)

حتما بعد از استفاده رکوردست را باید ببندید تا در حافظه جایی که اشغال کرده را آزاد کند.

 rst.Close

 Set rst = Nothing

 db.Close

 Set db = Nothing

End Sub



تمام آرایه ها در اکسس پایه صفر دارند یعنی از صفر شروع می شوند.

Dim Arr(2) As Variant

Arr(0)="A"

Arr(1)="123"

Arr(2)="01/08/1999"

?Arr(1)

123


امکانپذیراست ، آرایه ای داشته باشیدکه بتوان انداره و تعداد ابعادش را با استفاده از عبارت Redim تغییر داد.

Dim strState() As String

 lngArraySize = 8

 ReDim strState(lngArraySize)

این آرایه ها همچنین می توانند داده های موجود را هنگام تغییر اندازه با استفاده از کلمه کلیدی Preserve حفظ کنند.



عبارت Redim Preserve یک آرایه جدید ایجاد میکند و اجزاء آرایه قدیمی داخل آرایه جدید کپی می شوند... لذا فقط بعد یا اندازه تغییر کرده و منجر به از دست رفتن داده ها نخواهد شد .


For lcount = 0 To 5000000
        ReDim Preserve myText(lcount)
        myText(lcount) = lcount
    Next lcount


البته اگردر لوپ بجای lcount همان عدد 5 میلیون استفاده شود سرعتش بیشتر از زمانیست که از خود متغیر lcount استفاده کردیم.


در وهله اول به متغیر آرایه ای strState یک بعد میدهیم فرضا ۵۰ 

Do While Not rst.EOF

 strState(lngCounter) = rst![State/Province]

 lngCounter = lngCounter + 1

 rst.MoveNext

 Loop
















 

















متُد 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 دادگاه کیفری یک استان تهران برای دفاع از عنوان اتهامی تجاوز جنسی پای میز محاکمه خواهد رفت.


















نمایش رکوردهای انتخاب شده ی فرم در MsgBox یا جعبه پیام ویندوزی



استفاده از آبجکت RecordSetClone و لوپ در رکوردست 


در لینک زیر داکیومنت را مطالعه نمائید و در آخر مثالی در پیمایش در رکوردها داده شده 


office/vba/api/access.form.recordsetclone


تهیه یک کپی از رکوردهای فرم هایی که تحت جدول یا کوئری هستند و باز کردن در رکوردست برای پیمایش و دستکاری داده ( Manipulate ) یا پیدا کردن ( Find ) داده  خاص در آن 


.Bof

.Eof

.FindFirst

.NotMatch

.Edit Or .Add 

.Update


اگر از Edit برای ویرایش داده فیلدی استفاده کنید اگر رکوردست خالی  باشد  با ارور No Current Record  مواجه خواهید شد در نتیجه باید از روش Add استفاده بنمائید.



ساختن دوباره Primary keys



زمانیکه در جدول سینگلی که فیلد AutoNumber دارد رکوردی را حذف میکنید دیگر شماره های پشت سر هم را ندارید و می بایست چاره ای بیاندیشید یک راه این است که جدول را در نمای دیزاین باز کنید فیلد AutoNumber را حذف کنید جدول را ببندید و Compact Database را از Option  بزنید و دوباره فیلد را به جدول اضافه کنید. برای جداولی که بهم ربط دارند در پیوندها توصیه آفیس را اجرا کنید با عنوان Reset AutoNumber.


Add This Code on Form Close Event whether you add new record or delete, it will recreate the Primary Keys from 1 to Last record.This code will not disturb other columns of table.

کد زیر را به رویداد Close فرمتون اضافه کنید مان Add یا Delete کردن رکورد جدید دوباره Prinmary Keys را از یک تا آخرین رکورد می سازد.این کد فقط مربوط به اولین فیلد است و به سایر ستون های جدول اعمال نمی گردد 

Sub updatePrimaryKeysOnFormClose()

Dim i, rcount As Integer 
'Declare some object variables 
Dim dbLib As Database 
Dim rsTable1 As Recordset 
تنظیم کردم dbLib به دیتابیس جاری
'Set dbLib to the current database (i.e. LIBRARY)
Set dbLib = CurrentDb
باز کردن شئ رکوردشت برای جدول Table1 
'Open a recordset object for the Table1 table
Set rsTable1 = dbLib.OpenRecordset("Table1")
شمارش رکوردهای رکوردست 
rcount = rsTable1.RecordCount 
'== Add New Record ============================
اضافه کردن رکورد جدید البته از Edit استفاده شده می توانید از rs.MoveFirst استفاده کنید 
'Rs.MoveLast
'Rs.MoveFirst
'rCount=Rs.RecordCount

 For i = 1 To rcount 
With rsTable1 
.Edit 
.Fields(0) = i 
.Update 
'-- Go to Next Record ---
.MoveNext 
End With 
Next 
Set rsTable1 = rsTable1 
End Sub



alter-table-statement-microsoft-access-sql


Sql  : (AutoNumber Field Value )

CurrentDB.Execute "ALTER TABLE yourTable ALTER COLUMN myID COUNTER(1,1)"






کاربرد Move و عملکرد EOF و BOF


Recordset.Move


اگر Move را برای انتقال به رکورد قبل از First Record استفاده کنید به شروع فایل میرود . چنانچه رکوردست حاوی رکوردنباشد و خاصیت BOF آن True باشد استفاده از این متد برای برگشت به عقب باعث ارور میشود.


اگر Move را برای بعد از Last Record استفاده کنید نشانگر به انتهای فایل منتقل میشود چنانچه شامل هیچ رکوردی نباشد و EOF هم TRUE باشد قطعا خطا دریافت می کنید.


اگر هر کدام از خاصیت هایBOF یا EOF به TRUE تنظیم شده باشند و تلاش کنید از متد MOVE بدون Bookmark معتبر استفاده کنید خطا اتفاق خواهد افتاد


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











شمارش تعداد رکوردها در رکوردست




Forms!Orders.RecordsetClone.MoveLast 

MsgBox "My form contains " _ 

    & Forms!Orders.RecordsetClone.RecordCount _ 

    & " records.", vbInformation, "Record Count"


البته اول از MoveFirst استفاده کنید بعد MoveLast و در اینجا از پراپرتی RecordCount برای شمارش استفاده شده بکار ببر ید چنانچه  بکار بردن Dcount سخت تر یا دیر بازده است.


در مثال بالا به آخرین رکورد در مجموعه رکوردها که در فرم Orders است رفته و پیامی که حاوی تعداد رکوردها است را نمایش می دهد توسط باکس یا پنجره Msgbox



Dim rs as Dao.Recordset

Set rs=Me.RecordsetClone

With rs

.MoveFirst

.MoveLast

Msgbox .RecordCount

End With



Using a RecordsetClone is an easy way to manipulate records on a subform


 استفاده از RecordsetClone یک راه آسان برای جمع آوری رکوردها در سابفرم است دوستان .







ERROR 3021 : No current record



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



Concatenate Column


مثال در سایت زیر دقیق بخوانید و اجرا کنید ( هر آنچه نمی دانید را در google سرچ کرده و با یادگیری از اکسس لذت ببرید




Concatenate-Column-Values-from-Multiple-Rows-into-a-Single-Column-with-Access




مثالی دیگر 



Public Function ConcatRelated(strField As String, _ strTable As String, _ Optional strWhere As String, _ Optional strOrderBy As String, _ Optional strSeparator = ", ") As Variant


Dim rs As DAO.Recordset
Dim rsMV As DAO.Recordset
'Multi-valued field recordset
Dim strSql As String
SQL statement'
Dim strOut As String
Output string to concatenate to'
Dim lngLen As Long
Length of string'
Dim bIsMultiValue As Boolean
Flag if strField is a multi-valued field'

Initialize to Null'
ConcatRelated = Null 

(Set rs = DBEngine(0)(0).OpenRecordset(strSql, dbOpenDynaset
(Determine if the requested field is multi-valued (Type is above 100'
(bIsMultiValue = (rs(0).Type > 100


Do While Not rs.EOF
If bIsMultiValue Then 
For multi-valued field, loop through the values'
Set rsMV = rs(0).Value
Do While Not rsMV.EOF
If Not IsNull(rsMV(0)) Then
strOut = strOut & rsMV(0) & strSeparator
End If
rsMV.MoveNext
Loop
Set rsMV = Nothing
ElseIf Not IsNull(rs(0)) Then
strOut = strOut & rs(0) & strSeparator
End If
rs.MoveNext
Loop
rs.Close

Clean up'
Set rsMV = Nothing
Set rs = Nothing

Exit Function 

For the example above, you could set the  ControlSource of a text box to

=
"ConcatRelated("OrderDate", "tblOrders","CompanyID
[CompanyID] & 


or in a query:

"SELECT CompanyName, ConcatRelated("OrderDate
([tblOrders", "CompanyID = " & [CompanyID",
FROM tblCompany

ConnectionString در Access 2013




To reference ADO from Microsoft Visual Basic

  1. In Visual Basic, from the Project menu, select References....

  2. Select Microsoft ActiveX Data Objects x.x Library from the list


ADO Recordset Object 


objRecordset.Open 

source,actconn,cursortyp,locktyp,opt


CursorType







Set objRecordset= objConnection.OpenSchema(adSchemaTables)




(("Set rs = cn.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "TABLE
Do While Not rs.EOF
Debug.Print rs.Fields("TABLE_NAME").Value
rs.MoveNext
Loop
rs.Close