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 :)
<%
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
%>
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?
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*
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
366 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e