کلینیک فوق تخصصی اکسس ( کاربرد 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 . ( باز کردن رکوردست در این حالت )







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




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


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

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


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

 

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



۱۰بهمن ۱۴۰۱ : 

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



۱۰ بهمن ۱۴۰۱ : 

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




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

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

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




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




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

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



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




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






۱۵ بهمن ۱۴۰۱ : 

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

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












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













ساخت یک ADO Recordset



عبارات Dim ، Redim ، Static ، Private ، Public فقط متغیری را اعلام می کنند که به یک شئ اشاره دارد.تا زمانیکه از دستور Set برای اختصاص یک شئ استفاده نکنید، به هیچ شئ واقعی اشاره نمی شود ... یعنی حتما برای دسترسی به اشیاء باید حتما از Set استفاده شود.




Dim objRS As ADODB.Recordset

Set objRS = CreateObject("ADODB.Recordset")

Dim strSQL As String

strSQL = " SELECT * from table"

متد Open : دسترسی به رکوردها در جدول ، نتیجه یک پرس و جو ، یا به رکوردست ذخیره شده

objRS.Open strSQL, CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly

If Not (objRS.EOF And objRS.BOF) Then

Do While Not objRS.EOF 'Start looping through the records

'do something here with each record...

objRS.MoveNext

Loop

End If

نکته : همیشه شئ رکوردست را بعد از استفاده کردن ببندید تا منابع سیستم آزاد شود.

objRS.Close

شئ رکوردست را به Nothing تنظیم کنید تا بطور کامل آنرا از حافظه حذف کند.

Set objRS = Nothing




لطفا لایک و نظر دهی فراموش نشود








آرایه در اکسس



کد زیر از 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
















 

















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


از صفر شروع میشه یا Zero-Based پس برای اینکه نشان دهد  رکورد اول است باید عدد یک را به آن پراپرتی اضافه نمود 


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


مثال زیر از خاصیت AbsolutePosition برای رهگیری ( دنبال کردن ) پیشرفت لوپ که تمام رکوردهای رکوردست را میشمرد استفاده می نماید 


برگرفته شده از سایت آفیس 


()Sub AbsolutePositionX

Dim dbsNorthwind As Database
Dim rstEmployees As Recordset
Dim strMessage As String


("Set dbsNorthwind=OpenDatabase("Northwind.mdb

.AbsolutePosition only works with dynasets or snapshots'


Set 
(rstEmployees=dbsNorthwind.OpenRecordset("Employees",dbOpenSnapshot

With rstEmployees
 Populate Recordset'

MoveLast.
MoveFirst.

 Enumerate Recordset'

Do While Not .EOF 

 Display current record information. Add 1 to AbsolutePosition value'
. because it is zero-based"

strMessage = "Employee: " & !LastName & vbCr & "(record " & (.AbsolutePosition + 1) & _ " of " & .RecordCount & ")"

If MsgBox(strMessage,vbOKCancel)=vbCancel Then Exit Do 

MoveNext 
Loop. 
Close.
End With 
dbsNorthwind.Close 
End Sub

کپی کردن رکوردست در شیت اکسل ( بازیابی اطلاعات Extract )



برای کپی کردن محتویات شی رکوردست  (ADO یا DAO ) در گوشه ی بالائی سمت چپ رنج مشخص شده در شیت اکسل استفاده میشود 


public int CopyFromRecordset (object Data, object MaxRows, object

MaxColumns);


که Data همان متغیر نسبت داده شده بعنوان رکوردست است ، MaxRows ماکزیمم ردیف هایی که باید داخل شیت کپی شود و MaxColumns ماکزیمم تعداد فیلدهایی که میخواهیم در شیت اکسل کپی شود.


فرضا


Dim Rs As RecordSet

Dim Sql As String

("Sql="Select * From Query1

(Set Rs=CurrentDb.OpenRecordset(Sql


درقسمت پائین اول باید آبجکت Excel.Application ساخته شود بعد اضافه کردن WorkBook به اپلیکیشن و استفاده از پراپرتی های مربوطه مثل Range یا Cell


Dim Wk As Object

Set Wk=XlObj.WorkBook.Add

Wk.Sheets(1).Range("A3").CopyFromRecordset Rs


برای کپی کردن فیلدها هم میشود در همان ماژول اگر جدول یا کوئری پراپرتی کپشن داشته باشد و فارسی آن فیلد را درآن ذخیره کرده باشیم با یک لوپ زدن داخل فیلدهای رکوردست (Rs.Fields ) به Cell مربوطه در آن شیت اکسل کپی کرد مثل 


Dim Fld As Fields

.

("Wk.Sheets(1).Cells(2,i)=Fld.Properties("Caption

.



نمونه هائی از پراپرتی های مورد استفاده

xlsh.UsedRange.Borders.Weight = 2

xlApp.Application.Columns.AutoFit

xlApp.displayalerts = False

xlwk.saveas "D:\" & Me.Name & ".xlsx"

xlApp.Quit


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


لینک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

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

گرفتن ولیوهای مالتیپل فیلد یا کمبوهای چک باکس دار


برای گرفتن ولیوهای داخل MultipleFieldValue باید از رکوردست ۲ استفاده کرد و پل زدن به آن فیلد و پراپرتی Value آن  فرضا فیلد  Rooz داریم و چند آیتم در آن وارد شده 



۱-باز کردن رکوردست ۱ ( جدول )

۲-تنظیم رکوردست ۲ به فیلد رکوردست ۱ ( Rooz ) و پراپرتی ولیو  (Value)


البته برای لیست شدن کلیه ی تیک خورده ها باید Loop زده شود و استفاده از MoveNext برای رفتن به رکورد بعدی در آن رکوردست