Arg, me mateys!
This is the most creative way to make a dropdown list from a database query EVER. arg1 is a result set, arg2 is the name of the field from which to get the value, and arg3 is a very special formatted string containing a list of fields from which to retrieve information to be displayed in the option tags. I had to investigate when I first encountered code that looked like this:
<% Set dropdown9 = New DropClass dropdown9.makeList DBData1.data, "nName_ID", "v-cLast_Name-e & *, * & v-cFirst_Name-e & * * & v-cMiddle_Name-e" %>
Now here's the actual method that handles the above code.
<% function makeList(arg1,arg2,arg3) arg3 = Replace(arg3,"v-","arg1(*") arg3 = Replace(arg3,"-e","*)") arg3 = Replace(arg3,"*",chr(34))
On Error Resume Next do until arg1.eof ' length is an instance variable that must be ' set before calling the makeList function. -djork if not isempty(length) then optionout = Left(Eval(arg3),length) else optionout = Eval(arg3) end if ' output is an instance variable to be retrieved later -djork output = output & "<option value='" & arg1(arg2) & "'" if arg1(arg2) = defaultValue then output = output & " SELECTED" end if output = output & ">" & optionout & "</option>" & chr(13) arg1.MoveNext loop arg1.MoveFirst
I'll leave it up to you to decipher what ends up making this piece of black magic work.
At the point where you're Eval()ing, why bother with all the inane
formatting rules with "v-" and "-e", and simply have arg3 be the code
to evaluate in the first place?
My guess is someone didn't know how to embed quotes.
also curious about the length -- neat that it's not passed in as a
param. But I don't figure how it can be used reliably, since the
length of arg3 is going to increase by 4 for every occurrence of "v-"
"v-cLast_Name-e & *, * & v-cFirst_Name-e & * * & v-cMiddle_Name-e"
After first 3 lines of code, becomes (slashes used to delimit)
/DBData1.data("cLast_Name") & ", " & DBData1.data("cFirst_Name") & " " & DBData1.data("cMiddle_Name")/
I can see how it works from here. Wow, that's creative. And stupid.