Dynamic Variable Names - Syntax?

K

Ken Halley

How does one refer to a variable name using a variable within a variable
name??? For example, I want to perform a SQL query and use the results of
the query to determine which variable to assign a value to. Let's say I've
dimmed 12 variables based on the months called "featured_x_product" where x
is the month. I'd like to refer to the variable with something
like: featured_" & R("month") & "_product where R("month") is the from the
current row in the db. I don't know the correct syntax or method for doing
so. A full example is provided below. Thanks in advance for you help!

dim featured_jan_product
dim featured_feb_product
dim featured_mar_product
dim featured_apr_product
....

SELECT status, month from products where year='2004' AND
page='featured_products'

While not R.EOF
If R("status") = "sold" Then
featured_" & R("month") & "_product = "Sold Out!" // (choose the
variable based on the "month" value in the current row)
Else
featured_" & R("month") & "_product = "Buy Now!"
End If
R.MoveNext
Wend
 
R

Ray at

You can use the Eval function to do this, but I suggest not using Eval. It
makes for the most confusing and sloppy code you'll ever see.

How about using an array?

Dim featured_products(11) ''vbscrip arrays are zero based

If your storing your months in your database as "jan", "feb", "mar", and so
on, you'll have to deal with them with a select Case or some other thing.
Or, use a dictionary object or something. Let's try with a dictionary
object first.

Dim oDict
oDict.Add "jan", 0
oDict.Add "feb", 1
oDict.Add "mar", 2
oDict.Add "apr", 3
oDict.Add "may", 4
oDict.Add "jun", 5
oDict.Add "jul", 6
oDict.Add "aug", 7
oDict.Add "sep", 8
oDict.Add "oct", 9
oDict.Add "nov", 10
oDict.Add "dec", 11


While Not r.EOF
If r("status") = "sold" Then
featured_products(oDict(r("month"))) = "Sold out"
Else
''''etc.


My mind has been sleeping all week, so if this makes no sense or if I make
no sense, accept my apologies.

Ray at work
 
K

Ken Halley

Thanks Ray. The situation is a little more complicated than my example in
that I have two pieces of the variable name that I want to make dynamic, the
month and the category (see below). So the single array idea doesn't solve
it. Any other thoughts?

The variable format is: category_month_color

R("category") & "_" & R("month") & "_color = "#0000FF"
 
A

Aaron Bertrand - MVP

month and the category (see below). So the single array idea doesn't
solve
it. Any other thoughts?

Uh, a two dimensional array?

dim arrayName(<<<?>>>, 2)
arrayName(0, 0) = R("category")
arrayName(0, 1) = R("month")
arrayName(0, 2) = "#0000FF"

Dictionary objects can also hold complex types like arrays or even other
dictionary objects. I really think others are on the right track when they
suggest staying away from eval/exec... I just offered it as a possible
alternative.
 
R

Ray at

I strongly suggest you find another approach that involves arrays or
something else. If you write a page that is laden with Evals and Execs,
it's going to be impossible to understand a week later when you look at it.
This is just my opinion.

Ray at home
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,743
Messages
2,569,478
Members
44,898
Latest member
BlairH7607

Latest Threads

Top