JWColby
jwcolby at colbyconsulting.com
Tue Jun 27 23:00:02 CDT 2006
Like on DatabaseAdvisor's web site? ;-) 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 William Hindman Sent: Tuesday, June 27, 2006 11:39 PM To: Access Developers discussion and problem solving Subject: Re: [AccessD] Advanced Unbound Form With Classes andCollectionsPart 3 Drew ...this is pretty good stuff ...do you intend to post it elsewhere as a single article? William ----- Original Message ----- From: "JWColby" <jwcolby at colbyconsulting.com> To: "'Access Developers discussion and problem solving'" <accessd at databaseadvisors.com> Sent: Tuesday, June 27, 2006 8:08 PM Subject: Re: [AccessD] Advanced Unbound Form With Classes and CollectionsPart 3 > Drew, > >>Public Function NewEnum() As Iunknown > > Is this a dedicated syntax thing or can I do this multiple times for > multiple collections in the same class? > > Public Function NewEnum1() As IUnknown > > Set NewEnum1=PeopleByFirst.[_NewEnum1] > > End Function > > Public Function NewEnum2() As IUnknown > > Set NewEnum2=PeopleByLast.[_NewEnum2] > > End Function > > 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 > DWUTKA at marlow.com > Sent: Tuesday, June 27, 2006 2:58 PM > To: accessd at databaseadvisors.com > Subject: [AccessD] Advanced Unbound Form With Classes and Collections > Part > 3 > > We have built a 'collection class' in our demo, the People Class. It > is an object representing all of the people in our database. We can > retrieve people from it either with their ID, or by their sort order > (first or last name sort). > > > > But why can't we do a For Next loop? I mean, our class represents > multiple Persons, so it contains all of the Person classes, why are we > forced to use an index or position to retrieve a person? > > > > Surprise, we're not. Though to get this capability requires a little > 'outside of the box' work. Here's what we need to do. First, we need > to add a function to our People class: > > > > Public Function NewEnum() As IUnknown > > Set NewEnum=PeopleByFirst.[_NewEnum] > > End Function > > > > The next portion is a little tricky in Access. We need to set this > procedure's 'id' to -4. In Visual Basic 6, you can do this by > clicking > Tools>Procedure Attributes, and then clicking the Advanced button. I > looked, couldn't find this in Access, but all's not lost. We can > still do this. Right click on the People class in our demo project's code window. > Select Export File. Save it somewhere. Now go and open that saved > file in Notepad. You'll see the code of our class with some extra > stuff thrown in. > What we need to do is add a line in our NewEnum function so it looks > like > this: > > > > Public Function NewEnum() As IUnknown > > Attribute NewEnum.VB_UserMemId = -4 > > Set NewEnum=PeopleByFirst.[_NewEnum] > > End Function > > > > Once this is done, let's test it. > > > > Create a form with a button, and put the following code behind it: > > > > Dim ps as Person > > Dim ppl as People > > Set ppl=New People > > For Each ps in ppl > > Debug.print ps.FullName > > Next > > Set ps=nothing > > Set ppl=nothing > > > > Now press the button and run our test code. Whalla! We can now loop > through the Person objects in our People Collection with a For Next loop! > > > > So now that we know about collections, and we have created the same > functionality of a collection with our own 'collection class', let's > go a step further, and make our Person class 'aware' of it's collection class. > We'll do this in the next part. > > > > Drew > > -- > 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 > -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com