webForumDet fria alternativet

ändra kolumn för alla poster

ASP

4 svar · 258 visningar · startad av eas

Medlem sedan sep. 2001269 inlägg
Frågan#1

Tja,
nu har jag som ni kan tänka ett litet problem.
Det är nämnligen så att jag har en selectbox (<select>) med poster från en databas som jag kan flytta upp och ner.

Nu vill jag spara platsvärdet (document.bytForm.bytSelect.selectedIndex) för varje post i databasen. Varje val i selectboxen (<option>) har värdet av id-numret till posten.

Det jag inte fårstår är hur jag ska bära mig åt för att spara värdena till rätt post.

Jag har en liten teori om att jag kan skriva värdena i ett hidden-fält och id-numrena i ett anat och sedan skicka med dessa till sidan som lägger till i databasen.
Senan tänkte jag att man skulle kunna köra split och dela upp fälten i Arrays.
Slutligen skulle man då kunna bestämma i vilka poster man skulle lägga till talen och köra RecSet inuti nån form av loop.

Lite kod
I HEAD:

<script>
function upp()
{
i=document.bytForm.bytSelect.selectedIndex;
temp = document.bytForm.bytSelect[i].text;
temp2 = document.bytForm.bytSelect[i].value;
document.bytForm.bytSelect[i].text = document.bytForm.bytSelect[i-1].text;
document.bytForm.bytSelect[i].value = document.bytForm.bytSelect[i-1].value;
document.bytForm.bytSelect[i-1].text = temp;
document.bytForm.bytSelect[i-1].value = temp2;
document.bytForm.bytSelect.selectedIndex-=1;
}

function ner()
{
i=document.bytForm.bytSelect.selectedIndex;
temp = document.bytForm.bytSelect[i].text;
temp2 = document.bytForm.bytSelect[i].value;
document.bytForm.bytSelect[i].text = document.bytForm.bytSelect[i+1].text;
document.bytForm.bytSelect[i].value = document.bytForm.bytSelect[i+1].value;
document.bytForm.bytSelect[i+1].text = temp;
document.bytForm.bytSelect[i+1].value = temp2;
document.bytForm.bytSelect.selectedIndex+=1;
}
</script>

I BODY:

<form name=bytForm>
<select name=bytSelect>
<%
Set Connect = Server.CreateObject("ADODB.Connection") 
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("javascript.mdb")&";"
Set RecSet = Server.CreateObject("ADODB.Recordset")
Visa = "SELECT rubrik,id,ordning FROM "&Request.Querystring("tabell")&" ORDER BY ordning"
RecSet.Open Visa, Connect, adOpenStatic, adLockOptimistic

Do Until RecSet.EOF
	Response.write "<option value='"&RecSet("id")&"'>"&RecSet("rubrik")
RecSet.MOVENEXT
LOOP

RecSet.close
Connect.close
%>
</select>

<input type=button value="^" onclick="if (document.bytForm.bytSelect.selectedIndex > 0) upp();  else alert('Den är redan först');">
<input type=button value="v" onclick="if (document.bytForm.bytSelect.selectedIndex < document.bytForm.bytSelect.length-1) ner();  else alert('Den är redan sist');"">
<p>

</form>
Medlem sedan sep. 2001269 inlägg
#2

Nu har jag kommit en bra bit på vägen:

admin_ordning.asp
I HEAD:

<script>
function upp()
{
i=document.bytForm.bytSelect.selectedIndex;
temp = document.bytForm.bytSelect[i].text;
temp2 = document.bytForm.bytSelect[i].value;
document.bytForm.bytSelect[i].text = document.bytForm.bytSelect[i-1].text;
document.bytForm.bytSelect[i].value = document.bytForm.bytSelect[i-1].value;
document.bytForm.bytSelect[i-1].text = temp;
document.bytForm.bytSelect[i-1].value = temp2;
document.bytForm.bytSelect.selectedIndex-=1;
skrivId()
}

function ner()
{
i=document.bytForm.bytSelect.selectedIndex;
temp = document.bytForm.bytSelect[i].text;
temp2 = document.bytForm.bytSelect[i].value;
document.bytForm.bytSelect[i].text = document.bytForm.bytSelect[i+1].text;
document.bytForm.bytSelect[i].value = document.bytForm.bytSelect[i+1].value;
document.bytForm.bytSelect[i+1].text = temp;
document.bytForm.bytSelect[i+1].value = temp2;
document.bytForm.bytSelect.selectedIndex+=1;
skrivId()
}

function skrivId()
{
document.bytForm.bytId.value = '';
for (i=0; i<document.bytForm.bytSelect.length; ++i)
	document.bytForm.bytId.value += document.bytForm.bytSelect[i].value + ',';
}
</script>

I BODY:

<form name=bytForm action="admin_ordning2.asp" method=post>
<select name=bytSelect>
<%
Set Connect = Server.CreateObject("ADODB.Connection") 
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("javascript.mdb")&";"
Set RecSet = Server.CreateObject("ADODB.Recordset")
Visa = "SELECT rubrik,id,ordning FROM "&Request.Querystring("tabell")&" ORDER BY ordning"
RecSet.Open Visa, Connect, adOpenStatic, adLockOptimistic

Do Until RecSet.EOF
	Response.write "<option value='"&RecSet("id")&"'>"&RecSet("rubrik")
RecSet.MOVENEXT
LOOP

RecSet.close
Connect.close
%>
</select>

<input type=button value="^" onclick="if (document.bytForm.bytSelect.selectedIndex > 0) upp();  else alert('Den är redan först');">
<input type=button value="v" onclick="if (document.bytForm.bytSelect.selectedIndex < document.bytForm.bytSelect.length-1) ner();  else alert('Den är redan sist');"">
<p>
<input type=text name=bytId>
<p>
<input type=submit value="OK">
</form>

admin_ordning2.asp

<!-- #include file="adovbs.inc" -->
<%
arrId = split(Request.Form("bytId"), ",")

Set Connect = Server.CreateObject("ADODB.Connection") 
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("javascript.mdb")&";"
Set RecSet = Server.CreateObject("ADODB.Recordset")

For i=0 to Ubound(arrId)
	
	Red = "SELECT ordning,id FROM "&Request.Querystring("tabell")&" WHERE id="&arrId(i)
	RecSet.Open Red, Connect, adOpenStatic, adLockOptimistic
		
		RecSet("ordning") = i
		
	RecSet.close

NEXT

Connect.close

Response.write "<script> alert('Informationen sparad!'); location.href='admin.asp'; </script>"

%>

På admin_ordning2.asp får jag följande felmeddelande:

Microsoft OLE DB Provider for ODBC Drivers fel '80040e14' 

[Microsoft][Drivrutin för ODBC Microsoft Access] Syntaxfel i FROM-instruktion. 

/javascript/admin_ordning2.asp, rad 12

Vad kan det tros bero på?

Medlem sedan juni 200032 967 inlägg
#3

Och vad innehåller Request.Querystring("tabell") ?

Skriv ut den färdiga SQL-frågan med Response.write så får vi se hur den ser ut.

Mvh,

Medlem sedan sep. 2001269 inlägg
#4

Öhh, oj!
Request.Querystring("tabell") var vist tom...

Jag ändrade formen till:

<form name=bytForm action="admin_ordning2.asp?tabell=<%=Request.Querystring("tabell")%>" method=post>

Om jag skriver ut Red blir det:

SELECT ordning,id FROM kurser WHERE id=3

Hursomhelst får jag nu istället felmeddelnde på raden som innehåller RecSet.close

ADODB.Recordset fel '800a0c93' 

Åtgärden som programmet begärt är inte tillåten i det här sammanhanget. 

/javascript/admin_ordning2.asp, rad 17
Medlem sedan sep. 2001269 inlägg
#5

JAAA!!!! :stud

Jag löste det!
:birp :birp :birp :birp :birp :birp

Så här ser den färdiga koden ut:

<!-- #include file="adovbs.inc" -->
<%
arrId = split(Request.Form("bytId"), ",")

Set Connect = Server.CreateObject("ADODB.Connection") 
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("javascript.mdb")&";"
Set RecSet = Server.CreateObject("ADODB.Recordset")

For i=0 to Ubound(arrId)-1
	
	Red = "SELECT ordning,id FROM "&Request.Querystring("tabell")&" WHERE id="&arrId(i)
	RecSet.Open Red, Connect, adOpenStatic, adLockOptimistic
		
		RecSet("ordning") = i
		RecSet.Update
		
	RecSet.close

NEXT

Connect.close

Response.write "<script> alert('Informationen sparad!'); location.href='admin.asp'; </script>"

%>
266 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
132 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)