---
title: "Odefinierat fel"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/146639-odefinierat-fel"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "SoulGod"
published: "2006-05-09T18:45:36.000Z"
updated: "2006-05-15T08:39:12.000Z"
replies: 18
views: 884
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/146639-odefinierat-fel"
---

# Odefinierat fel

## #1 — SoulGod, 2006-05-09T18:45Z

Får följande fel:

```
Feltyp:
Provider (0x80004005)
Odefinierat fel
/webshop/inc/functions.asp, line 3
```

Och den raden är:

```
C.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("databejs.mdb")
```

Detta problemet kommer när jag försöker gå in på en sida, som då skall hämta information från databasen. Har kontrollerat skriv / läs-rättigheterna, och det är insatt korrekt.

Någon som har en aning?

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

## #2 — @nders, 2006-05-09T18:48Z

Provat med OLEDB-anslutning?

<http://www.connectionstrings.com/>

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

## #3 — SoulGod, 2006-05-09T19:00Z

Det löste första problemet.. nu har jag följande:

```
<% Set C = Server.CreateObject("ADODB.Connection")
--> C.Open "Driver={Microsoft Access Driver (*.mdb)};Dbq=databejs.mdb;"
```

Vilket ger mig felet

```
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][Drivrutin för ODBC Microsoft Access]Allmänt fel Det går inte att öppna registernyckeln 'Temporary (volatile) Jet DSN for process 0x3ac Thread 0xe04 DBC 0x1377f8c Jet'.
/webshop/admin.asp, line 132
```

och --\> är då line 132... jag som är korkad?

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

## #4 — SoulGod, 2006-05-09T19:04Z

Hittade felet, man var tvungen att skriva adressen C:\\ .. o.s.v.

Hur får jag bort det?
Kommer ligga på en webserver där jag ej vet den direkta länken.

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

## #5 — @nders, 2006-05-09T19:18Z

Du ska använda server.mappath() som i ditt första försök...
Dessutom ser jag inte att du ändrade till OLEDB-anslutning, men det är väl av underordnad betydelse nu.

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

## #6 — CatZ, 2006-05-10T03:28Z

Det @nders menar är att du ska använda dig av något som det här. 

```
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
	& Server.MapPath("\") & "\admin\databas.mdb"
```

Man ska i största möjliga mån undvika absoluta sökvägar och man ska i största möjliga mån också använda sig av Provider=Microsoft.Jet.OLEDB.4.0; Det fungerar snabbare bättre och säkrare :)

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

## #7 — SoulGod, 2006-05-11T09:07Z

Nu får jag följande fel istället:
Feltyp:
Microsoft JET Database Engine (0x80004005)
Det går inte att använda ''. Filen används redan.
/webshop/admin.asp, line 1332

Det är då alltså databasen den menar (antar jag, rent logiskt)

Jag har aldrig råkat ut för detta förut, varför blir det så?

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

## #8 — @nders, 2006-05-11T09:11Z

Har du databasen öppen i Access?

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

## #9 — SoulGod, 2006-05-11T09:25Z

Nej, det har jag inte.

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

## #10 — yohpops, 2006-05-11T09:40Z

Vad görs på rad 1332?

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

## #11 — SoulGod, 2006-05-11T09:43Z

```
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
	& Server.MapPath("\webshop\") & "\databas.mdb"
```

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

## #12 — yohpops, 2006-05-11T09:45Z

Skapas flera anslutningar mot samma databas?
En på rad 132 och en på 1332?

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

## #13 — SoulGod, 2006-05-11T09:48Z

Rad 132 är i en annan fil, men nu när du säger det, så inkluderas den "andra" filen i samma dokument... Ska visa ett lite större utdrag....

```
				Set Conn = Server.CreateObject("ADODB.Connection")
				Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
	& Server.MapPath("\webshop\") & "\databejs.mdb"
				Set RS = Server.CreateObject("ADODB.Recordset")
				SQL = "SELECT sum(amount) as summa, op.aid, p.price, p.product FROM order_products op INNER JOIN products p ON op.aid = p.id GROUP BY aid, p.price, p.product ORDER BY sum(amount) DESC"
				RS.Open SQL, Conn, 1, 3
					If Not RS.EOF Then %>
						Populäraste produkt: <a href="default.asp?id=<%=RS("AID")%>"><%=RS("product")%></a> (<%=RS("summa")%>)<br>
					<% End if
				RS.Close
				Conn.Close
				
				Set Conn = Server.CreateObject("ADODB.Connection")
				Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
	& Server.MapPath("\webshop\") & "\databejs.mdb"
				Set RS = Server.CreateObject("ADODB.Recordset")
```

Är det fel att använda flera anslutningar där? 

För nu när jag tänker efter, om jag "Missar" att stänga en anslutning någonstans, då förblir den ju öppen...

Hur ska jag göra detta? För jag har nog flera anslutningar lite överallt då \*skäms över kodningen\*

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

## #14 — CatZ, 2006-05-12T05:37Z

Du kan inte användra två anslutningar. Det du har gjort fel är att använt den andra anslutningen tidigare och glömt stänga den. När du då försöker ansluta igen så säger JET ifrån helt enkelt.

Din databas anslutning ska du inkludera överst på alla dina .asp sidor. skapa en fil som heter config.asp och i den filen har du bara detta:

```
<%@ LANGUAGE=VBSCRIPT %>
<% OPTION EXPLICIT %>

<% Response.Buffer = True

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
  & Server.MapPath("\webshop\") & "\databejs.mdb"

%>
```

Nu kommer du åt Conn från alla sidor där du inkluderar config.asp. Bästa sättet i mina ögon att inkludera filer är server side include virtual. Då kan man utgå från servers root-mapp. Det blir då enklare att strukturera upp sin sida och man slipper ha en gigantisk mapp med ett par stora filer utan kan istället dela upp koden på mindre filer i några väl utvalda mappar!

```
<!--#include virtual="/include/config.asp"-->
<!--#include virtual="/layout/header.asp"-->
```

Så kodar jag men alla får göra som dom vill :)

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

## #15 — SoulGod, 2006-05-12T06:18Z

Så då är det alltså bara att använda den där koden, i en include fil, och därefter ta bort alla saker som "gör" en anslutning till databasen i övriga dokument
(T.ex Set Conn & Conn.open) ?

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

## #16 — SoulGod, 2006-05-12T06:19Z

Detta är en fil jag har nu (functions.inc) som jag inkluderar i alla saker.

```
	<% Function xxx(id, level) 
			Set C = Server.CreateObject("ADODB.Connection")
			'C.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("databejs.mdb") 
			C.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
	& Server.MapPath("\webshop\") & "\databejs.mdb"
			Set R = Server.CreateObject("ADODB.Recordset")
			SQL = "SELECT * FROM categories WHERE PID = " & id - 0
			R.Open SQL, C, 1, 3				
				If NOT R.EOF Then
					strIDs = ""
					Do Until R.EOF
						a = 0
						Do Until a = level
							Response.Write "&nbsp;&nbsp;"
							a = a + 1							
						Loop %>
							<option value="<%=R("ID")%>">
						<% a = 0
							Do Until a = level
								Response.Write "&nbsp;&nbsp;"
								a = a + 1							
							Loop
								Response.Write R("category") %>
						</option>
									
						<% Call xxx(R("ID"), level + 1)
					R.MoveNext
					Loop
				End if				
			R.Close
			C.Close
		End Function %>
		
<% ' // Function to get all the levels of the menu	
	Function GetMenu(id, level) 
		Set C = Server.CreateObject("ADODB.Connection")
		C.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
	& Server.MapPath("\webshop\") & "\databejs.mdb"
		Set R = Server.CreateObject("ADODB.Recordset")
		SQL = "SELECT ID, PID, category FROM categories WHERE PID = " & strip(id)
		R.Open SQL, C, 1, 3				
			If NOT R.EOF Then
				Do Until R.EOF
					a = 0
					Do Until a = level
						intPadding = (level * 10)
						If intPadding = "" Then intPadding = 0
						a = a + 1							
					Loop %>
						<div style="padding-left: <%=intPadding%>px; clear: left;">
							<a href="?cid=<%=R("ID")%>"><%=R("category")%></a>
						</div>					
					<% Call GetMenu(R("ID"), level + 1)
				R.MoveNext
				Loop
			End if				
		R.Close
		C.Close
		Set SQL = Nothing
		Set R = Nothing
		Set C = Nothing
		Set level = Nothing
	End Function
	
	' *** Function to write out layer headers
	' >> Usage: Call header(intWidth, strContent)
	' >> intWidth = Width in pixels (eg. 50)
	' >> strContent =  Text content of header (eg. "Member profile" or variable)
	
	Function header(intWidth, strContent)
		Response.Write "<div class='menu_header' style='width: " & intWidth & "px'>" & "<div class='header_content'>" & strContent & "</div>" & "</div>"
	End Function
				
	'// Function to strip out characters that could be used in a SQL injection
	Function strip(input)
		retVal = replace(input, "'", "")
		retVal = replace(retVal, "--", "")
		retVal = replace(retVal, "../", "")
		retVal = replace(retVal, ";", "")
		retVal = Server.HTMLEncode(retVal)
		strip = retVal
	End Function %>
	
	<% Sub LinkTree(intParent,intIndent)
		For X = 0 To Ubound(arrLinks,2)		
			If arrLinks(1,X) = intParent AND (Cstr(arrLinks(1,X))=Cstr(0) OR instr("," & strParentID & ",","," & intParent & ",") > 0) Then
				strPid = ""
				For Z = 1 To intIndent %>
					&nbsp; &nbsp;
				<% Next			
				strBullet = " "			
				If intIndent = 0 Then
					Sublink = arrLinks(0,X)							
				Else
					For Z = 1 To intIndent
						strPid = strPid & split(strParentID,",")(Z-1) & ","
					Next				
					Sublink = strPid & arrLinks(0,X)				
				End if %>		
				<a href="default.asp?cid=<%=arrLinks(0,X)%>&amp;pid=<%=Sublink%>"><%=strBullet & arrLinks(2,X)%></a><br>
				<% Call LinkTree(arrLinks(0,X),intIndent + 1)
			End If
		Next 
	End Sub

	Function GetRows(ByVal SQL)
		Set Connection = Server.CreateObject("ADODB.Connection")
		Connection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
	& Server.MapPath("\webshop\") & "\databejs.mdb"		
		Set RS = Connection.Execute(SQL)
			If Not RS.BOF Or Not RS.EOF Then
				arrRecords = RS.GetRows()
			Else
				arrRecords = ""
			End If		
			RS.Close
		Set RS = nothing
		Connection.Close
		Set Connection = Nothing
		GetRows = arrRecords
	End Function %>

<%
'// Kontrollerar om bild finns.
Function GetImg(str)

  '// mappen som bilderna ligger.
  strCat = "products/"
	
  '// skapar bildnamn och lägger till ändelsen .jpg
  strFile = str &".jpg"

  '// bygger ihop mappen och filnamnet för kontroll.
  strPath = strCat &""& strFile 
	
  '// Skapar objektet
  Set file = Server.CreateObject("Scripting.FileSystemObject") 

  '// Kontrollera om filen finns
  If file.FileExists(Server.MapPath(strPath)) Then
    '// om bilden finns.
      GetImg = "<img src='"& strPath &"' alt='"& strFile &"' / border='0' widht='50' height='37'> "	  
  Else
    '// om bilden saknas.
      GetImg = "<img src='pics/nopic.gif' border='0'>"
  End if
End Function
%>
<%
'// Kontrollerar om bild finns.
Function GetImg2(str)

  '// mappen som bilderna ligger.
  strCat = "products/"
	
  '// skapar bildnamn och lägger till ändelsen .jpg
  strFile = str &"_big.jpg"

  '// bygger ihop mappen och filnamnet för kontroll.
  strPath = strCat &""& strFile
	
  '// Skapar objektet
  Set file = Server.CreateObject("Scripting.FileSystemObject") 

  '// Kontrollera om filen finns
  If file.FileExists(Server.MapPath(strPath)) Then
    '// om bilden finns.
      GetImg2 = strPath
  Else
    '// om bilden saknas.
      GetImg2 = "nopic.gif"
  End if
End Function
%>
```

I denna kod, så har jag ju då flera "anslutningar"; ska jag ta bort den nedre av dom alltså?

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

## #17 — SoulGod, 2006-05-15T05:03Z

Kan någon kommentera denna "functions.inc" ...
Där har jag alltså flera connections, som måste tas bort.
Men dom heter dock olika (C & Connection)

Är det bara att ta bort hela dom raderna (förutom t.ex den översta),
eller vaD?

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

## #18 — @nders, 2006-05-15T05:58Z

Huvudsaken är att du ser till att stänga och destruera objekt du inte längre använder. Objekten skapas ju bara när du kallar på funktionerna, så se till att du stänger och sätter alla objekten till nothing när du är klara med dem.

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

## #19 — J.N., 2006-05-15T08:39Z

HEJ!

En nackdel är att du får många ställen att ändra på. Dock, det är snabbt gjort med sök-ersätt. Eftersom det fungerar som @nders säger, är koden inte fel i sig.

Om du känner att du inte har kunskap att justera den till en db-koppling med mera, låt det vara. Dock, du bör (ska!) döpa om filen till .asp istället.
Prova skriva in adressen till sidan i webbläsaren, och se vad som händer...
Facit: Alla kan läsa lösenord etc, inte bra!

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

---

Tråden på webben: https://www.webforum.nu/amne/asp/146639-odefinierat-fel
