---
title: "dim & function & sub"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/58315-dim-function-sub"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "doggelito"
published: "2002-11-07T07:34:05.000Z"
updated: "2002-11-07T10:35:21.000Z"
replies: 10
views: 322
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/58315-dim-function-sub"
---

# dim & function & sub

## #1 — doggelito, 2002-11-07T07:34Z

Hur tusan ska det se ut!
Jag blir inte klok på detta, var och hur ska man dimma objConn för att det ska blir rätt?

```
' Öppning av databas =========================================================
Public Function get_connection()
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.open "Driver={SQL Server};Server=xxx;Database=xxx;UID=xxx;PWD=xxx"
Set get_connection = objConn
End Function

'Hämtar antal trådar  =========================================================
Public Sub getCounterThreds(Byval Categoryid)
Dim rs, objConn
Set rs = get_recordset("Select Count(Questionid) From Questions " & _
"Where Categoryid = " & Categoryid & "  ;")
If Not rs.Eof Then Response.Write rs(0)
call close_recordset(rs)
call close_Connection(objConn)
End Sub

' Stänger recordset ==========================================================
Public Sub close_recordset(rs)
rs.Close
Set rs = Nothing
End Sub

' Stängning av databas =======================================================
Public Sub close_connection(objConn)
objConn.Close() '***
Set objConn = Nothing
End Sub
```

Som det är nu så funkar allt utom stängning av databas, får fel:
Object required: 'objConn' \*\*\*
Tar jag däremot bort dimmningarna av objConn i function och subben och istället dimmar globalt på sidan så funkar det, men inte ska jag väl behöva det?  :x

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

## #2 — Erik Juhlin, 2002-11-07T08:14Z

Stäng connection-objektet direkt efter du returnerat det i funktionen get_connection. Gör samma sak med get_recordset.

Och skippa då close subbarna.

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

## #3 — doggelito, 2002-11-07T08:50Z

glömde visa get_recordset:

```
' Skapa ett recordset ========================================================
Public Function get_recordset(strSql)
Dim objConn
Set objConn = get_connection()
Set get_recordset = objConn.Execute(strSql)
End Function
```

Om jag stänger objConn redan i get_connection så får jag inte skapa recordsetet:
Operation is not allowed when the object is closed. 
Jag kanske missförstod hur du menade?!

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

## #4 — Erik Juhlin, 2002-11-07T09:15Z

Så här tycker jag du ska skriva:

```
' Öppning av databas =========================================================
Public Function get_connection()
	Dim objConn
	Set objConn = Server.CreateObject("ADODB.Connection")
	objConn.CursorLocation = 3
	objConn.CommandTimeout = 180
	objConn.open "Driver={SQL Server};Server=xxx;Database=xxx;UID=xxx;PWD=xxx"
	Set get_connection = objConn
	Set objConn = Nothing
End Function

'Hämtar antal trådar  =========================================================
Public Sub getCounterThreds(Byval Categoryid)
	Dim rs
	Set rs = get_recordset("Select Count(Questionid) From Questions " & _
	"Where Categoryid = " & Categoryid & "  ;")
	If Not rs.Eof Then Response.Write rs(0)
	Set rs = Nothing
End Sub

' Skapa ett recordset ========================================================
Public Function get_recordset(strSql)
	Dim objConn
	Set objConn = get_connection()
	Set get_recordset = objConn.Execute(strSql)
	Set objConn = Nothing
End Function
```

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

## #5 — doggelito, 2002-11-07T09:38Z

Now we talking! :bire

Följdfråga: sätter du en timeout som kompensation för att inte objConn stängs?

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

## #6 — Erik Juhlin, 2002-11-07T09:59Z

objConn stängs. :)

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

## #7 — Erik Juhlin, 2002-11-07T10:00Z

Från MSDN:

> The CommandTimeout property specifies the amount of time, in seconds, before the command is presumed to have failed.

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

## #8 — Erik Juhlin, 2002-11-07T10:11Z

Ännu bättre enligt mig.

```
' Öppning av databas =========================================================
Public Function get_connection()
	Dim objConn
	Set objConn = Server.CreateObject("ADODB.Connection")
	objConn.CursorLocation = 3
	objConn.CommandTimeout = 180
	objConn.open "Driver={SQL Server};Server=xxx;Database=xxx;UID=xxx;PWD=xxx"
	Set get_connection = objConn
	Set objConn = Nothing
End Function

'Hämtar antal trådar  =========================================================
Public Sub getCounterThreds(Byval Categoryid)
	Dim rs
	Set rs = get_recordset("Select Count(Questionid) From Questions " & _
	"Where Categoryid = " & Categoryid & "  ;")
	If Not rs.Eof Then Response.Write rs(0)
	Set rs = Nothing
End Sub

' Skapa ett recordset ========================================================
Public Function get_recordset(strSql)
	Dim objConn, rs
	Set objConn = get_connection()
	Set rs = Server.CreateObject("ADODB.Recordset")
	rs.CursorLocation = 3
	rs.Open strSql, objConn, 3, 1
	rs.ActiveConnection = Nothing
	Set get_recordset = rs
	Set rs = Nothing
	Set objConn = Nothing
End Function

' Hör en SQL ========================================================
Public Function execute_sql(strSql)
	Dim objConn
	Set objConn = get_connection()
	If InStr(1, strSql, "UPDATE", 1) Or InStr(1, strSql, "DELETE", 1) Or InStr(1, strSql, "INSERT", 1) Then
		objConn.Execute strSql, , 128
	Else
		Set execute_sql = objConn.Execute(strSql)
	End If
	Set objConn = Nothing
End Function
```

Då kan du få ett frånkopplat recordset med get_recordset. Mycket bättre prestandamässigt. :)

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

## #9 — doggelito, 2002-11-07T10:22Z

Hey! coolt!
En sak till bara, tömmer man inte minnet när man skriver: Set objConn = Nothing?
Hur kan man i så fall skapa objektet objConn i Function get_connection() 
och samtidigt stänga det i samma function?
Trots detta så kan man sedan skapa ett recordset med den öppningen! jag förstår inte riktigt flödet i detta.

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

## #10 — Erik Juhlin, 2002-11-07T10:31Z

Du öppnar först objektet. Sen returnerar man det. När man har returnerat det så är man klar med det och kan stänga det "lokala" objektet. Objektet har då redan blivit returnerat och finns då i funktionen get_recordset. :)

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

## #11 — doggelito, 2002-11-07T10:35Z

Ahaa! Jag fattar, va kul, många tack!!! :bire

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

---

Tråden på webben: https://www.webforum.nu/amne/asp/58315-dim-function-sub
