[AccessD] Using Lateral Thinking To solve problems - This time it is Form Properties

jwcolby jwcolby at colbyconsulting.com
Thu Feb 26 09:34:43 CST 2009


Think laterally!  Look at the code I provided.

John W. Colby
www.ColbyConsulting.com


Max Wanadoo wrote:
> Ummm, don't pat yourself on the back tooooo soooon JC.  I tried all of the
> containers and documents and NOWHERE can I find where I can ADD a
> User-Defined Property to the Forms Collections.  Post some code that does
> that and then I will personally give you a pat on the back...
> 
> As I originally state, I don't think Access allows this other than for those
> declared items in the objects collection, ie Datbases, Tables, Indexes etc.
> Not Forms.  I would love to be wrong, but given that I seldom am, I won't
> hold my breath too long.
> 
> Max
> Laugh more than cry.  Smile more than frown.  Be generous in  spirit.  And
> always stand your round in the pub!
> 
> 
> 
> -----Original Message-----
> From: accessd-bounces at databaseadvisors.com
> [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of jwcolby
> Sent: 26 February 2009 12:57
> To: Access Developers discussion and problem solving
> Subject: Re: [AccessD] Using Lateral Thinking To solve problems - This time
> it is Form Properties
> 
> All you have to do is ask.
> 
> BTW, I discovered that getting a pointer to currentdb is expensive.  If you
> are going to do a lot of 
> dao manipulation of the dao.database object you should get a single pointer
> and then use that pointer:
> 
> function dbDao() as dao.database
> static db as dao.database
> 	if db is nothing then
> 		set db = currentdb
> 	endif
> 	set dbdao - db
> end function
> 
> The difference when repeatedly calling a function that needs the currentdb
> pointer can be quite 
> dramatic.
> 
> John W. Colby
> www.ColbyConsulting.com
> 
> 
> William Hindman wrote:
>> ...we need to get you in RANT mode a lot MORE often ...when you're through
> 
>> ranting, you make amends with gems like this :)
>>
>> William
>>
>> --------------------------------------------------
>> From: "jwcolby" <jwcolby at colbyconsulting.com>
>> Sent: Thursday, February 26, 2009 1:13 AM
>> To: "Access Developers discussion and problem solving" 
>> <accessd at databaseadvisors.com>
>> Subject: Re: [AccessD] Using Lateral Thinking To solve problems - This
> time 
>> it	is Form Properties
>>
>>> Max,
>>>
>>>> Couldn't find any way to manipulate custom properties in Forms.  Do you 
>>>> know a way?
>>> Don't say I never did nothing for ya.  Happy lateral thinking.
>>>
>>> There is this thing in Access called the "documents" collection. 
>>> Documents are something that the
>>> average joe knows nothing about and so are "well hidden" as I mentioned
> in 
>>> my previous email.  I
>>> mean they are right there, anyone can find them, anyone can iterate the 
>>> documents collections, the
>>> properties of a document etc but you have to dig down to that level to 
>>> actually see what is in the
>>> properties collection.
>>>
>>> currentdb.Containers(strContainer).Documents(strDocName)
>>>
>>> AFAICT .Containers represents the tabs in an A2003 database. strContainer
> 
>>> will be the name of some
>>> tab - Forms, Reports, Queries, Tables, etc.  .Documents() contains all of
> 
>>> the forms, reports etc.
>>> strDocName would be the name of a specific form, query etc.
>>>
>>> AFAICT documents are probably the textual representation of an object, IE
> 
>>> what you would get if you
>>> exported the object to a text file.  As such it doesn't have to be 
>>> "opened" in design view to
>>> manipulate, nor "Saved" afterwards.
>>>
>>> I haven't done extensive testing to see how many properties you can 
>>> create.  I suspect a BUNCH
>>> however, since these are collections like any other.
>>>
>>> To manipulate it:
>>>
>>>
> '---------------------------------------------------------------------------
> ------------
>>> ' Procedure : PropertyAdd
>>> ' Author    : jwcolby
>>> ' Date      : 2/26/2009
>>> ' Purpose   :
>>> '
>>> 'String container can be "Forms", "Reports" etc
>>> 'strDocName can be the name of any "document" in that container.
>>> '
>>>
> '---------------------------------------------------------------------------
> ------------
>>> '
>>> Function PropertyAdd(strContainer As String, strDocName As String, _
>>>                     strPrpName As String, PrpType As DataTypeEnum, varVal
> 
>>> As Variant)
>>> Dim db As DAO.Database
>>> Dim prpNew As Property
>>> Dim doc As Document
>>> On Error GoTo Err_PropertyAdd
>>>
>>>     Set db = CurrentDb
>>>     Set doc = db.Containers(strContainer).Documents(strDocName)
>>>     With doc
>>>         Set prpNew = .CreateProperty(strPrpName, PrpType, varVal)
>>>         .Properties.Append prpNew
>>>         .Properties.Refresh
>>>     End With
>>>     Debug.Print 
>>> db.Containers(strContainer).Documents(strDocName).Properties(strPrpName)
>>>
>>> Exit_PropertyAdd:
>>>     On Error Resume Next
>>>     Exit Function
>>> Err_PropertyAdd:
>>>     Select Case Err
>>>     Case 0      '.insert Errors you wish to ignore here
>>>         Resume Next
>>>     Case Else   '.All other errors will trap
>>>         Beep
>>>         MsgBox Err.Description
>>>         Resume Exit_PropertyAdd
>>>     End Select
>>>     Resume 0    '.FOR TROUBLESHOOTING
>>> End Function
>>>
>>>
> '---------------------------------------------------------------------------
> ------------
>>> ' Procedure : PrpGet
>>> ' Author    : jwcolby
>>> ' Date      : 2/26/2009
>>> ' Purpose   :
>>>
> '---------------------------------------------------------------------------
> ------------
>>> '
>>> Function PrpGet(strContainer As String, strDocName As String, strPrpName 
>>> As String) As Variant
>>> On Error GoTo Err_PrpGet
>>>
>>>     PrpGet = 
>>>
> CurrentDb.Containers(strContainer).Documents(strDocName).Properties(strPrpNa
> me)
>>> Exit_PrpGet:
>>>     On Error Resume Next
>>>     Exit Function
>>> Err_PrpGet:
>>>     Select Case Err
>>>     Case 0      '.insert Errors you wish to ignore here
>>>         Resume Next
>>>     Case Else   '.All other errors will trap
>>>         Beep
>>>         MsgBox Err.Description
>>>         Resume Exit_PrpGet
>>>     End Select
>>>     Resume 0    '.FOR TROUBLESHOOTING
>>> End Function
>>>
>>> In the debug window:
>>>
>>>
>>> AddProperty "forms","frmDemoCtls","JWCs test property",dbText,"jwc"
>>>
>>> ?PrpGet("forms","frmDemoCtls","jwcs test property")
>>> jwc
>>>
>>>
>>> Enjoy!
>>>
>>> John W. Colby
>>> www.ColbyConsulting.com
>>>
>>>
>>> Max Wanadoo wrote:
>>>> Ha! John,  Been there. Looked at them yesterday - but I love the fact 
>>>> that
>>>> you are now also thinking Laterally!
>>>>
>>>> Couldn't find any way to manipulate custom properties in Forms.  Do you 
>>>> know
>>>> a way?
>>>>
>>>> I could only find custom properties on DB, Tables, Indexes, etc but not
>>>> forms.
>>>>
>>>> Max
>>>> Laugh more than cry.  Smile more than frown.  Be generous in  spirit. 
>>>> And
>>>> always stand your round in the pub!
>>> -- 
>>> 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