[AccessD] Classes and WithEvengts was RE: Tags are so 1990s - was Re: Combobox.oldvalue displaytext?

jwcolby jwcolby at colbyconsulting.com
Mon Feb 9 11:56:52 CST 2009


 >I can almost see you coming down the connection cable when you read that.

ROTFL.

Naw.  I am long since past the point of caring if any given individual uses this stuff.  I just feel 
obliged to educate where I can.  It really is soooo easy, but it does take a mind shift to decide to 
use them and take the little bit of time to actually do the exercises and play with the pieces to 
understand how it all works.

John W. Colby
www.ColbyConsulting.com


Max Wanadoo wrote:
> Oh, no upping then.  Must be thinking of swans (Bet you don't get that
> connection Charlotte - to do with the British Monarch owning all swans).
> 
> The problem I have with classes is that (going on the ones I have created,
> say for example an Outlook Class to expose Outlook Properties) is that to
> use it I  have to declare  a container for the pointer, then I have to set
> the container to point to the class and then I can use the class properties
> and try to remember what done what.  So, I always found it easier to just go
> directly to the properties themselves.
> 
> Now then John - whoa back a bit - I can almost see you coming down the
> connection cable when you read that.  I do appreciate that classes have
> other uses, especially when a UDF is created and also for
> security/enforcement of business rules.  One rule changed in one place. And
> so on... 
> 
> So, I will follow your class with interest.
> 
> Thanks
> Max
> 
> 
> -----Original Message-----
> From: accessd-bounces at databaseadvisors.com
> [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Charlotte Foust
> Sent: 09 February 2009 16:02
> To: Access Developers discussion and problem solving
> Subject: Re: [AccessD] Tags are so 1990s - was Re: Combobox.oldvalue
> displaytext?
> 
> It's Sinking and RAISING, not uping.  LOL  Using classes isn't the only
> way to do things, it's just the efficient way.  Instead of writing the
> same code over and over, you embed that in a class and use the public
> interface of the class to handle its operations.  If you bind a, oh,
> let's say ... A combobox ... To a class then the class can specify the
> combobox's behavior, appearance, and the way it handles itself.  Want an
> oldvalue for a combobox?  Put some code and a public property into the
> class and voila, you have a combobox with an oldvalue.  More
> importantly, you have that whenever you bind a combobox to that class.  
> 
> I know a lot of people who never say the point in classes, but it's a
> bit like religion.  Once you convert, you want to persuade everyone else
> how wonderful your approach is!
> 
> Charlotte Foust 
> 
> -----Original Message-----
> From: accessd-bounces at databaseadvisors.com
> [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Max Wanadoo
> Sent: Monday, February 09, 2009 7:50 AM
> To: Access Developers discussion and problem solving
> Subject: Re: [AccessD] Tags are so 1990s - was Re: Combobox.oldvalue
> displaytext?
> 
> Ha!  It was in the 1990's I wrote it <g>.  I dont use tags now, but they
> might be useful for some purposes - I can think of one but won't go into
> that now.
> 
> The aim was to demonstrate easily, the use of control looping with the
> various control types and not the storage of variable values.
> 
> I also use classes but I am not a devotee like you John.  Sinking and
> Uping (or whatever the reverse of sinking is) or WithEvents is not
> something I have ever got into and have never ever had a need for this -
> I say that because I have not come across anything that I cannot do
> without using it/them.
> 
> I would be interest to follow a thread though.
> 
> Thanks
> Max
> 
> 
> On Mon, Feb 9, 2009 at 3:39 PM, <krosenstiel at comcast.net> wrote:
> 
>> I'd be interested in this. Doubt I'll understand it, but I'd be
> interested.
>> Karen Rosenstiel
>> Seattle WA USA
>>
>> ----- Original Message -----
>> From: "jwcolby" <jwcolby at colbyconsulting.com>
>> To: "Access Developers discussion and problem solving" < 
>> accessd at databaseadvisors.com>
>> Sent: Monday, February 9, 2009 6:12:52 AM GMT -08:00 US/Canada Pacific
>> Subject: [AccessD] Tags are so 1990s - was Re: Combobox.oldvalue 
>> display text?
>>
>> Guys,
>>
>> Using the tag value to store stuff is generally not a good solution, 
>> and never was (well, perhaps before classes). The disadvantages of the
> 
>> tag speak for itself, ONE location to store how much stuff? Packing, 
>> unpacking variables that you want to store there, overwriting data 
>> from the previous programmer, and the list goes on.
>>
>> Look, MS very kindly gave us Classes and WithEvents.
>>
>> Classes and Withevents is EASY. Classes and Withevents prepares you 
>> for programming in other platforms such as dotnet. Classes and 
>> withevents provide you with extremely powerful methods of handling 
>> repetitive programing. Classes provide you with encapsulation of code 
>> and data. If you are a programmer, all of these things should matter 
>> to you.
>>
>> If you can program Code Behind Form, if you can do things like the 
>> example code that Max so kindly provided, then classes are a tiny step
> 
>> that will increase your skill and ability an order of magnitude. 
>> AccessD has many developers using Classes and Withevents.
>> Perhaps they can speak up
>> with their opinions on the subject.
>>
>> If you want to learn how to do what Stuart was asking about using a 
>> single pair of classes (a form class and a combo class), speak up and 
>> I will start a thread on the subject. I will teach you how to do this 
>> stuff, step by step, and in just a few emails you too can be using 
>> classes and withevents.
>>
>> John W. Colby
>> www.ColbyConsulting.com
>>
>>
>> Max Wanadoo wrote:
>>> Hi Stuart,
>>> Here are two routines which you may care to look at. The first is to
>> store
>>> the value into the .TAG property of the control.
>>> The second just parses the controls.
>>> Might be of interes, might not, don't know, submitted as is - chuck 
>>> it if
>> no
>>> good.
>>> Regards
>>> Max
>>>
>>> Public Function pubFunUpdateTagData(frm As Form) On Error Resume 
>>> Next ' this puts the data into the tag before any changes are made
>>>
>>> Dim ctl As Control, z As Variant
>>> For Each ctl In frm.Controls
>>> With ctl
>>> Select Case .ControlType
>>> Case acTextBox ' this can hold numbers, strings and dates etc Select
> 
>>> Case varType(frm(ctl.Name)) Case 2, 3, 4, 5, 6 ' 
>>> int,long,single,double,currency frm(ctl.Name).Tag = 
>>> Val(frm(ctl.Name)) Case 7 frm(ctl.Name).Tag = CStr(frm(ctl.Name)) 
>>> Case 8 frm(ctl.Name).Tag = frm(ctl.Name) End Select Case acCheckBox 
>>> frm(ctl.Name).Tag = frm(ctl.Name) Case acComboBox Select Case 
>>> frm(ctl.Name).RowSourceType Case "Table/Query"
>>> frm(ctl.Name).Tag = Nz(frm(ctl.Name).Column(1)) 'MsgBox 
>>> frm(ctl.Name).Tag Case "Value List"
>>> frm(ctl.Name).Tag = Nz(frm(ctl.Name).Column(0, 0)) Case Else End 
>>> Select Case acListBox frm(ctl.Name).Tag = 
>>> Nz(frm(ctl.Name).Column(1), "") Case acOptionGroup frm(ctl.Name).Tag
> 
>>> = Nz(frm(ctl.Name), 0) End Select End With Next ctl
>>>
>>> exithere:
>>> Exit Function
>>> errhandler:
>>> MsgBox "Error in MCM_PeopleChanges.pubFunUpdateTagData: " & 
>>> Err.Number & vbCrLf & Err.Description Resume exithere End Function
>>>
>>> Private Function RebuildPersonsFlagsFormsControls(frm As Form, 
>>> lngPID As
>>> Long)
>>> On Error Resume Next
>>> Dim ctl As Control, strDesc As String Dim varSource As Variant, 
>>> varvalue As Variant, varType As Variant,
>> varName
>>> As Variant
>>> Dim varVisible As Variant
>>> strDesc = frm.Name
>>> With frm
>>> For Each ctl In frm.Controls
>>> varName = ctl.Name
>>> varType = ctl.ControlType
>>> Select Case varType
>>> Case acTextBox
>>> varSource = ctl.ControlSource
>>> varvalue = ctl.OldValue
>>> varVisible = ctl.Visible
>>> If Not IsNull(varSource) And Len(varSource) > 0 And _ Not 
>>> IsNull(varvalue) And Len(varvalue) > 0 And varVisible = True Then 
>>> Call mcmSetFlag(strDesc & ":" & varSource & ":" & varvalue, lngPID, 
>>> conFlagsForms) End If Case acComboBox varSource = ctl.ControlSource 
>>> varvalue = ctl.OldValue If Not IsNull(varSource) And Len(varSource) 
>>>> 0 Then Call mcmSetFlag(strDesc & ":" & varSource & ":" & varvalue,
> 
>>> lngPID, conFlagsForms) End If Case acCheckBox varSource = 
>>> ctl.ControlSource varvalue = ctl.OldValue If varvalue = True Then 
>>> Call mcmSetFlag(strDesc & ":" & varSource & ":" & varvalue, lngPID, 
>>> conFlagsForms) End If Case acOptionGroup varSource = 
>>> ctl.ControlSource varvalue = ctl.OldValue Call mcmSetFlag(strDesc & 
>>> ":" & varSource & ":" & varvalue, lngPID,
>>> conFlagsForms)
>>> Case acSubform
>>> Case acLabel
>>> Case acBoundObjectFrame
>>> Case acPage
>>> Case acPageBreak
>>> Case acCommandButton
>>> Case acCustomControl
>>> Case acRectangle
>>> Case acImage
>>> Case acTabCtl
>>> Case acLine
>>> Case acToggleButton
>>> Case acObjectFrame
>>> Case acListBox
>>> Case acOptionButton
>>> Case Else
>>> MsgBox "NewType found in RebuildPersonsFalgsSystemControls:",
>>> varType, varName
>>> End Select
>>> Next ctl
>>> End With
>>> End Function
>> --
>> 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
> 



More information about the AccessD mailing list