[AccessD] Ambiguous Name

Stuart McLachlan stuart at lexacorp.com.pg
Wed Sep 21 17:18:24 CDT 2011


Read once, write many variable:

Static Function mySafeGlobal(Optional invalue as Variant) as Variant
Dim store as Variant
If not isempty(store) then
    mySafeGlobal = store
    Exit Function
End if
If not ismissing(invalue) then
    store = invalue
     mySafeGlobal = store
End if

End Function

-- 
Stuart


On 21 Sep 2011 at 13:25, Kenneth Ismert wrote:

> All,
> 
> Ken Ismert:
> > ...
> > The question remains: is there any way to enforce safe global value
> > modification in VBA, except by employing Gustav's discipline?
> >
> 
> Thinking about this further, I have come up with two approaches that
> could work:
> 
> 1. Use messaging. In this scenario, no global parameters are kept at
> all. All objects communicate by sending messages to one another in a
> standardized way. The sender is always identified. Receivers can then
> decide who to ignore, and who to listen to.
> 
> 2. Use a listener 'static class'. Some object requests to be the
> 'speaker', first-come, first-served. Once accepted, only the speaker
> can set parameters for the rest. Sample code:
> 
> Option Explicit
> 
> ' module MTestListener
> Private Const ML_ERR_SPEAKER As Long = -2147213504 ' 8000 +
> vbObjectError Private mlPtr As Long     ' ObjPtr(Nothing) = 0
> 
> Public Sub ListenToMe(ByVal rSpeaker As Object)
>     If mlPtr = 0 Then
>         ' setting mlPtr does not increment the object's
>         ' reference count, so the object can close normally
>         mlPtr = ObjPtr(rSpeaker)
>     Else
>         Err.Raise ML_ERR_SPEAKER, "MTestListener.ListenToMe", _
>             "Sorry, listening to Object at " & mlPtr
>     End If
> End Sub
> 
> Public Sub IgnoreMe(ByVal rSpeaker As Object)
>     If ObjPtr(rSpeaker) = mlPtr Then
>         mlPtr = 0
>     End If
> End Sub
> 
> Public Sub SetParameter(ByVal rSpeaker As Object, sName As String,
> vValue As Variant)
>     ' must match speaker, and not be nothing
>     If (ObjPtr(rSpeaker) = mlPtr) And (mlPtr <> 0) Then
>         ' set global parameter sName = vValue
>     Else
>         Err.Raise ML_ERR_SPEAKER, "MTestListener.SetParameter", _
>             "Sorry, listening to Object at " & mlPtr
>     End If
> End Sub
> 
> Public Function GetParameter(sName As String) As Variant
>     ' anybody can get a parameter
> End Function
> -- 
> 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