[AccessD] Feeding an paramarray to a paramarray

jwcolby jwcolby at colbyconsulting.com
Wed Mar 12 10:49:27 CDT 2008


Drew,

LOL.

>Ya learn something new everyday.

Would you speak into the microphone please...

The "solution" did the trick, but at the expense of eliminating the ability
to pass in multiple arguments to SecondParamfunction.  It is the keyword
ParamArray that allows the passing in of multiple arguments.  It is often
useful to have two functions, BOTH of which have param arrays, and be able
to call either one directly, but also call one from the other.  It is the
"call one from the other" that is not possible if both have paramarrays.

ParamArrays are indeed a neat trick and one I use all of the time.  What
would be REALLY cool would be to be able to pass into TWO paramarrays but
that is syntactically impossible - there is no way to denote where
parameters aimed at one array ends and where the parameters aimed at the
next array begins.  The language could be expanded to allow a semicolon to
denote the end of one list and the beginning of the next but that doesn't
currently exist.

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 Drew Wutka
Sent: Wednesday, March 12, 2008 11:14 AM
To: Access Developers discussion and problem solving
Subject: Re: [AccessD] Feeding an paramarray to a paramarray

Ya learn something new everyday.  Never even knew about the ParamArray
option.  Pretty slick.  Anyhow, I whipped out my trusty 'solve all my
problems' tool, otherwise known as Google, and on the second page of hits
for ParamArray, I found this:

http://support.microsoft.com/kb/157351

Sure enough, changing this:

Function TestParamArray(strSomething As String, ParamArray tmpParams() As
Variant) Dim varMember For Each varMember In tmpParams
    Debug.Print strSomething & " " & varMember
    SecondParamFunction tmpParams
Next
End Function
Function SecondParamFunction(ParamArray tmpParams() As Variant) Dim
varMember For Each varMember In tmpParams
    Debug.Print varMember
Next
End Function

To this:

Function TestParamArray(strSomething As String, ParamArray tmpParams() As
Variant) Dim varMember For Each varMember In tmpParams
    Debug.Print strSomething & " " & varMember
    SecondParamFunction tmpParams
Next
End Function
Function SecondParamFunction(ByVal tmpParams As Variant) Dim varMember For
Each varMember In tmpParams
    Debug.Print varMember
Next
End Function

Did the trick!

Drew

-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of jwcolby
Sent: Wednesday, March 12, 2008 5:23 AM
To: 'Access Developers discussion and problem solving'
Subject: [AccessD] Feeding an paramarray to a paramarray

Paramarrays are very useful.

function ListGrpMembers(ParamArray GrpMembers() as variant) dim varGrpMember
	for each varGrpMember in GrpMembers
		debug.print varGrpMember
	next varGrpMember
end function

ListGrpMembers "John", "Mary", "Robbie", "Allie"

Paramarrays allow you to feed a variable number of values into a function,
and then easily manipulate the array that they are placed in using a for
each iterator.

The problem lies if you then need to feed that array off to another
function.

function LogGrpMembers(Paramarray GrpMembers() as variant) end function

Using a function as shown above doesn't work.  If you pass the
GrpMembers()
array assembled in ListGrpMembers into LogGrpMembers you get a runtime
error.

I have "solved" this problem by unpacking the array into a collection and
passing the collection into the next function.  

function LogGrpMembers( GrpMembers as collection) end function

function ListGrpMembers(ParamArray GrpMembers() as variant) dim varGrpMember
dim colGrpMembers as collection
	set col
	for each varGrpMember in GrpMembers
		colGrpMembers.Add  varGrpMember
	next varGrpMember
	LogGrpMembers colGrpMembers
	
end function

While that works, it is cumbersome and there are times where you would
really like the second function to be a ParamArray as well, perhaps so that
it can be called directly if required.

Am I missing something?  Is there a syntax for passing a paramarray into
another paramarray?

John W. Colby
Colby Consulting
www.ColbyConsulting.com 

--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com The information contained in this
transmission is intended only for the person or entity to which it is
addressed and may contain II-VI Proprietary and/or II-VI Business Sensitive
material. If you are not the intended recipient, please contact the sender
immediately and destroy the material in its entirety, whether electronic or
hard copy. You are notified that any review, retransmission, copying,
disclosure, dissemination, or other use of, or taking of any action in
reliance upon this information by persons or entities other than the
intended recipient is prohibited.


-- 
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