28. januar 2009 - 14:17Der 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.
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 ;-)
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 ?
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.
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
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.