webForumDet fria alternativet

Samma databasanslutning, två gånger...

ASP

11 svar · 390 visningar · startad av Wickmark

Medlem sedan juli 2003162 inlägg
Frågan#1

FIXAT FELET
Har fet markerat felet:

Jag håller på med ett skriptarkiv, som skripten delas in i olika kategorier.
Kategorierna är i en tabell för sig, och skripten i en tabell för sig.

Följande kod funkar inte

  <%
    dim strColor
 
	Set Conn = Server.CreateObject("ADODB.Connection")
					Conn.Open "PROVIDER=Microsoft.JET.OLEDB.4.0; Data Source=" & DB_Webben
						
	Set RecSet = Server.CreateObject("ADODB.Recordset")
	Set Categories = Server.CreateObject("ADODB.Recordset")
	Categories.Open "SELECT * FROM S_Categories ORDER BY Cat_Position DESC", Conn, adOpenStatic, adLockOptimistic
		Do Until Categories.EOF
	RecSet.Open "SELECT * FROM S_Tutorials WHERE typeID="&Categories("ID")&" ORDER BY "&order&" "&how& "", Conn, adOpenStatic, adLockOptimistic	'<---- Rad 96
							if RecSet.EOF Then
							Response.Write("<tr><td colspan=""5"">No Tutorials at the moment</td></tr>")
							else
							strColor = "#FFFFFF"
							Do Until RecSet.EOF
								
							     if strColor = "#F4F4F4" Then
							     strColor = "#FFFFFF"
							     else
							     strColor = "#F4F4F4"
							     end if
	%>
  <tr style="background-color:<%=strColor%>;"> 
    <td><%=RecSet("ID")%></td>
    <td>» <a href="default.asp?c=grey&hp=w&action=readArticle&artID=<%=RecSet("ID")%>&s=<%=RecSet("sStatus")%>" target="_self" onMouseOver="window.status='Read the Article'; return true" onMouseOut="window.status='Zanathel.tk'; return true"><%=RecSet("Caption")%></a></td>
    <td><%=RecSet("Date")%></td>
    <td><%=Categories("Cat_Name")%></td>
    <td><%=RecSet("Author")%></td>
  </tr>
  <%
							RecSet.MoveNext
								loop
		'<------ HÄR SKA RECSET.CLOSE VARA JU :)
end if
							Categories.MoveNext
								Loop
						Categories.Close : Set Categories = Nothing
						[b]RecSet.Close[/b] : Set RecSet = Nothing 'RECSET FLYTTA UPPÅT
						Conn.Close : Set Conn = Nothing
	%>

Hur gör jag ?

MVH
Wickmark

EDIT:
Felmess:
ADODB.Recordset error '800a0e79'
Operation is not allowed when the object is open.

/lwswe/green/_documents/_sub/01.asp, line 96

Medlem sedan juni 200032 967 inlägg
#2

Rad 96?

Medlem sedan juli 2003162 inlägg
#3

@nders skrev:

Rad 96?

Oj, sorry ;)

Rad 96 är:

RecSet.Open "SELECT * FROM S_Tutorials WHERE typeID="&Categories("ID")&" ORDER BY "&order&" "&how& "", Conn, adOpenStatic, adLockOptimistic
Medlem sedan juni 200032 967 inlägg
#4

Hmm... Du borde få ett felmeddelande på Set Categories = Server.CreateObjec("ADODB.Recordset"). Eller har t:et ramlat bort när du klistrade in koden?

Hur ser koden ovanför det här kodblocket ut?

Medlem sedan juli 2003162 inlägg
#5

@nders skrev:

Hmm... Du borde få ett felmeddelande på Set Categories = Server.CreateObjec("ADODB.Recordset"). Eller har t:et ramlat bort när du klistrade in koden?

Hur ser koden ovanför det här kodblocket ut?

Precis över är det mest HTML kod, fast längst upp finns följande rader:

  <%
				dim iTotorials
					Set Conn = Server.CreateObject("ADODB.Connection")
					Conn.Open "PROVIDER=Microsoft.JET.OLEDB.4.0; Data Source=" & DB_Webben
						
						Set RecSet = Server.CreateObject("ADODB.Recordset")
						
						RecSet.Open "SELECT * FROM S_Tutorials", Conn, adOpenStatic, adLockOptimistic	
							if RecSet.EOF Then
								iTutorials = 0
							else
								iTotorials = RecSet.RecordCount
							end if
						RecSet.Close : Set RecSet = Nothing
						Conn.Close : Set Conn = Nothing

				dim order
				dim how
				dim order_visual
				dim how_visual
										
						if Request.QueryString("o") = "" Then
							order = "TypeID"
							order_visual = "Category"
						elseif Request.QueryString("o") = "1" Then
							order = "ID"
							order_visual = "ID"
						elseif Request.QueryString("o") = "2" Then
							order = "Caption"
							order_visual = "Name"
						elseif Request.QueryString("o") = "3" Then
							order = "Date"
							order_visual = "Date"
						elseif Request.QueryString("o") = "4" Then
							order = "TypeID"
							order_visual = "Category"
						elseif Request.QueryString("o") = "5" Then
							order = "Author"
							order_visual = "Author"
						end if
						
						if Request.QueryString("h") = "" or Request.QueryString("h") = "ASC" Then
							how = "ASC"
							how_visual = "Ascanding"
						else
							how = "DESC"
							how_visual = "Descanding"
						end if
%>

Sen har jag haft problem med <!--#incude file="/Map/file.asp"-->
Servern klagar på att man inte får börja med /
Äldre eller nyare version av ASP? (../ i server.mappath accepteras inte heller)'

*EDIT* Tét hade ramlat bort

Medlem sedan jan. 20032 285 inlägg
#6

Om du vill inklutera en fil från rooten får du skriva så här:

<!-- #include [b]virtual[/b]="/Map/file.asp" -->
Medlem sedan juli 2003162 inlägg
#7

Uppdatering!

Felet <-- länk till felsidan

Som ni kanske märker så klarar de skriva ut 'misc', men när den ska byta, crashar det!

Medlem sedan juni 200032 967 inlägg
#8
  1. Skall du utgå ifrån roten när du ska inkludera en fil, så anger du med slash i början, ja. Däremot ska du använda include virtual, inte include file. Vad gäller server.mappath vet jag inte.

Angående din kod: Du får se till att korrläsa lite. Ska du använda variabeln iTutorials eller iTotorials?
Jag förstår inte heller din kodindentering, den gör det ganska svårt att hänga med i koden.

Hur som helst: Jag hade börjat med att byta ut detta kodstycke:

				dim iTotorials
					Set Conn = Server.CreateObject("ADODB.Connection")
					Conn.Open "PROVIDER=Microsoft.JET.OLEDB.4.0; Data Source=" & DB_Webben
						
						Set RecSet = Server.CreateObject("ADODB.Recordset")
						
						RecSet.Open "SELECT * FROM S_Tutorials", Conn, adOpenStatic, adLockOptimistic	
							if RecSet.EOF Then
								iTutorials = 0
							else
								iTotorials = RecSet.RecordCount
							end if
						RecSet.Close : Set RecSet = Nothing
						Conn.Close : Set Conn = Nothing

mot:

dim iTutorials
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "PROVIDER=Microsoft.JET.OLEDB.4.0; Data Source=" & DB_Webben
				
Set RecSet = Conn.Execute ("SELECT count(*) FROM S_Tutorials")
iTutorials = RecSet(0)
RecSet.Close : Set RecSet = Nothing

Notera att jag inte stängt connectionobjektet, du ska ju använda det igen senare. Det finns ingen anledning till att skapa och förstöra hela tiden, utan använd klart objektet, sedan förstör du det. Du ska alltså ta bort koden som skapar och öppnar Conn längre ner i filen.

I övrigt heter det Ascending resp. Descending. ;)

Mvh

Medlem sedan juni 200032 967 inlägg
#9

Wickmark skrev:

Uppdatering!

Felet <-- länk till felsidan

Som ni kanske märker så klarar de skriva ut 'misc', men när den ska byta, crashar det!

Jag förstår ingenting. Vad ska jag klicka på :q

Medlem sedan juli 2003162 inlägg
#10

@nders skrev:

  1. Skall du utgå ifrån roten när du ska inkludera en fil, så anger du med slash i början, ja. Däremot ska du använda include virtual, inte include file. Vad gäller server.mappath vet jag inte.

Angående din kod: Du får se till att korrläsa lite. Ska du använda variabeln iTutorials eller iTotorials?
Jag förstår inte heller din kodindentering, den gör det ganska svårt att hänga med i koden.

Hur som helst: Jag hade börjat med att byta ut detta kodstycke:

				dim iTotorials
					Set Conn = Server.CreateObject("ADODB.Connection")
					Conn.Open "PROVIDER=Microsoft.JET.OLEDB.4.0; Data Source=" & DB_Webben
						
						Set RecSet = Server.CreateObject("ADODB.Recordset")
						
						RecSet.Open "SELECT * FROM S_Tutorials", Conn, adOpenStatic, adLockOptimistic	
							if RecSet.EOF Then
								iTutorials = 0
							else
								iTotorials = RecSet.RecordCount
							end if
						RecSet.Close : Set RecSet = Nothing
						Conn.Close : Set Conn = Nothing

mot:

dim iTutorials
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "PROVIDER=Microsoft.JET.OLEDB.4.0; Data Source=" & DB_Webben
				
Set RecSet = Conn.Execute ("SELECT count(*) FROM S_Tutorials")
iTutorials = RecSet(0)
RecSet.Close : Set RecSet = Nothing

Notera att jag inte stängt connectionobjektet, du ska ju använda det igen senare. Det finns ingen anledning till att skapa och förstöra hela tiden, utan använd klart objektet, sedan förstör du det. Du ska alltså ta bort koden som skapar och öppnar Conn längre ner i filen.

I övrigt heter det Ascending resp. Descending. ;)

Mvh

Jag använde variablen iTutorials för att räkna antalet guider i databasen!

Hittade förresten felet nyss :) Felbeskrivning längst upp!

*ALLA* TACK FÖR ERA SVAR!

Medlem sedan juni 200032 967 inlägg
#11

Wickmark skrev:

Jag använde variablen iTutorials för att räkna antalet guider i databasen!

Ja, men finns det noll kallade du variabeln för iTutorials, annars iTotorials. Som sagt, korrläs koden. ;)

Medlem sedan juli 2003162 inlägg
#12

@nders skrev:

Wickmark skrev:

Jag använde variablen iTutorials för att räkna antalet guider i databasen!

Ja, men finns det noll kallade du variabeln för iTutorials, annars iTotorials. Som sagt, korrläs koden. ;)

Hahahah! :e

Jag tyckte verkligen jag läste igenom koden, men det bevisar väl att jag inte gjorde det tillräckligt noggrant :D

273 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
133 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)