Susan Harkins
ssharkins at gmail.com
Fri Nov 9 07:59:41 CST 2007
I'm storing the value and the page number, and both are correct and in synch. The value that the text box is actually the last item from the previous page, not the current page, so there seems to be some discrepancy between page number and value between the time those values are retrieved and the time the code actually displays the value. The values are correct, they're just being applied incorrectly. A.D.'s comment about using the wrong events might be the answer I need. Susan H. > A.D. > > An array can store a control just as easily. And yes, you need to be > aware > of what you are storing, since if you store a control a number of things > can > occur that can be confusing. For example, if you store a control, the > value > of the control can change between when you stored that control and when > you > use it, and in fact can continue to change as long as the collection is > stored. OTOH, if you store the control's VALUE then that value is > captured > in time, and while the control may continue to change, it's value back > when > it was stored will still be available. It really depends on what you need > to do, but you definitely need to keep this in mind. > > > John W. Colby > Colby Consulting > www.ColbyConsulting.com > -----Original Message----- > From: accessd-bounces at databaseadvisors.com > [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of A.D.TEJPAL > Sent: Friday, November 09, 2007 2:49 AM > To: Access Developers discussion and problem solving > Cc: A.D.TEJPAL > 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 > > -- > AccessD mailing list > AccessD at databaseadvisors.com > http://databaseadvisors.com/mailman/listinfo/accessd > Website: http://www.databaseadvisors.com