473,326 Members | 2,095 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,326 software developers and data experts.

Dictionary Object

Wondering if someone can give me a hand with something that I'm sure is
really easy - but damned if I know what I'm doing wrong. I'm trying to read
the contents of a database into an ASP dictionary object. However I'm
getting the error

Microsoft VBScript runtime error '800a01c9'
This key is already associated with an element of this collection
/test.asp, line 21

There's definately no repeated data in either column, it's currently only
test data, one column is 1,2,3,4 etc the other is a,b,c,d. I can confirm
it's reading the data properly if I use response.write instead of d.add
The code I'm using is this:

Set rsCount = Server.CreateObject ("ADODB.Recordset")
sqlView = "select data,number from tblTemp"
Set d=Server.CreateObject("Scripting.Dictionary")

rsCount.Open sqlView, "dsn=dsn_hits_2"
do while not rsCount.eof
d.add rsCount("number"),rsCount("data")
rsCount.MoveNext
loop
rsCount.close

Set rsCount = Nothing


Many thanks in advance.
Jul 19 '05 #1
6 6311
When you add an item to the dictionary object, the key must be unique. The
key is the first argument in the add method, which in this case, is
rsCount("number"). What that error means is that it's hitting a record that
has rsCount("number") with the same value as another record that has already
been inserted into the dictionary object. i.e.
number data
1 Joe
2 Kelly
3 Frank
2 Jorg

When it gets to the Jorg record and tries to use 2 as the key, that'll throw
an error since the Kelly item in the dictionary object already has a key of
2.

Possible Solutions:

Use an array instead of a dictionary object.

Use the primary key in your recordset if the key doesn't matter.

Use a counter for the key and increase it by one in your loop if the key
doesn't matter.

Probably some other things.

Ray at work
"Johnny Klunk" <johnnyklunk@:rem0ve-this:johnnyklunk.com> wrote in message
news:be**********@sparta.btinternet.com...
Wondering if someone can give me a hand with something that I'm sure is
really easy - but damned if I know what I'm doing wrong. I'm trying to read the contents of a database into an ASP dictionary object. However I'm
getting the error

Microsoft VBScript runtime error '800a01c9'
This key is already associated with an element of this collection
/test.asp, line 21

There's definately no repeated data in either column, it's currently only
test data, one column is 1,2,3,4 etc the other is a,b,c,d. I can confirm
it's reading the data properly if I use response.write instead of d.add
The code I'm using is this:

Set rsCount = Server.CreateObject ("ADODB.Recordset")
sqlView = "select data,number from tblTemp"
Set d=Server.CreateObject("Scripting.Dictionary")

rsCount.Open sqlView, "dsn=dsn_hits_2"
do while not rsCount.eof
d.add rsCount("number"),rsCount("data")
rsCount.MoveNext
loop
rsCount.close

Set rsCount = Nothing


Many thanks in advance.

Jul 19 '05 #2

"Ray at <%=sLocation%>" <as*@me.forit> wrote in message
news:O3**************@TK2MSFTNGP12.phx.gbl...
When you add an item to the dictionary object, the key must be unique. The key is the first argument in the add method, which in this case, is
rsCount("number"). What that error means is that it's hitting a record that has rsCount("number") with the same value as another record that has already been inserted into the dictionary object. i.e.

Hi,
Thanks for the response. The thing is, the data is definately not repeated.
I entered the data manually to test and make there's no error. It's just
1,2,3,4 etc..
That's a good idea with the primary key. I've just tested again, setting
each of my columns as the primary key to ensure the database has no repeated
entries. I'm still getting the same thing. It's driving me nuts!
Jul 19 '05 #3
Try this then and look:

rsCount.Open sqlView, "dsn=dsn_hits_2"
do while not rsCount.eof
response.write rsCount("number") & "," & rsCount("data") &
"<br />"
rsCount.MoveNext
loop
rsCount.close

Ray at work
"Johnny Klunk" <johnnyklunk@:rem0ve-this:johnnyklunk.com> wrote in message
news:be**********@hercules.btinternet.com...

"Ray at <%=sLocation%>" <as*@me.forit> wrote in message
news:O3**************@TK2MSFTNGP12.phx.gbl...
When you add an item to the dictionary object, the key must be unique. The
key is the first argument in the add method, which in this case, is
rsCount("number"). What that error means is that it's hitting a record

that
has rsCount("number") with the same value as another record that has

already
been inserted into the dictionary object. i.e.

Hi,
Thanks for the response. The thing is, the data is definately not

repeated. I entered the data manually to test and make there's no error. It's just
1,2,3,4 etc..
That's a good idea with the primary key. I've just tested again, setting
each of my columns as the primary key to ensure the database has no repeated entries. I'm still getting the same thing. It's driving me nuts!

Jul 19 '05 #4

"Ray at <%=sLocation%>" <as*@me.forit> wrote in message
news:e7**************@TK2MSFTNGP12.phx.gbl...
Try this then and look:

rsCount.Open sqlView, "dsn=dsn_hits_2"
do while not rsCount.eof
response.write rsCount("number") & "," & rsCount("data") &
"<br />"
rsCount.MoveNext
loop
rsCount.close

Ray at work


Ray,
Thanks again for the quick response :) I've actually tried that idea - but
to be sure, to be sure I pasted your code in to make sure the results
matched. I've copy-pasted the output from test.asp below. You can see why
this is driving me nuts ! As far as I see, every row has different data in
each column.

a,1
b,2
c,3
d,4
e,5
f,6
g,7


Jul 19 '05 #5
"Johnny Klunk" <johnnyklunk@:rem0ve-this:johnnyklunk.com> wrote in
message news:be**********@sparta.btinternet.com...
d.add rsCount("number"),rsCount("data")


Try:
d.add rsCount.Fields.Item("number").Value,
rsCount.Fields.Item("data").Value

Also you can take advantage of the fact that the dictionary object will
create/overwrite a key based on whether it exists or not:
d(rsCount.Fields.Item("number").Value) =
rsCount.Fields.Item("data").Value

However this method wreaks of "programming by side effect" so if the
first method work, use that.

HTH
-Chris
Jul 19 '05 #6
"Johnny Klunk" <johnnyklunk@:rem0ve-this:johnnyklunk.com> wrote in
message news:be**********@sparta.btinternet.com...
d.add rsCount.Fields.Item("number").Value, rsCount.Fields.Item("data").Value

Yep, thats worked. Superb, thanks so much. No idea why my bit of

code didn't work, but I'm glad for a solution.

Cheers

You code was attempting to set the dictionary key to a field Object, not
it's value. Whenever possible, try to explicitly reference values. When
you reference the value of a field object implicitly (i.e.
rsCount("number") you're asking the parser to do the following:

1. Determine the default property/method for the rsCount object, the
Fields collection
2. Determine the default property/method for the Fields collection, the
Item method
3. Determine the default property/method for the Item object, the Value
property
4. Determine if the Value property is an object
5. If it is an object do the whole object model default method/property
traversal thing again.
6. If not, return the Value

All of these steps are also dependent on the context in which they are
called. So sometimes the default thing happens, sometime it doesn't.
There are also a lot more going on before, between and after each of
these steps, but you get the idea. Always better to explicitly identify
the "value" you want.

HTH-
Chris

Jul 19 '05 #7

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

1
by: none | last post by:
or is it just me? I am having a problem with using a dictionary as an attribute of a class. This happens in python 1.5.2 and 2.2.2 which I am accessing through pythonwin builds 150 and 148...
8
by: Rodd Snook | last post by:
I have an application which makes extensive use of the Scripting.Dictionary object. I'm not doing anything silly like putting them outside the page scope -- just creating quite a few of them and...
26
by: Alan Silver | last post by:
Hello, I have a server running Windows Server 2003, on which two of the web sites use the MegaBBS ASP forum software. Both sites suddenly developed the same error, which seems to be connected to...
2
by: jg | last post by:
I was trying to get custom dictionary class that can store generic or string; So I started with the example given by the visual studio 2005 c# online help for simpledictionay object That seem...
1
by: john wright | last post by:
I have a dictionary oject I created and I want to bind a listbox to it. I am including the code for the dictionary object. Here is the error I am getting: "System.Exception: Complex...
4
by: Betina Andersen | last post by:
I have a dictionary object, then I create a new dictionary object and sets it equal to my original, then I pass the new dictionary object to a function that changes some of my values - but then my...
4
by: NullQwerty | last post by:
Hi folks, I have a Dictionary which contains a string key and an object value. I want the object value to point to a property in my class and I want it to be by reference, so that later on I...
3
by: wildThought | last post by:
If I have an object that contains a generic dictionary inside of it, how do I get access to its properties such as count?
6
by: GiJeet | last post by:
hello, I'm trying to use a dictionary as a class member. I want to use a property to get/set the key/value of the dictionary but I'm confused as how to use a dictionary as a property. Since there...
2
by: Andy B | last post by:
I don't know if this is even working or not but here is the problem. I have a gridview that I databound to a dictionary<string, stringcollection: Contract StockContract = new Contract();...
0
by: DolphinDB | last post by:
Tired of spending countless mintues downsampling your data? Look no further! In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
0
by: ryjfgjl | last post by:
ExcelToDatabase: batch import excel into database automatically...
1
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
1
by: PapaRatzi | last post by:
Hello, I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...
1
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
1
by: Shællîpôpï 09 | last post by:
If u are using a keypad phone, how do u turn on JavaScript, to access features like WhatsApp, Facebook, Instagram....
0
by: af34tf | last post by:
Hi Guys, I have a domain whose name is BytesLimited.com, and I want to sell it. Does anyone know about platforms that allow me to list my domain in auction for free. Thank you
0
by: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome former...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.