Avatar billede pelkjaer Nybegynder
13. december 2002 - 14:02 Der er 9 kommentarer og
1 løsning

flytte rundt på id

Jeg er desværre gået gået noget istå her, så jeg håber på lidt kvalificeret hjælp.

Problemstilling: Jeg skal kunne flytte rundt på nogle undermenupunkter - dvs. op og ned ift. hinanden.
Disse menuer har I db'en et felt der hedder "SubMenuId", og det er et tal felt.

Et screen shot der måske uddyber min problemstilling: http://mc46.dk/screen.gif

Er der nogle som kan give mig et eks. på hvordan det kunne løses? Eller blot en forklaring, jeg ved ikke helt hvordan jeg skal starte.
Avatar billede eagleeye Praktikant
13. december 2002 - 14:49 #1
Hvis du har ryk op og ryk ned så kan du bytte subMenuID på de to menu punkter som er berørt...

Eks.
submenuID  menu
  1          A
  2          B
  3          C
  4          D
  5          E

Hvis man rykker C en op hvor B er skal C og B bytte plads..

Du kommer nok til at bruge 3 UPDATES til databasen hvis det skal køres vi SQL da man kun kan update et submenuID af gangen.

NytID = 2
OldID = 3
temmpID = 0
"UPDATE xxx SET submunuID = " & tempID & " WHERE submunuID = " & oldID
"UPDATE xxx SET submunuID = " & OldID & " WHERE submunuID = " & NytID
"UPDATE xxx SET submunuID = " & NytID & " WHERE submunuID = " & temmpID

Så skulle det endnu med:

submenuID  menu
  1          A
  2          C
  3          B
  4          D
  5          E


Eller er den editor du har vist lavet som Javascript og man kun "opdater" ændring en gang?
Avatar billede pelkjaer Nybegynder
13. december 2002 - 14:57 #2
eagleeye>>online editoren er ikke inde i billedet her, alle funktioner på mit screenshot vedr. kun menupunkter.

Det med 3 updates forstår jeg godt, men hvordan flytter jeg op og ned? Det kan jeg ikke gennemskue.
Avatar billede eagleeye Praktikant
13. december 2002 - 15:09 #3
Hvis linket "ryk op" / "ryk ned" load samme side igen kan du overføre en parameter som fortæller hvilken der skal flyttes og om det er op eller ned.

Jeg går ud fra du udskriver menu punkterne med et loop hvor SQL sortere submenu punkterne efter deres ID.

<a href="?submenuID=<%=rs("submenuID")%>&dir=op">Ryk op</a>
Avatar billede pelkjaer Nybegynder
13. december 2002 - 15:15 #4
Okay, jeg forstår hvad du mener - nu bliver det spændene om jeg kan lave det så det funker *G*

læg bare et svar.
Avatar billede eagleeye Praktikant
13. december 2002 - 15:23 #5
Ok :)
Avatar billede pelkjaer Nybegynder
16. december 2002 - 13:04 #6
Det går ikke så godt her.
Kunne jeg få dig til at vise et eks på flyt op/ned - jeg går ud fra at du også forstiller dig at hvis man kører en &dir=op - så skifter punktet id med det der ligger umiddelbart over.
Avatar billede eagleeye Praktikant
16. december 2002 - 16:45 #7
Jeps.. prøver lige at lave et eks.
Avatar billede eagleeye Praktikant
16. december 2002 - 17:52 #8
Her er et eks på det jeg mener, hvis man skal havde mulighed for at flytte den fæørste ned bagest medn ryk op skal det laves lidt om så det kan tage højede for det for så skal der trækkes 1 fra hver submenuID, ligeledes med at rykke den sidste op føste med ryk ned...

Tabellen hedder menuer og har disse kolonner:
ID : autonummer
submenuID : tal  (1,2,3,4 osv )
navn : text


<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.RecordSet")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& server.mappath("db5.mdb")

'flyt op/ned
dir = Request.QueryString("dir")
if dir <> "" then
  oldId = Request.QueryString("id")
  tempID = 0
  if dir = "op" then
    newID = Int(oldId) - 1
  else
    newID = Int(oldId) + 1
  end if
 
  SQL = "UPDATE menuer SET submenuID = " & tempID & " WHERE submenuID = " & oldID
  Conn.Execute(SQL)
  SQL = "UPDATE menuer SET submenuID = " & oldID & " WHERE submenuID = " & newID
  Conn.Execute(SQL)
  SQL = "UPDATE menuer SET submenuID = " & newID & " WHERE submenuID = " & tempID
  Conn.Execute(SQL)
end if



'Udskriv formen..
'Man er vist nød til at hendte max submenuID for der ikke sker fejl..:
SQL = "SELECT max(submenuID) as maxID FROM menuer"
set rs = conn.Execute(SQL)
maxID = rs("maxID")

SQL = "SELECT submenuID, navn FROM menuer ORDER BY submenuID"
set rs = conn.Execute(SQL)

Response.Write "<table>"
Response.Write "<tr><td>Undermen title</td><td>Ryk op</td><td>Ryk ned</td></tr>"

do while not rs.EOF
  Response.Write "<tr>"
  Response.Write "<td>" & rs("navn") & "<td>"

  if Int(rs("submenuID")) > 1 then
    Response.Write "<td><a href=""?dir=op&id="&rs("submenuID")&""">ryk op</a><td>"
  else
    Response.Write "<td>...<td>"
  end if
  if Int(rs("submenuID")) < Int(maxID) then
    Response.Write "<td><a href=""?dir=ned&id="&rs("submenuID")&""">ryk ned</a><td>"
  else
    Response.Write "<td>...<td>"
  end if
  Response.Write "</tr>"

  rs.MoveNext
loop
%>
</table>
<%
Conn.Close
%>
</BODY>
</HTML>
Avatar billede pelkjaer Nybegynder
16. december 2002 - 19:06 #9
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.RecordSet")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& server.mappath("../../access/pecms.mdb")

'flyt op/ned
dir = Request.QueryString("dir")
if dir <> "" then
  oldId = Request.QueryString("SubMenuId")
  tempID = 0
  if dir = "op" then
    newID = Int(oldId) - 1
  else
    newID = Int(oldId) + 1
  end if
 
  SQL = "UPDATE submenus SET subMenuId = " & tempID & " WHERE subMenuId = " & oldID
  Conn.Execute(SQL)
  SQL = "UPDATE submenus SET subMenuId = " & oldID & " WHERE subMenuId = " & newID
  Conn.Execute(SQL)
  SQL = "UPDATE submenus SET subMenuId = " & newID & " WHERE subMenuId = " & tempID
  Conn.Execute(SQL)
end if

'Udskriv formen..
'Man er vist nød til at hendte max submenuID for der ikke sker fejl..:
SQL = "SELECT max(subMenuId) as maxID FROM submenus"
set rs = conn.Execute(SQL)
maxID = rs("maxID")

SQL = "SELECT subMenuId, SubMenuTitle FROM submenus ORDER BY subMenuId"
set rs = conn.Execute(SQL)

Response.Write "<table>"
Response.Write "<tr><td>Undermenu title</td><td>Ryk op</td><td>Ryk ned</td></tr>"

do while not rs.EOF
  Response.Write "<tr>"
  Response.Write "<td>" & rs("SubMenuTitle") & "<td>"

  if Int(rs("subMenuId")) > 1 then
    Response.Write "<td><a href=""?dir=op&SubMenuId="&rs("subMenuId")&""">ryk op</a><td>"
  else
    Response.Write "<td>...<td>"
  end if
  if Int(rs("subMenuId")) < Int(maxID) then
    Response.Write "<td><a href=""?dir=ned&SubMenuId="&rs("subMenuId")&""">ryk ned</a><td>"
  else
    Response.Write "<td>...<td>"
  end if
  Response.Write "</tr>"

  rs.MoveNext
loop
%>
</table>
<%
Conn.Close
%>
</BODY>
</HTML>
Avatar billede eagleeye Praktikant
16. december 2002 - 19:34 #10
Sådan her så skulle det være lige meget hvor stort spring der er mellem submenuID:


'flyt op/ned
dir = Request.QueryString("dir")
if dir <> "" then
  oldId = Request.QueryString("SubMenuID")
  tempID = 0
 
  SQL = "SELECT TOP 1 submenuID FROM submenus WHERE submenuID "
  if dir = "op" then
    SQL = SQL & " < " & oldID & " ORDER BY submenuID DESC"
    'newID = Int(oldId) - 1
  else
    SQL = SQL & " > " & oldID & " ORDER BY submenuID"
    'newID = Int(oldId) + 1
  end if
  Response.Write SQL
  set rs = conn.Execute(SQL)
  newID = rs("submenuID")
 
  SQL = "UPDATE submenus SET subMenuId = " & tempID & " WHERE subMenuId = " & oldID
  Conn.Execute(SQL)
  SQL = "UPDATE submenus SET subMenuId = " & oldID & " WHERE subMenuId = " & newID
  Conn.Execute(SQL)
  SQL = "UPDATE submenus SET subMenuId = " & newID & " WHERE subMenuId = " & tempID
end if



'Udskriv formen..
'Så er det nødvendigt at hendte min/max submenuID for der ikke sker fejl..:
SQL = "SELECT min(submenuID) as minID, max(submenuID) as maxID FROM submenus"
set rs = conn.Execute(SQL)
maxID = rs("maxID")
minID = rs("minID")

SQL = "SELECT submenuID, navn FROM submenus ORDER BY submenuID"
set rs = conn.Execute(SQL)

Response.Write "<table>"
Response.Write "<tr><td>Undermen title</td><td>Ryk op</td><td>Ryk ned</td></tr>"

do while not rs.EOF
  Response.Write "<tr>"
  Response.Write "<td>" & rs("navn") & "<td>"

  if Int(rs("submenuID")) > minID then
    Response.Write "<td><a href=""?dir=op&SubMenuId="&rs("submenuID")&""">ryk op</a><td>"
  else
    Response.Write "<td>...<td>"
  end if
  if Int(rs("submenuID")) < Int(maxID) then
    Response.Write "<td><a href=""?dir=ned&SubMenuId="&rs("submenuID")&""">ryk ned</a><td>"
  else
    Response.Write "<td>...<td>"
  end if
  Response.Write "</tr>"

  rs.MoveNext
loop
%>
</table>
<% 'Lukker for connection til databasen
Conn.Close
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester