Jag har en meny i ett forum där jag loppar alla poster i fältet "rubrik" och ger dom en länk där jag hänger på respektive id nummer till en undersida
<a href="lasa_artikel.asp?artikel=<%= RS("id")%>
där kan man sedan läsa allt som denna posten innehåller
Nu skulle jag vilja sortera om databasen enligt ID fältet
en tanke var att göra ett förmulär med dolda fält till posterna där man uppdaterade post "15" med innehållet i post "16" och "16" med "15" om man ville flytta posten uppåt och vise versa
En massa sessions med olika namn så att man inte raderar någon post och en massa info att skicka fram och tillbaka när jag bara vill byta ID nummer med varandra
skapa ett separat fält för sorteringsordningen. Allt blir mycket lättare då.
Vid upp skickar du med querystringsen för befintlig position och befitnlig position + 1 och vid ner ett steg befintlig position och befintlig position - 1
Det här är ett sådant tillfälle då ADODB.Recordset kommer till sin rätt
intPos = Request.QueryString("pos")
intNewPos = Request.QueryString("newpos")
strSQL = "SELECT SortField FROM myTable ORDER BY SortField ASC"
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open myDSN
Set objRS = Server.CreateObject("ADODB.Recordset")
'## -- öppna recordsetet i editerings läge --
objRS.Open strSQL, objConn, 3, 3
If Not objRS.EOF Then
objRS.MoveFirst
'#" -- stega fram till befintlig position --
objRS.Move intPos
'## -- ändra sorteringsordningen --
objRS("SortField") = intNewPos
objRS.Update
'## -- stega framåt till nästa post --
objRS.Move intNewPos
'## -- uppdatera sorteringsordningen --
objRS("SortField") = intPos
objRS.Update
End If
objRS.Close
Set objRS = Nothing
Det verkar jättebra. Har inte hunnit testa än men det slog mej att om man har 10 poster och raderar post 4 och 5, sedan vill man flytta ner 3 under 6. Försöker koden då inte att flytta den till 4?
Och en annan tanke var hur man gör så att första och sista bara går att flytta ner respektive upp
Med koden vill den flytta det antal steg som intNewPos är och inte till den raden men det går ju att skriva om med objRS.Move +1
'## -- stega framåt till nästa post --
objRS.Move intNewPos
Men problemen uppstår när det fattas rader som man har raderat
Finns det inget kommando som hämta nästa bara
Jag hämtar poster med nedan
<html>
<head><title>test</title>
</head>
<body>
<!--#INCLUDE FILE="adovbs.inc"--> <!--#INCLUDE FILE="koppling.asp"-->
<%
SQL = "SELECT * FROM texter ORDER BY ID DESC"
set rs = connect.execute(SQL)
%> <%Do until Rs.EOF
intCnt = intCnt + 1%>
<%
Dim nu
Dim ner
nu = RS("SortField")
ner = nu +1
%>
<a href="ta_imot.asp?pos=<%=nu%>&newpos=<%=ner%>"><%= RS("rubrik")%></a><BR><BR>
<%Rs.MoveNext%>
<%Loop%>
<%
rs.close
set rs = nothing
%>
</body>
</html>
Och tar i mot med nedan
<html>
<head><title>test</title>
</head>
<body>
<!--#INCLUDE FILE="adovbs.inc"-->
<%
intPos = Request.QueryString("pos")
intNewPos = Request.QueryString("newpos")
strSQL = "SELECT SortField FROM texter ORDER BY SortField ASC"
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=C:\inetpub\wwwroot\skoltidning\db.mdb"
Set objRS = Server.CreateObject("ADODB.Recordset")
'## -- öppna recordsetet i editerings läge --
objRS.Open strSQL, objConn, 3, 3
If Not objRS.EOF Then
objRS.MoveFirst
'#" -- stega fram till befintlig position --
objRS.Move intPos
'## -- ändra sorteringsordningen --
objRS("SortField") = intNewPos
objRS.Update
'## -- stega framåt till nästa post --
objRS.Move intNewPos
'## -- uppdatera sorteringsordningen --
objRS("SortField") = intPos
objRS.Update
End If
objRS.Close
Set objRS = Nothing
%>
</body>
</html>
så fort du tar bort en post måste du uppdatera sorteringsordningen oxå eftersom .Move använder sig av vilken position i recordsetet posten befinner sig på.
cya,
PatrikB
273 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25