Avatar billede s0mmer Nybegynder
28. januar 2009 - 14:17 Der er 9 kommentarer og
1 løsning

Fejl med key

Hej eksperter,

Jeg får denne fejl:
Microsoft VBScript runtime  error '800a01c9'

This key is already associated with an element of this collection

På flg linje:
objDict.Add  Replace(strStamdataType," ","_"), strStamdata

Hvad forårsager det? Eller hvad betyder den linje, hvor fejlen kommer? Det er nemlig ikke min kode. Og ja jeg ved godt i ikke ved hvad objektet og variablerne indeholder. Men i så fald forklar mig hvad add linjen gør.

På forhånd tak
Avatar billede softspot Forsker
28. januar 2009 - 14:25 #1
Variablen objDict er givetvis af typen Scripting.Dictionary, hvilket betyder at det er en dynamisk liste, som kan udvides med nye elementer og eksisterende elementer kan fjernes fra listen. Desuden kan du aflæse antallet af elementer og iterere igennem elementerne.

Metoden Add tilføjer et element til listen med en nøgle og en værdi (værdien kan sagtens være et objekt). Udfordringen med dictionary-objektet kan være, at nøgler skal være entydige i listen og det der sker i dit tilfælde er, at der forsøges indsat et nyt objekt med en nøgle som eksisterer i forvejen - det må man som nævnt ikke.

Det du kan gøre inden tilføjelsen er at checke om nøglen findes i forvejen med Exists, dvs.

if not objDict.Exists(noegle) then
  objDict.Add noegle, objekt
else
  ' evt. noget fejlhåndtering eller bare ignorer, hvis det passer til din opgave...
  ' alternativt opdater værdien
  objDict.Item(noegle) = objekt
end if

Jeg er ikke helt sikker på kodeeksemplet, men forklaringen er god nok ;-)
Avatar billede locke Nybegynder
28. januar 2009 - 14:25 #2
Den associerer en nøgle med noget data. Fejlen siger, at du prøver at tilføje en nøgle som allerede er oprettet.
Avatar billede softspot Forsker
28. januar 2009 - 14:29 #3
Se i øvrigt beskrivelsen til Dictionary på MSDN: http://msdn.microsoft.com/da-dk/library/x4k5wbx4(en-us,VS.85).aspx
Avatar billede s0mmer Nybegynder
28. januar 2009 - 14:43 #4
softspot > Som sagt, jeg kender ikke så meget til koden og jeg er også i tvivl om hvorfor denne liste skal oprettes. Siden kører fint uden denne linje. Helt konkret er den en side som sørger for at printe en masse data ud om utrolig mange firmaer.. Alle firmaer virker, pånær et enkelt firma, som gir den angivne fejl. Hvad ville du anbefale at gøre ?
Avatar billede softspot Forsker
28. januar 2009 - 14:47 #5
Jeg ville umiddelbart gøre som vist i mit eksempel, altså bare opdatere stamdata for det givne firma (og koden ser ud til at være god nok :-)).

Hvis der skulle gøres noget andet en blot opdatere, så ville det kræve mere indblik i hvad forretningsområdet er, men det lader det ikke til at du kan give, så opdater.
Avatar billede s0mmer Nybegynder
28. januar 2009 - 14:57 #6
softspot > Okay, men hvad er noegle og objekt i dit eksempel? Og hvordan sku jeg evt finde dem i koden?
Avatar billede softspot Forsker
28. januar 2009 - 15:03 #7
nøglen er Replace(strStamdataType," ","_") og objektet er strStamdata, så koden ville se således ud:

noegle = Replace(strStamdataType," ","_")
if not objDict.Exists(noegle) then
  objDict.Add noegle, strStamdata
else
  ' evt. noget fejlhåndtering eller bare ignorer, hvis det passer til din opgave...
  ' alternativt opdater værdien
  objDict.Item(noegle) = strStamdata
end if
Avatar billede s0mmer Nybegynder
28. januar 2009 - 15:14 #8
softspot > perfekt :) endnu en gang tak. send svar
Avatar billede softspot Forsker
28. januar 2009 - 15:16 #9
Velbekomme :)
Avatar billede softspot Forsker
28. januar 2009 - 15:30 #10
Tak for point :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester