---
title: "Fel på kategorilistning \"An exception occurred\""
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/118701-fel-på-kategorilistning-an-exception-occurred"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Addeladde"
published: "2004-12-26T13:50:20.000Z"
updated: "2004-12-27T23:12:55.000Z"
replies: 11
views: 288
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/118701-fel-på-kategorilistning-an-exception-occurred"
---

# Fel på kategorilistning "An exception occurred"

## #1 — Addeladde, 2004-12-26T13:50Z

Jag försöker lista kategorier ur en databas. Kategorierna kan ha 4 st underkategorier.

Tabellen ser ut enligt följande:

```
kategoriID    KategoriHuvud   KategoriNamn
```

Kategori huvud anger ID på den kategori som den ligger under. Om huvud är 0 så är det en huvudkategori.

På denna kod nedan får jag detta felmeddelande:

> Microsoft VBScript runtime error '800a01fb' 
> An exception occurred: 'con.Execute' 
> /admin/moduler/kategori.asp, line 15

Antar att det kan bero på att det är aldeläs för många databasanropp. Eller?
Kan man kanske göra det på något smartare sätt eller ändra i koden så att det inte blir några fel?

```
' Öppna dataförbindelsen
Set con = Server.CreateObject("ADODB.Connection")
con.Open Application("cmdatabas")

action = Trim(request("action"))

Sub kategoriTrad(hID, ID)
  sqlString = "SELECT * " &_
  "FROM kategorier " &_
  "Where kategoriID = "& hID 
  [b]SET kTradRS = Con.Execute( sqlString )[/b]'Line 15
  If not kTradRS.Eof Then
    strKategoriTrad = kTradRS("kategoriNamn") & "\" & strKategoriTrad
    underID = kTradRS("kategoriID")
	huvudID = kTradRS("kategoriHuvud")
    kTradRS.close : Set kTradRS = Nothing
	If not huvudID = 0 Then
	  call kategoriTrad(huvudID, ID)
	Else 
	   adoRS.AddNew
        adoRS( "id" ) = ID
		adoRS( "kategori" ) = strKategoriTrad
	  adoRS.Update  
	End If
  End If
End Sub

'Skapa recordsettet som kategorierna ska läggas in i
			 set adoRS = Server.CreateObject( "ADODB.Recordset" )
		     adoRS.CursorLocation = 3
			 adoRS.Fields.Append "Id", adInteger
			 adoRS.Fields.Append "kategori", adVarChar, 100
			 adoRS.Open
			
			sqlString = "SELECT * " &_
			  "FROM kategorier " 
			SET kategorinRS = Con.Execute( sqlString )
			
			While not kategorinRS.EOF
  			   strKategoriTrad = kategorinRS("kategoriNamn") & "\" & strKategoriTrad  
			   
			   If not kategorinRS("kategoriHuvud") = 0 Then
			     call kategoriTrad(kategorinRS("kategoriHuvud"), kategorinRS("kategoriID"))
			   Else
			     adoRS.AddNew
        	       adoRS( "id" ) = kategorinRS("kategoriID")
				   adoRS( "kategori" ) = kategorinRS("kategoriNamn") & "\"
	             adoRS.Update  
		       End If
			   strKategoriTrad = ""
			   kategorinRS.MoveNext
			 Wend
				
			 kategorinRS.close
			 set kategorinRS = nothing
			%>
```

Jag skapar ett eget recordsätt för att kunna sortera det på rätt sätt när jag hämtat informationen från databasen.

Permalänk: https://www.webforum.nu/p/118701

## #2 — Fraggel, 2004-12-26T18:20Z

Hmm kan du verkligen ställa en SQLfråga av typen SELECT om con.Execute ?

Kräver inte det ett recordset ?
kTradRS är ju inte ett Recordset vad jag ser utan bara en instans av con.Execute

Permalänk: https://www.webforum.nu/p/1514393

## #3 — @nders, 2004-12-26T19:29Z

När kommer felmeddelandet? Direkt eller efter att subrutinen kallat sig själv? Recordsetobjektet bör du dimma i subrutinen så det det är lokalt, och om jag var du hade jag sett till att använda frånkopplade recordsets för att undvika låsningar.

\- - - - - - - - - -

> **Fraggel skrev:**
>
> Hmm kan du verkligen ställa en SQLfråga av typen SELECT om con.Execute ?
> 
> Kräver inte det ett recordset ?
> kTradRS är ju inte ett Recordset vad jag ser utan bara en instans av con.Execute

Det skapas ett recordset om man ställer SQL-frågor på det viset ja. Det är bara om man behöver ange cursortyp eller låstyp som man behöver skapa ett recordset först mha *set obj = server.createobject("adodb.recordset")*. På devguru kan man läsa mycket trevligt, exempelvis:

> **Devguru skrev:**
>
> The Execute method is used to execute the specified query, SQL statement, stored procedure, or provider-specific text. If it is a row-returning query, the results (if any) will be stored in a new RecordSet object. If it is a non-row-returning query, the provider will return a closed RecordSet object.

 Källa: <http://www.devguru.com/technologies/ado/quickref/connection_execute.html> .

Bokmärk.

mvh

Permalänk: https://www.webforum.nu/p/1514400

## #4 — Addeladde, 2004-12-26T19:56Z

Det konstiga är att sql-frågan har fungerat. Det verkar låsa hela databasen (access) för sen fungerar väldigt få sidor men samtidigt fungerar vissa som även dem har sql-frågor.

Ifall jag lägger till On error resume next på sidan så körs funktionen några gånger men avbryts.

> Recordsetobjektet bör du dimma i subrutinen så det det är lokalt, och om jag var du hade jag sett till att använda frånkopplade recordsets för att undvika låsningar.

Ok exempel?

Permalänk: https://www.webforum.nu/p/1514405

## #5 — Addeladde, 2004-12-26T20:02Z

Oj jag har gjort det! En bakåtknapptryckning och sedan uppdatera.  Pinsamt

Permalänk: https://www.webforum.nu/p/1514408

## #6 — Addeladde, 2004-12-26T20:03Z

Lyckades dessutom inte redigera utan skapa en nytt inlägg

Permalänk: https://www.webforum.nu/p/1514409

## #7 — @nders, 2004-12-26T20:15Z

Snabbt exempel:

```
Sub kategoriTrad(hID, ID)
     Dim kTradRS
     ....
     ....
     Set kTradRS = Server.CreateObject ("ADODB.Recordset")
     kTradRS.CursorLocation = 3 ' adUseClient
     kTradRS.Open sqlString, con
     ....
     ....
```

Permalänk: https://www.webforum.nu/p/1514415

## #8 — Addeladde, 2004-12-26T20:23Z

Nu får jag: 

> An exception occurred: 'kTradRS.Open'

```
Sub kategoriTrad(hID, ID)
  
  Dim kTradRS
  sqlString = "SELECT * " &_
  "FROM kategorier " &_
  "Where kategoriID = "& hID 
  Set kTradRS = Server.CreateObject ("ADODB.Recordset")
  kTradRS.CursorLocation = 3 ' adUseClient
  kTradRS.Open sqlString, con

  If not kTradRS.Eof Then
    strKategoriTrad = kTradRS("kategoriNamn") & "\" & strKategoriTrad
    underID = kTradRS("kategoriID")
	huvudID = kTradRS("kategoriHuvud")
    kTradRS.close : Set kTradRS = Nothing
	If not huvudID = 0 Then
	  call kategoriTrad(huvudID, ID)
	Else 
	   adoRS.AddNew
        adoRS( "id" ) = ID
		adoRS( "kategori" ) = strKategoriTrad
	  adoRS.Update  
	End If
  End If
End Sub
```

Permalänk: https://www.webforum.nu/p/1514422

## #9 — Addeladde, 2004-12-26T20:27Z

Dessa problem fanns inte då databasen var relativt tom på kategorier. Förslag på smartare sätt att göra detta på?

Alltså kategorilistningen ska kunna se ut på följande sätt:
Där man lägger till nya kategorier ska kunna se ut på följande sätt:

```
Hantverk\
Hantverk\Trä\
Hantverk\Trä\Statyetter\
Hantverk\Trä\Statyetter\Djur\
Hantverk\Trä\Statyetter\Ljusstakar\
Hantverk\Trä\Vägghängt\mask\
kläder\
kläder\dam\
kläder\dam\medium\
kläder\dam\medium\klänningar\
```

Eftersom man måste kunna lägga till kategorier under alla kategorier.

Permalänk: https://www.webforum.nu/p/1514423

## #10 — Addeladde, 2004-12-27T20:39Z

Ingen som har nått förslag?

Permalänk: https://www.webforum.nu/p/1514878

## #11 — emission, 2004-12-27T22:47Z

Det beror lite på vad du vill göra med ditt nya recordset. Eventuellt behöver du inget...

```

kategoriTrad 0, ""

Sub kategoriTrad(hID,Tree)
  Dim sqlString, kTradRS, strKategoriTrad 
  sqlString = "SELECT * " &_
  "FROM kategorier " &_
  "Where kategoriID = "& hID & " ORDER BY KategoriNamn
"
  SET kTradRS = Con.Execute( sqlString )
  do until kTradRS.Eof 
    strKategoriTrad = Tree & "\" & kTradRS("kategoriNamn")
    response.write strKategoriTrad   & "<BR>"
    kategoriTrad kTradRS("kategoriID"),strKategoriTrad 
    kTradRS.Movenext
  loop
  kTradRS.Close
End Sub
```

Permalänk: https://www.webforum.nu/p/1514947

## #12 — Addeladde, 2004-12-27T23:12Z

> **emission skrev:**
>
> Det beror lite på vad du vill göra med ditt nya recordset. Eventuellt behöver du inget...

Jag använder det i en selectlista för att välja vilken kategor det handlar om. Man vill ju också se hur kategorin ligger under andra kategorier därför dessa krångliga och långa sql-satser.

Permalänk: https://www.webforum.nu/p/1514957

---

Tråden på webben: https://www.webforum.nu/amne/asp/118701-fel-på-kategorilistning-an-exception-occurred
