Jag har problem med att skrva ut text från mitt recordset, den sista posten faller bort och istället får jag "error '80020009' Exception occurred". Hade ett liknande problem: Om jag plockar bort kollen för BOF i if-satserna så fungerar det: Du ska ALLTID använda ett connection objekt i ASP. Annars håller recordsetet öppet anslutningen internt vilket kräver resurser. Jag hänger inte med... använder jag inte connection objekt? Jag antar att MM_conn_STRING är en konstant eller sträng med din anslutnings sträng.<br> Jo det stämmer det är anslutningssträngen. Om du skapar din connection objekt. Kan du explecit stänga den. Det kan du inte om recordsetet skapar den. Dessutom kan du ju använda ett connection objekt till flera recordset. error '80020009' Exception occurred
Vad jag vill göra är att kunna skapa behörigheter för användare till vissa kategorier. Jag lägger alltså upp en användare och därefter ska jag lägga till eller kunna ändra behörighet till kategorier som användaren ska ha access till.
När jag klickar på ett av namen vill jag hämta in och skriva ut samtliga kategorier med tillhörande checkbox. Om användaren redan har access till vissa kategorier så ska dessa checkboxar vara förbockade.
Problemet uppstår när den sista kategorin ska skrivas ut vid "sin" checkbox.
Det ser ut som följer:
Hämtar in kategorier
<%
set cat = Server.CreateObject("ADODB.Recordset")
cat.ActiveConnection = MM_conn_STRING
cat.Source = "SELECT catid,catname FROM cat ORDER BY catid ASC"
cat.CursorType = 0
cat.CursorLocation = 2
cat.LockType = 3
cat.Open()
%>
Hämtar eventuella kategorier som användaren redan har behörighet till (tabellen innehåller catid och userid)
<%
set user_cat = Server.CreateObject("ADODB.Recordset")
user_cat.ActiveConnection = MM_conn_STRING
user_cat.Source = "SELECT catid,userid FROM user_cat WHERE userid = " & userID & " ORDER BY catid ASC"
user_cat.CursorType = 0
user_cat.CursorLocation = 2
user_cat.LockType = 3
user_cat.Open()
%>
Och slutligen skriver jag ut... eller nåja.. försöker iaf...
<%
if not cat.BOF or not cat.EOF then
do until cat.EOF
%>
<input type="checkbox" name="cat" value="<%=cat.Fields.Item("catid").Value%>"
<%if not user_cat.BOF or not user_cat.EOF then
if user_cat.Fields.Item("catid").Value = cat.Fields.Item("catid").Value then
%>
checked
<%
user_cat.MoveNext()
end if
end if
%>
>
<%
Response.Write(cat.Fields.Item("catname").Value & "<br>")
cat.MoveNext()
loop
end if
%>Sv: error '80020009' Exception occurred
Löste det med att ha en mellantabell där jag lagrade alla cat + om den är aktiv eller inte
cat
---
catid
catname
user
---------
userid
username
user_cat
---------
userid
catid
active
När jag addar en person har jag ett form som loppar ut samtliga cat:
Namn:
' loopa ut samtliga cat som finns och sätt ut kryss ruta efter dom
cat1:
cat2:
cat3:...
Sedan sparar jag ner de kryss som markerats i formuläret i user_cat tabellen
Vet inte om jag förklarat som en påse nötter...
Kanske finns en bättre lösning med att joina tabellerna i en enda fråga istället
/uffeSv: error '80020009' Exception occurred
if not cat.EOF or not cat.BOF then -» if not cat.EOF then
och
if not user_cat.EOF or not user_cat.BOF -» if not user_cat.EOF
Vet någon varför?
Vad är det jag har missat angående BOF?Sv: error '80020009' Exception occurred
Du kan lösa det med en under fråga istället:
<code>
<%
Dim Con
Dim cat
Dim strSQL
Dim fldId
Dim fldName
Dim fldSelected
Set Con = Server.CreateObject("ADODB.Recordset")
Con.Open MM_conn_STRING
strSQL = "SELECT cat.catid, cat.catname, cat.catid IN (SELECT user_cat.catid" & vbCrLf & _
" FROM user_cat" & vbCrLf & _
" WHERE user_cat.userid = " & userID & ") As catSelected" & vbCrLf & _
"FROM cat" & vbCrLf & _
"ORDER BY cat.catname"
Set cat = Server.CreateObject("ADODB.Recordset")
cat.Open strSQL, Con
Set fldId = cat.Fields.Item("catid")
Set fldName = cat.Fields.Item("catname")
Set fldSelected = cat.Fields.Item("catSelected")
Do Until cat.EOF
%>
<input type="checkbox" name="cat" value="<%=fldId.Value%>" <%if fldSelected.Value then Response.Write " checked"%>><%
Response.Write fldName.Value & "<br>" & vbCrLf
cat.MoveNext
Loop
Set fldId = Nothing
Set fldName = Nothing
Set fldSelected = Nothing
cat.Close
Set cat = Nothing
Con.Close
Set Con = Nothing
%>
</code> Sv: error '80020009' Exception occurred
Vart...?
Ta det lite tydligare...
Ska testa med din sql-sats.Sv: error '80020009' Exception occurred
Istället för att skriva:
<code>
cat.ActiveConnection = MM_conn_STRING
</code>
Bör du skriver du:
<code>
Set Con = Server.CreateObject("ADODB.Recordset")
Con.Open MM_conn_STRING
Set cat.ActiveConnection = Con
</code>Sv: error '80020009' Exception occurred
Det känns som "tårta på tårta" med två anslutningar. Är inte Con öppen ändå, den stängs ju inte förrän sist?Sv: error '80020009' Exception occurred