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

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

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

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

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

باز کردن فرم بر اساس شرط خاص Open Form Using Where Condition

"'DoCmd.OpenForm "Employees", , ,"LastName = 'King


فرم Employee رو باز میکنه و رکوردهائی را نمایش میدهد که  LastName آن برابر King باشد دقت شود چون ولیوی آن نامبر نیست داخل تک کوتیشن یا بین '  '  گذاشته شده اگربجای LastName از آیدی یا کد پرسنلی استفاده شود قسمت آخر باید 
"ID=10" باشد اگر 10 عددی نباشد  باید   "'ID='10"  نوشته شود 

نمونه ی زیرین  دررویداد کلیک باتن  cmdShowOrders که  frmOrder را باز میکند و آنهائی را نمایش میدهد که کاستمرآیدی  آنها برابر کاستمرآیدی در فرم جاری ( Me  ) باشد و کاستمرآیدی در جدول Number است 

()Private Sub cmdShowOrders_Click
If Not Me.NewRecord Then
_ ,"DoCmd.OpenForm "frmOrder WhereCondition:="CustomerID=" & Me.txtCustomerID End If End Sub

حرکت بین رکوردها در رکوردست ( Move Between Records )


Docmd.GotoRecod , , acNext

Docmd.GotoRecod , , acFirs

Docmd.GoroRecord , , acPrevious

Docmd.GotoRecord , , acLast

رفتن به رکورد بعدی 

رفتن به رکورد اول 

رفتن به رکوردقبلی

رفتن به رکوردآخر 


Docmd.Runcommand accmdRecordsGoToNext 

استفاده از کامندهایی که در نوار منو در اکسس ۲۰۰۲ وقبل تر بود


زمانیکه روی رکورد اول هستید و باتن رفتن به رکورد قبلی  یا باصطلاح Previous را می فشارید اروری رایز میشود که برای جلوگیری از آن میتوان قبل از کد رفتن یه رکورد On Resume Next را نوشت یا گفت زمانیکه رکورد جاری بزرگتر از یک شد acPrevious انجام شود .

 

رفتن به رکورد خاص



DoCmd.SearchForRecord acDataForm, "frmOrders", acFirst, "[OrderID] = " & Me!txtOrderID

این متد قدرتمند تر از متد FindRecord هست که عملگرهای منطقی نظیر  >  <  And Or و Between رو ساپورت میکند ( ویژگی مهم ) 

اگر در سابفرم اشاره شود باید به آن فوکس شود با متد SetFocus 

Form_SubFormName.SetFocud 

گرفتن تعداد رکوردها در سابفرم Get RecordCount In Subform



Me.RecordsetClone.MoveFirst

Me.RecordsetClone.MoveLast

Msgbox Me.RecordsetClone.RecordCount


رفتن به رکورد اول در رکوردست سابفرم 

رفتن به رکورد آخر 

مشاهده ی باکس پیام حاوی تعداد رکوردها 


نشان دادن رکورد جاری  Me.CurrentRecord  از تعداد کل رکوردها در رکوردست سابفرم با استفاده از ایونت Current فرم



Text0=Me.CurrentRecord & "Of" & Me.RecordsetClone.RecordCount




خالی کردن تکست باکس های داخل فرم ( سینگل )


Dim  Ctl

For Each Ctl In Me.Controls 

If Ctl.ControlType=acTextBox Then      

Ctl=Null             

End If     

Next


126 - acAttachment
   
'108 - acBoundObjectFrame
   
'106 - acCheckBox
   
'111 - acComboBox
   
'104 - acCommandButton
   
'119 - acCustomControl
   
'103 - acImage
   
'100 - acLabel
   
'102 - acLine
   
'110 - acListBox
   
'114 - acObjectFrame
   
'105 - acOptionButton
   
'107 - acOptionGroup
   
'124 - acPage
   
'118 - acPageBreak
   
'101 - acRectangle
   
'112 - acSubform
   
'123 - acTabCtl
   
'109 - acTextBox
   
'122 - acToggleButton
Go to the top of the page
 

شمردن کاراکتر خاص در طول یک رشته

مثال  شمارش تعداد ro در رشته ی  x 

"X="Roturzrxro

اول در آوردن فاصله در طول رشته ی x اگر وجود داشته باشد 

  (""," ",Replace(x=


راه حل خیلی ساده استفاده از توابع Replace و Len 

(" ","Len(x)-Len(Replace(x,"ro

طول رشته ی X میشود 10 و طول رشته در تابع Replace (جایگزینی فاصله بجای ro ) میشود 8  

در نتیجه تفاضل آنها 2 میشود یعنی دو تا ro در رشته ی x وجود دارد.



ذخیره کردن مقدار و استفاده در کنترل فرم دیگر که پراپرتی دیفالت ولیو دارد


در فرم اول  در رویداد افترآپدیت تکست باکس 

Tempvars.Add "Var1",Me!Text0 

دستور باز شدن فرم دوم با 

Docmd.OpenForm "Form2"

قراردادن در دیفالت ولیوی فرم دوم بعد از Open شدن 

  نوشتن در رویداد Open فرم 

Me!Text0.DefaultValue=TempVars!Var1 




ریست کردن شماره ی ردیف در فرم سینگل


اگر AutoNumber باشد که باید فیلد حذف و دوباره اضافه شود 



عدم نمایش پیغام اکشن کوئری 

Docmd.SetWarnings False

ریست کردن ردیف در سینگل فرم 

Docmd.RunSql " Update Tbl Set Row=Row-1 Where  Row>" & Me!Row 

  Docmd.SetWarnings True