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

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

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

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

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

Report Properties رکورد خالی



در گزارش برای ایجاد ردیف دو نوع Running Sum وجود دارد یکی OverAll بصورت کلی  و دیگری OverGroup  جمع در هر گروه و اگر مقدار گروه عوض شد دوباره از یک شروع میشود 



You can create a text box with a running sum over group and control source of =1. Name the text box txtGrpRunSum. The text box does not need to be visible.




MoveLayout: if False, prints on top of what was printed last;
NextRecord: if False, prints the same record again;
PrintSection: if False, doesn't print any data.


سه تا از پراپرتی های گزارش زمان استفاده از پراپرتی NextRecord در Detail_OnPrint اگر False باشد همان رکورد را پرینت میکند در صفحه ( یعنی رکورد تکرار میشود ) . اگر PrintSection نیز False باشد هیچ داده ای پرینت نمی شود.



در PageHeader_OnFormat می توان متغیری را تعریف  و مقدار آنرا False کنیدبرای NextRecord. و متغیری هم برای شمارش لاین ها ولی در اینجا مقدارش به صفر تنظیم و در OnPrint دیتیل اگر PrintCount  برابر یک بود لاین هم افزایشی میشود.


متغیرها باید در خارج از Event تعریف شده باشند 


مثال زیر نشان می دهد چگونه می توان از پراپرتی PrintCount استفاده نمود تا مطمئن شوید مقدار کنترل OrderAmount فقط یکبار به running total اضافه شده.


Running Total می تواند متغیر public باشد یا نام یک کنترل unbound که هر بار که section پرینت میشود به آن اضافه شود 



Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
If PrintCount = 1 Then 
RunningTotal = RunningTotal + OrderAmount
End If
End Sub

هر بار که OnPrint  اجرا میشود PrintCount نیز افزایشی میشود و همانطور که سکشن بعدی پرینت می شود ( در صفحه منظور نه ارسال به پرینتر !!! ) ، اکسس پراپرتی PrintCount را به 0 بر می گرداند یا باصطلاح Reset میشود.


نمونه ای از بکارگیری NextRecord و PrintSection اگر دومی استفاده نشود چه اتفاقی خواهد افتاد ؟ 




در زیر تعریف شده که در هر پیج 22 لاین نمایش داده شود و بقیه به پیج های بعدی منتقل شود.



متغیر MaxL تعریف شده یعنی حداکثر لاین در Page 

متغیر C تعریف شده یعنی Count کوئری که در گزارش فیلتر شده فرضا از OpenReport در فرم Launch شده.و در رویداد Open گزارش قرار داده شده.


OnPrint:

If PrintCount=1 Then L=L+1



Option Compare Database
Option Explicit
Const MaxL As Integer = 22 'Lines
Private C As Integer 'Total
Private Sub Report_Open(Cancel As Integer) 
' get total record count
C= DCount("*", "qryData") 
End Sub


متغیری باید تعریف کرد که در هر بار مقداری افزایشی به آن نسبت داده شود مثل L


فرضا در کوئری 28 رکورد نمایش داده می شود در حالیکه گفته شده  تنها 22 رکورد ( MaxL ) در هر Page باشد.


زمانیکه L Mod 22 برابر صفر شود و اگر L مخالف RLines شود PageBreak که در سکشن دیتیل قرار داده True  شده و بقیه رکوردها به صفحه بعد میرود.


محاسبه تعداد کلی خطوط : 


'calculate the total number of lines 'required.
RLines = ((C \ L) + 1) * L



زمان نمایش رکوردهای تکرار شده تا پایان صفحه که پر میشود می توانید پراپرتی ForeColor کنترل ها را به VbWhite تغییر داد.



برای نمایش تعداد 20 رکورد از هر گروه در گزارش می توانید شرطی در کوئری بگذارید.


سه فیلد State ، Town ، Pop از جدول MyTable را انتخاب کرده البته 20 رکورد از هر State  در گروپ گزارش می آید.

SELECT  State, 
        Town, 
        Pop 
FROM    MyTable 
WHERE   Pop In 
        (SELECT Top 20 Pop 
        FROM    MyTable As T2 
        WHERE   T2.State = MyTable.State 
        ORDER BY Pop Desc