By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
424,667 Members | 2,611 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 424,667 IT Pros & Developers. It's quick & easy.

Dynamic drop down list

P: n/a
I hope this is the right group. I am very new to ASP so this is
probably a stupid question. I have some vbscript that query's AD and
populates a recordset. I know the recorset contains the information I
want by doing a Response.write. I am having problems dynamically
creating a drop down list from the data in the recordset. The drop down
is created but it is empty. Any help would be greatly appreciated. A
sample of the code:

<%
'On Error Resume Next
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("defaultNamingContext")
strOU = "OU=Generic Accounts,"
' Use ADO to search Active Directory.
Set objCommand = CreateObject("ADODB.Command")
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
objCommand.ActiveConnection = objConnection
strBase = "<LDAP://" & strOU &" " & strDNSDomain &">"
strFilter = "(&(objectCategory=person)(objectClass=user))"
strQuery = strBase & ";" & strFilter & ";cn;subtree"
objCommand.CommandText = strQuery
objCommand.Properties("Page Size") = 100
objCommand.Properties("Timeout") = 30
objCommand.Properties("Cache Results") = False
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
sName = objRecordSet.Fields("cn").Value
'Response.Write(sName)
genericAccount = "<option value= & '"sName"' & >"

objRecordSet.MoveNext
Loop
%>
<html><head><title>Dynamic Drop-Down Menu Example</title></head>
<body>
<form method="POST" action="test3.asp">
<p><select size="1" name="GenericAccounts">
<%=genericAccount%>
</select></p>
</form>
</body>
</html>

Aug 28 '06 #1
Share this Question
Share on Google+
6 Replies


P: n/a
genericAccount = "<option value= & '"sName"' & >"

I would think should be

genericAccount = genericAccount & "<option value='" & sName & "'>" & sName &
"</option>"

<mc************@gmail.comwrote in message
news:11**********************@74g2000cwt.googlegro ups.com...
I hope this is the right group. I am very new to ASP so this is
probably a stupid question. I have some vbscript that query's AD and
populates a recordset. I know the recorset contains the information I
want by doing a Response.write. I am having problems dynamically
creating a drop down list from the data in the recordset. The drop down
is created but it is empty. Any help would be greatly appreciated. A
sample of the code:

<%
'On Error Resume Next
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("defaultNamingContext")
strOU = "OU=Generic Accounts,"
' Use ADO to search Active Directory.
Set objCommand = CreateObject("ADODB.Command")
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
objCommand.ActiveConnection = objConnection
strBase = "<LDAP://" & strOU &" " & strDNSDomain &">"
strFilter = "(&(objectCategory=person)(objectClass=user))"
strQuery = strBase & ";" & strFilter & ";cn;subtree"
objCommand.CommandText = strQuery
objCommand.Properties("Page Size") = 100
objCommand.Properties("Timeout") = 30
objCommand.Properties("Cache Results") = False
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
sName = objRecordSet.Fields("cn").Value
'Response.Write(sName)
genericAccount = "<option value= & '"sName"' & >"

objRecordSet.MoveNext
Loop
%>
<html><head><title>Dynamic Drop-Down Menu Example</title></head>
<body>
<form method="POST" action="test3.asp">
<p><select size="1" name="GenericAccounts">
<%=genericAccount%>
</select></p>
</form>
</body>
</html>

Aug 28 '06 #2

P: n/a
Thanks Michael. That did the trick.

Michael Kujawa wrote:
genericAccount = "<option value= & '"sName"' & >"

I would think should be

genericAccount = genericAccount & "<option value='" & sName & "'>" & sName &
"</option>"

<mc************@gmail.comwrote in message
news:11**********************@74g2000cwt.googlegro ups.com...
I hope this is the right group. I am very new to ASP so this is
probably a stupid question. I have some vbscript that query's AD and
populates a recordset. I know the recorset contains the information I
want by doing a Response.write. I am having problems dynamically
creating a drop down list from the data in the recordset. The drop down
is created but it is empty. Any help would be greatly appreciated. A
sample of the code:

<%
'On Error Resume Next
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("defaultNamingContext")
strOU = "OU=Generic Accounts,"
' Use ADO to search Active Directory.
Set objCommand = CreateObject("ADODB.Command")
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
objCommand.ActiveConnection = objConnection
strBase = "<LDAP://" & strOU &" " & strDNSDomain &">"
strFilter = "(&(objectCategory=person)(objectClass=user))"
strQuery = strBase & ";" & strFilter & ";cn;subtree"
objCommand.CommandText = strQuery
objCommand.Properties("Page Size") = 100
objCommand.Properties("Timeout") = 30
objCommand.Properties("Cache Results") = False
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
sName = objRecordSet.Fields("cn").Value
'Response.Write(sName)
genericAccount = "<option value= & '"sName"' & >"

objRecordSet.MoveNext
Loop
%>
<html><head><title>Dynamic Drop-Down Menu Example</title></head>
<body>
<form method="POST" action="test3.asp">
<p><select size="1" name="GenericAccounts">
<%=genericAccount%>
</select></p>
</form>
</body>
</html>
Aug 28 '06 #3

P: n/a
mc************@gmail.com wrote:
I hope this is the right group. I am very new to ASP so this is
probably a stupid question. I have some vbscript that query's AD and
populates a recordset. I know the recorset contains the information I
want by doing a Response.write. I am having problems dynamically
creating a drop down list from the data in the recordset. The drop
down is created but it is empty. Any help would be greatly
appreciated. A sample of the code:

<%
'On Error Resume Next
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("defaultNamingContext")
strOU = "OU=Generic Accounts,"
' Use ADO to search Active Directory.
Set objCommand = CreateObject("ADODB.Command")
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
objCommand.ActiveConnection = objConnection
strBase = "<LDAP://" & strOU &" " & strDNSDomain &">"
strFilter = "(&(objectCategory=person)(objectClass=user))"
strQuery = strBase & ";" & strFilter & ";cn;subtree"
objCommand.CommandText = strQuery
objCommand.Properties("Page Size") = 100
objCommand.Properties("Timeout") = 30
objCommand.Properties("Cache Results") = False
Set objRecordSet = objCommand.Execute
This line is not needed - upon opening, the recordset is already
pointing at the first record unless EOF is true.:
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
sName = objRecordSet.Fields("cn").Value
'Response.Write(sName)
Here is the problem:
genericAccount = "<option value= & '"sName"' & >"
Two problems:
1. You are overwriting genericAccount with each pass through the loop.
I' m sure that's not what you intended.
2. You've put the quotes in the wrong places - this line should generate
an error. I notice the first "On Error" line is commented out, so it's
puzzling you aren't getting an error message. When you view the page's
source in the browser, what do you see?
The line should be:
genericAccount = genericAccount & "<option value='" & sName & "'>"
Anyways, this is an inefficient way to accomplish this task. Here is
what I would do:

Set objRecordSet = objCommand.Execute
dim arData, i
If Not objRecordSet.EOF then arData = objRecordSet.GetRows(,,"cn")
objRecordSet.close : set objRecordSet= nothing
if isArray(arData) then
for i = 0 to ubound(arData,2)
genericAccount = genericAccount & "<option value='" & _
arData(0,i) & "'>"
next
end if

--
Microsoft MVP -- ASP/ASP.NET
Please reply to the newsgroup. The email account listed in my From
header is my spam trap, so I don't check it very often. You will get a
quicker response by posting to the newsgroup.
Aug 28 '06 #4

P: n/a

mc************@gmail.com wote:
I hope this is the right group. I am very new to ASP so this is
probably a stupid question.
There is no such thing as a stupid question, just people acting stupid.
I have some vbscript that query's AD and
populates a recordset. I know the recorset contains the information I
want by doing a Response.write. I am having problems dynamically
creating a drop down list from the data in the recordset. The drop down
is created but it is empty. Any help would be greatly appreciated. A
sample of the code:
<snip>
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
sName = objRecordSet.Fields("cn").Value
'Response.Write(sName)
genericAccount = "<option value= & '"sName"' & >"

objRecordSet.MoveNext
Loop
'Response.Write(sName)
genericAccount = "<option value= & '"sName"' & >"

objRecordSet.MoveNext
Loop
%>
<html><head><title>Dynamic Drop-Down Menu Example</title></head>
<body>
<form method="POST" action="test3.asp">
<p><select size="1" name="GenericAccounts">
<%=genericAccount%>
</select></p>
</form>
</body>
</html>
You have your loop in a strange place. You can create the value as a
string, and then place it in your HTML, or you can generate it in the
HTML. But, you should not be regenerating the same HTML over and over
again. Eg:

<% 'run query and open recordset %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html40/strict.dtd">
<html lang="en">
<head>
<title>Dynamic Drop-Down Menu Example</title>
</head>
<body>
<form method="POST" action="test3.asp">
<label for="genericaccounts">Accounts</label>
<select name="genericaccounts" id="genericaccounts">
<% while not objRecordset.EOF
sName = objRecordSet.Fields("cn").Value
%>
<option value="<%=sName%>" <% if genericaccounts = sname
then%>selected="selected"<%end if%>><%=sName%></option>
<% objRecordset.Movenext
wend
objRecordset.Close
set objRecordset = nothing
'close connection to db if not needed again on page
%>
</select>
</form>
</body>
</html>

OR:

<%
while not objrecordset.EOF
genericaccounts = genericaccounts "<option value=" & chr(034) & sname &
chr(034) & "</option>&vbcrlf"
objrecordset.Movenext
'close recordset and close connection if not needed again
%>
<select name="genericaccounts">
<%=genericaccounts%>
</select>
</form>

OR even better would be to use the GetString method described here:
<http://www.4guysfromrolla.com/webtech/102600-1.shtml>

Do you see? You were overwriting the HTML over and over again. It is
also nice to show a value selected if the user has selected it. I
would _strongly_ suggest closing elements, it makes it easier to debug.
Although the closing tag for the option element is not required, it
might make your life easier.

--
Adrienne Boswell at work
Administrator nextBlock.com
http://atlas.nextblock.com/files/
Please respond to the group so others can share

Aug 28 '06 #5

P: n/a
Adrienne Boswell wrote:
>
You have your loop in a strange place. You can create the value as a
string, and then place it in your HTML, or you can generate it in the
HTML. But, you should not be regenerating the same HTML over and over
again. Eg:
I, on the other hand, think it's easier for maintenance if server-side
code is separated from html as much as possible, so I firmly agree with
his choice to run his loop before the <htmlelement, set his html to a
variable and response.write the variable later on inside the <html>
element. However, this is just a personal preference.
--
Microsoft MVP -- ASP/ASP.NET
Please reply to the newsgroup. The email account listed in my From
header is my spam trap, so I don't check it very often. You will get a
quicker response by posting to the newsgroup.
Aug 28 '06 #6

P: n/a
Bob Barrows [MVP] wrote:
Anyways, this is an inefficient way to accomplish this task.
Here is what I would do:

Set objRecordSet = objCommand.Execute
dim arData, i
If Not objRecordSet.EOF then arData = objRecordSet.GetRows(,,"cn")
objRecordSet.close : set objRecordSet= nothing
if isArray(arData) then
for i = 0 to ubound(arData,2)
genericAccount = genericAccount & "<option value='" & _
arData(0,i) & "'>"
next
end if
And if your data has an apostrophe in it? I would opt for something more
like this:

genericAccount = genericAccount & "<option value=""" & _
Server.HTMLEncode(arData(0,i)) & """>" & _
Server.HTMLEncode(arData(0,i)) & "</option>"

I always use double quotes and Server.HTMLEncode() to write attributes
values from data sources outside my control. To be more precise, I would
also use HTMLEncode once per data item, would optionally set the selected
attribute, and would do the whole thing in JScript.

--
Dave Anderson

Unsolicited commercial email will be read at a cost of $500 per message. Use
of this email address implies consent to these terms.
Aug 28 '06 #7

This discussion thread is closed

Replies have been disabled for this discussion.