Avatar billede dan_n Nybegynder
03. maj 2004 - 21:24 Der er 14 kommentarer og
1 løsning

Manuel sortering af records i en db, hvordan ?

Hey
Jeg er ved at lave en dynamisk menu hvor man kan tilfølge, og slette menupunkter. Jeg kunne dog godt tænke mig en funktion hvor man selv kan ændre på hiearakiet i min menu struktur.

Eller sagt på en anden måde, en funktion hvor på man flytte nogle database poster op og ned i forhold til hinnanden. altså med en "flyt op" og en "flyt ned" knap

Menupunkt 1      (flyt ned)
Menuounkt 2      (flyt ned)(flyt op)
Menupunkt 3                (flyt op)


Mit problem er hvordan jeg skal få hul på bylden, jeg kan ikke lige gennemskue hvordan jeg det skal gøres. Men det bliver vel noget med en databasekolonne, med tal som bliver højere og lavere i forhold til hinnanden afhængig af om man trykker op (flyt op) eller (flyt ned)

Jeg har fundet en javascriptløsning, som er meget lig med den løsning jeg gerne vil ende op med.

http://hjem.get2net.dk/Jakob.Aggernaes/temp/exp66097.html

Jeg ønsker dog ikke at min poster skal udskrives i en select box. Jeg søger altså en asp/vb løsning ?
Avatar billede dan_n Nybegynder
04. maj 2004 - 09:45 #1
Never mind, Har selv fundet en løsning
Avatar billede steen_hansen Forsker
04. maj 2004 - 09:47 #2
Kunne være interessant at se hvad du fandt ud :o)

Nogle tekst-bokse, hvor man angiver rækkefølge (1 - 2 - 3 ....)?

... ORDER by numbers
Avatar billede nute Nybegynder
04. maj 2004 - 10:01 #3
her er et eksempel:

<%@ language="VBScript" %>
<%
Set objConn = Server.CreateObject ("ADODB.Connection")
Dim strDSN            : strDSN = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath( "db.mdb" )
Dim strSelectSQL     : strSelectSQL = "SELECT * FROM menu ORDER BY sortID ASC"
Dim intSortID, intID, intDirection
Dim bFirst : bFirst = true

objConn.Open strDSN

Dim objRS

if( Request( "action" ) = "move" ) then
    intID         = CInt( Request( "id" ) )
    intSortID     = CInt( Request( "sortID" ) )
    intDirection = CInt( Request( "direction" ) )
    Dim strGetSwapSQL : strGetSwapSQL = "SELECT ID FROM menu WHERE sortID = " & ( CInt( intSortID ) + intDirection )
    Set objRS = objConn.Execute( strGetSwapSQL )
    Dim intSwapID : intSwapID = objRS( "ID" )
    Dim strMoveUpSQL : strMoveUpSQL = "UPDATE menu SET sortID = ( sortID + " & intDirection & " ) WHERE ID = " & intID
    objConn.Execute( strMoveUpSQL )
    Dim strMoveDownSQL : strMoveDownSQL = "UPDATE menu SET sortID = ( sortID - " & intDirection & " ) WHERE ID = " & intSwapID
    objConn.Execute( strMoveDownSQL )
end if


Set objRS = objConn.Execute( strSelectSQL )

Response.Write( "<table>" )
while not objRS.EOF
    intID         = objRS( "ID" )
    intSortID     = objRS( "sortID" )
    Response.Write( "<tr><td>" & objRS( "item" ) & "</td>" )
    if( bFirst ) then
        bFirst = false
        Response.Write( "<td>&nbsp;</td>" )
    else
        Response.Write( "<td style=""font-family:webdings""><a href=""?action=move&id=" & intID & "&sortID=" & intSortID & "&direction=-1"">5</a></td>" )
    End if
   
    objRS.MoveNext
    if( objRS.EOF ) then
        Response.write( "<td>&nbsp;</td>" )
    else
        Response.Write( "<td style=""font-family:webdings""><a href=""?action=move&id=" & intID & "&sortID=" & intSortID & "&direction=1"">6</a></td>" )
    end if
    Response.Write ( "</tr>" )
wend
Response.Write( "</table>" )
objRS.Close
Set objRS = Nothing

objConn.Close
Set objConn = Nothing
%>

databasen ser sådan ud:

ID - autonummer
item - Text
sortID - number

/nute
Avatar billede steen_hansen Forsker
04. maj 2004 - 10:18 #4
Fedest, takker nute :o)
Avatar billede nute Nybegynder
04. maj 2004 - 10:37 #5
anytime, steen :o]
Avatar billede dan_n Nybegynder
04. maj 2004 - 11:29 #6
Hey Nute

Dit eksempel er lidt smartere end den jeg selv fik bikset sammen. Jeg får en fejlmeddelse når jeg køre dit eksempel:

Fejltype:
Microsoft JET Database Engine (0x80004005)
Handlingen skal bruge en opdaterbar forespørgsel.
test.asp, line 42

linie 42: objConn.Execute( strGetSwapSQL )
Avatar billede nute Nybegynder
04. maj 2004 - 11:34 #7
du skal give write permissions på din database.

højreklik på basen > egenskaber > Sikkerhed

Her skal brugeren "everyone" (aner ikke hvad denne hedder på dansk) have skrive rettigheder ...
Avatar billede dan_n Nybegynder
04. maj 2004 - 11:44 #8
Jeg kan ikke finde fanebladet/knappen sikkerhed, når jeg højre klikker på min database i wwwroot mappen, eller på filen iis. Kan det gøres på en anden måde. Mappen hvor i databasen ligger skulle have skrive rettigheder
Avatar billede nute Nybegynder
04. maj 2004 - 11:49 #9
ok .. jeg aner ikke hvad fanebladet hedder på dansk (sidder selv med en engelsk windows) - men du har nok 3 faner ? det er det midterste faneblad.
Avatar billede dan_n Nybegynder
04. maj 2004 - 11:51 #10
Jeg har kun to "generelt" og "dokument info". Jeg køre på en xp
Avatar billede nute Nybegynder
04. maj 2004 - 12:28 #11
hmm ... hvordan kører du normalt dine insert eller update statements ?
Avatar billede dan_n Nybegynder
04. maj 2004 - 12:43 #12
Det var dog besynderligt, ingen af SQL insert/update ser ud til at virke. Lige meget hvilken af mine tidligere projekter, ser ud til at virke jeg får følgende fejl.

"Databasen eller objektet er skrivebeskyttet og kan ikke opdateres"

Jeg har forsøgt at genstarte iis men det gør ingen forskel. Det virkede tidligere idag, Har du en ide til hvordan jeg kommer videre eller får nulstillet IIS
Avatar billede nute Nybegynder
04. maj 2004 - 12:48 #13
Avatar billede dan_n Nybegynder
04. maj 2004 - 15:34 #14
jo mange tak, det var lidt kryptisk det med at man skulle "fjerne flybenet" før fanebladet sikkerhed kom frem.
Avatar billede nute Nybegynder
04. maj 2004 - 15:46 #15
så det fungerer nu ?

/nute
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