webForumDet fria alternativet

Connection - Öppen/stängd?

ASP

4 svar · 151 visningar · startad av JE

Medlem sedan juni 2000144 inlägg
Frågan#1

Om man gör en function som ser ut som nedan, hur stängs anslutningen?

Function GetRecords(strSQL, ConnType, rsLockType, rsCursorType)
	Set objConn = Server.CreateObject("ADODB.Connection")
	objConn.ConnectionString = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="&Server.MapPath("database/test.mdb")
	If ConnType = 1 Then
		objConn.Open
		Set GetRecords = objConn.Execute(strSQL)
	ElseIf ConnType = 2 Then
		Set objRS = Server.CreateObject("ADODB.Recordset")
		Set GetRecords = objRS.Open(strSQL, 1, 2)
	ElseIf ConnType = 3 Then
		objConn.Open
		objConn.Execute(strSQL)
		objConn.Close
		Set objConn = Nothing
	End If
End Function

Ifall t.ex ConnType = 1 så returneras ett Recordset men skriver men sedan objConn.Close efter man använt det så visas bara:
Object required: 'objConn'

Gjorde 3 olika typer av anslutningar (ConnType), den första ifall man bara behöver rada upp infon rakt upp o ner, den andra ifall man måste använda "paging" fast den har ja inte fått att funka :), den tredje ifall den inte ska returnera något Recordset (update, insert satser).

Är detta ett bra sätt att ansluta till en databas? Synpunkter tack :)

------------------
/JE

Medlem sedan maj 2000175 inlägg
#2

Det här har funkat bra för mig:

<%
  Function ExecuteSQL(ByVal sSql, ByVal vCn)
    Dim oRs, oCn, sTokens

    sTokens	= Split(sSql)
    If (Ubound(sTokens) = 0) Then Exit Function

    If (IsObject(vCn)) Then
      Set oCn = vCn
    Else
      Set oCn	= Server.CreateObject("ADODB.Connection")
      oCn.Open vCn

      If (InStr("INSERT UPDATE DELETE", UCase(sTokens(0)))) Then
        oCn.Execute sSql
      Else
        Set oRs	= Server.CreateObject("ADODB.Recordset")
			
        oRs.CursorLocation = 3
        oRs.Open sSql, oCn, 0, 4
        Set oRs.ActiveConnection = Nothing

        Set ExecuteSQL = oRs
    End If

    oCn.Close
    Set oCn	= Nothing

  End Function
%>
Medlem sedan juni 2000144 inlägg
#3

Ok, fast skriver jag in:
objConn.Close
Set objConn = Nothing
i slutet om ConnType är 1 eller 2 så får jag ett felmeddelande att:
Item cannot be found in the collection corresponding to the requested name or ordinal

Försöker jag stänga objectet efter att jag använt Recordsetet så står det:
Object required: 'objConn'

Stängs objectet automatiskt efter att functionen anropats, eller hur funkar det?

------------------
/JE

Medlem sedan mars 20002 836 inlägg
#4

hello,

jag skulle inte stänga connection inne i If statsen utan stänga connection efter End If.
[r]

Function ExecuteSQL(ByVal sSql, ByVal vCn)
Dim oRs, oCn, sTokens
sTokens = Split(sSql)
If (Ubound(sTokens) = 0) Then Exit Function

If (IsObject(vCn)) Then
Set oCn = vCn
Else
Set oCn = Server.CreateObject("ADODB.Connection")
oCn.Open vCn

If (InStr("INSERT UPDATE DELETE", UCase(sTokens(0)))) Then
oCn.Execute sSql
Else
Set oRs = Server.CreateObject("ADODB.Recordset")

oRs.CursorLocation = 3
oRs.Open sSql, oCn, 0, 4
Set oRs.ActiveConnection = Nothing

Set ExecuteSQL = oRs
End If
If IsObject(oCn) Then
oCn.Close
Set oCn = Nothing
End If
End Function

[/r]
cya,
PatrikB

------------------
*Det jämnar ut sig sa han som sket i byxan och satte sig ned*

[Redigerat av PatrikB den 22 maj 2001]

Medlem sedan juni 2000144 inlägg
#5

Men skriver jag
objConn.Close
Set objConn = Nothing
i functionen efter ifsatserna får jag:
Item cannot be found in the collection corresponding to the requested name or ordinal.

Hur skulle ni göra om ni ville ha en liknande function? Kommer in på någon lösning som funkar verkar det som.

------------------
/JE

255 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
116 ms — ändringar (db)