[AccessD] storing last item on the page

Susan Harkins ssharkins at gmail.com
Fri Nov 9 09:36:45 CST 2007


Small correction to the previous code I posted -- I had to move the 
Me.txtFooterFirst statement back to the PageHeaderSection event.

Susan H.

Private Sub PageFooterSection_Format(Cancel As Integer, FormatCount As 
Integer)
  'Me.txtFooterFirst = Me.txtHeaderFirst
  Me.txtHeaderLast = Me.txtFooterLast
  If Me.Pages = 0 Then
    col.Add Me.txtFooterLast.Value, CStr(Me.Page)
  End If
End Sub

Private Sub PageHeaderSection_Print(Cancel As Integer, PrintCount As 
Integer)
  Me.txtFooterFirst = Me.txtHeaderFirst
  Me.txtHeaderLast = col(Me.Page)
End Sub

Private Sub Report_Close()
  Set col = Nothing
End Sub



----- Original Message ----- 
From: "A.D.TEJPAL" <adtp at airtelbroadband.in>
To: "Access Developers discussion and problem solving" 
<accessd at databaseadvisors.com>
Cc: "A.D.TEJPAL" <adtejpal at gmail.com>
Sent: Friday, November 09, 2007 2:49 AM
Subject: Re: [AccessD] storing last item on the page


>    You have not given any reason as to why you wish to avoid array based 
> solution. Apparently, you are keen to implement collection based solution 
> as an alternative.
>
>    In your second post, describing the unsuccessful attempt to work out 
> collection based solution, you stated  "I'm clueless -- I have no idea 
> what's happening here." It is observed that the following factors are 
> contributing to the problem:
>
>    1 - You have landed into an interesting pitfall typical of collections. 
> Whenever a collection's Add method is used, you have to be careful as to 
> what exactly is being added. If you use the syntax  col.Add Me.MyControl, 
> it becomes a collection of control objects. For making it a collection of 
> control contents, you have to use Value property of the control.
>
>    2 - Page Footer is the appropriate place to grab a value from last 
> record of detail section and add it to the collection. You are wrongly 
> using Page Header for this purpose.
>
>    3 - You are using Page Footer to assign a value (from collection) to 
> txtHeaderLast. In view of the nature of forward time flow during report 
> execution, the effect of such assignment materializes only on the next 
> page. This defeats the very purpose of building a collection of last 
> values in forced first pass of formatting. The proper place for making 
> such an assignment is Page Header (preferably its print event, as by then, 
> building up of collection during prior formatting pass, is complete).
>
>    Sample code in report's module, as given below, demonstrates collection 
> based solution. All the four controls (TxtHeaderFirst, TxtHeaderLast, 
> TxtFooterFirst, TxtFooterLast) are unbound. In the sample code, "Title" is 
> the name of control in detail section whose first and last values are 
> required to be displayed in page header as well as footer. You can 
> substitute the name of actual control in your report, suitably.
>
> A.D.Tejpal
> ------------
>
> Code in report's module
> '==================================
> ' Declarations section
> Private col As New Collection
> '---------------------------------------------------
>
> Private Sub PageFooterSection_Format(Cancel _
>                    As Integer, FormatCount As Integer)
>
>    Me.TxtFooterLast = Me.Title
>
>    If Me.Pages = 0 Then
>        col.Add Me.Title.Value, CStr(Me.Page)   ' (A)
>    End If
>
>    ' Caution - There is a potential pitfall here.
>    '                In statement (A), while adding items to
>    '                collection, Value property of the control
>    '                in question MUST be used. Otherwise,
>    '                it will become a collection of control
>    '                objects (not the contents as intended),
>    '                leading to weird results.
> End Sub
> '---------------------------------------------------
>
> Private Sub PageHeaderSection_Format(Cancel _
>                    As Integer, FormatCount As Integer)
>    Me.TxtHeaderFirst = Me.Title
>    Me.TxtFooterFirst = Me.Title
> End Sub
> '---------------------------------------------------
>
> Private Sub PageHeaderSection_Print(Cancel _
>                        As Integer, PrintCount As Integer)
>    Me.TxtHeaderLast = col(CStr(Me.Page))
> End Sub
> '---------------------------------------------------
>
> Private Sub Report_Close()
>    Set col = Nothing
> End Sub
> '==================================
>
>  ----- Original Message ----- 
>  From: Susan Harkins
>  To: Access Developers discussion and problem solving
>  Sent: Wednesday, November 07, 2007 18:11
>  Subject: Re: [AccessD] storing last item on the page
>
>
>  I'm not convinced an array is necessary -- I've seen that solution. Have 
> you
>  seen the collection solution I tried and posted late last night?
>
>  Susan H.
> -- 
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com 




More information about the AccessD mailing list