Avatar billede likedon Nybegynder
27. august 2003 - 12:06 Der er 30 kommentarer og
2 løsninger

Byt rundt på værdier

række-id1: har værdien 4 i feltet 'tal'
række-id2: har værdien 5 i feltet 'tal'

hvordan bytter jeg rundt på værdierne i databasen.

række-id1: har værdien 5 i feltet 'tal'
række-id2: har værdien 4 i feltet 'tal'
Avatar billede socle Nybegynder
27. august 2003 - 12:17 #1
sådan(?)

verd1 = rs("række-id1")
verd2 = rs("række-id2")
rs.fields("række-id1") = verd2
rs.fields("række-id2") = verd1
rs.update
Avatar billede likedon Nybegynder
27. august 2003 - 12:29 #2
jeg tror ikke jeg fik det hele med:

Jeg har et link der giver mig id og priotet for et menupunkt.

det jeg så skal er at have den til at bytte plads med det punkt der ligger over det, hvis der er et.

altså noget med at jeg skal finde id'en for det andet punkt og dens priotetsværdi
Avatar billede likedon Nybegynder
27. august 2003 - 12:29 #3
putte lige nogle flere pt i den, for den er lidt større...
Avatar billede likedon Nybegynder
27. august 2003 - 12:33 #4
alternativt, kan jeg også bruge et link til hvor jeg kan hendte sådan noget ned henne, altså et admin-sytem hvor det virker, og så kan selv hugge det.
Avatar billede socle Nybegynder
27. august 2003 - 12:39 #5
hvis du trækker id og prioritet ud fra databasen, kan du så ikke bare sortere efter prioritet?:

sql = "SELECT id, prioritet FROM tabel ORDER BY prioritet"

eller er det prioriteringen mellem posterne i tabellen du vil lave om på, ved at opdatere indholdet i tabellen via asp?
Avatar billede likedon Nybegynder
27. august 2003 - 12:44 #6
filmid=Int(Request("filmid"))
brugerid=Int(Request("brugerid"))
priotet=Int(Request("priotet"))

SQL = "SELECT * FROM oenskeliste WHERE brugerid="&brugerid&" AND priotet="&priotet&" ORDER BY priotet ASC"
Set RSbad = Server.CreateObject("ADODB.Recordset")
RSbad.CursorLocation = 3
RSbad.CursorType = 3
RSbad.ActiveConnection = Conn
RSbad.Open SQL, Conn, 1, 3
film2id=RSbad("id")
film2priotet=RSbad("priotet")
film2priotet=film2priotet+1
RSbad.close
Set RSbad = Nothing


sql = "UPDATE oenskeliste SET priotet= '" & priotet &"'"
sql = sql & "WHERE id = " & filmid
Set rs = Connupdate.Execute (sql)



sql2 = "UPDATE oenskeliste SET priotet= '" & film2priotet &"'"
sql2 = sql2 & "WHERE id = " & filmid2id
Set rs = Connupdate.Execute (sql2)
Connupdate.Close



Jeg tror svaret er ja til dit sidste spørgsmål
Avatar billede likedon Nybegynder
27. august 2003 - 12:47 #7
UPS:

filmid=Int(Request("filmid"))
brugerid=Int(Request("brugerid"))
priotet=Int(Request("priotet"))

priotet=priotet-1

SQL = "SELECT * FROM oenskeliste WHERE brugerid="&brugerid&" AND priotet="&priotet&" ORDER BY priotet ASC"
Set RSbad = Server.CreateObject("ADODB.Recordset")
RSbad.CursorLocation = 3
RSbad.CursorType = 3
RSbad.ActiveConnection = Conn
RSbad.Open SQL, Conn, 1, 3
film2id=RSbad("id")
film2priotet=RSbad("priotet")
film2priotet=film2priotet+1
RSbad.close
Set RSbad = Nothing


sql = "UPDATE oenskeliste SET priotet= '" & priotet &"'"
sql = sql & "WHERE id = " & filmid
Set rs = Connupdate.Execute (sql)



sql2 = "UPDATE oenskeliste SET priotet= '" & film2priotet &"'"
sql2 = sql2 & "WHERE id = " & filmid2id
Set rs = Connupdate.Execute (sql2)
Connupdate.Close
Avatar billede socle Nybegynder
27. august 2003 - 12:49 #8
tabel:
id  prio
1    4
2    3
3    5

'har hentet * fra tabellen hvor id = 1
iniprio = rs("prio")
'så bruger du
set rs = "SELECT prio FROM tabel WHERE prio = (" & iniprio & "+1)"
'herefter
if not rs.eof then
newprio = rs("prio")
set rsup = "UPDATE tabel SET prio = " & newprio & " WHERE prio = " & iniprio
set rsup = "UPDATE tabel SET prio = " & iniprio & " WHERE prio = " & newprio
end if
rs.close
'osv

'er det sådan noget?
Avatar billede likedon Nybegynder
27. august 2003 - 12:50 #9
det der sker er at den rigtigt nok sætter priotet til at være en mindre på det første punkt, men den kan ikke finde ud af at sætte priotet til at være +1 på det punkt den finder i databasen, og jeg ender med at de begge har samme værdi
Avatar billede likedon Nybegynder
27. august 2003 - 12:50 #10
prøver lige
Avatar billede likedon Nybegynder
27. august 2003 - 13:15 #11
Jeg har samlet det hele, men får følgende fejl:
Microsoft VBScript runtime error '800a01a8'

Object required: '[string: "UPDATE oenskeliste S"]'


KODE:

filmid=3
brugerid=4
priotet=3
iniprio=2

strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../database/filmtest.mdb")
Set Connupdate = Server.CreateObject("ADODB.Connection")
Connupdate.Open strDSN

SQL = "SELECT priotet FROM oenskeliste WHERE brugerid="&brugerid&" AND priotet = " & iniprio & ""
Set rs = Server.CreateObject("ADODB.Recordset")
rs.CursorLocation = 3
rs.CursorType = 3
rs.ActiveConnection = Conn
rs.Open SQL, Conn, 1, 3

'herefter
if not rs.eof then
newprio = rs("priotet")
newprio=2
set sql = "UPDATE oenskeliste SET priotet = " & newprio & " WHERE priotet = " & priotet
set sql = "UPDATE oenskeliste SET priotet = " & priotet & " WHERE priotet = " & newprio
Set rs = Connupdate.Execute (sql)
Connupdate.Close
end if
Avatar billede likedon Nybegynder
27. august 2003 - 13:18 #12
pokker nu gik det heel i kluder
Avatar billede socle Nybegynder
27. august 2003 - 13:22 #13
prøv:

'herefter
if not rs.eof then
newprio = rs("priotet")
newprio=2 '??
rs.close

set sql = "UPDATE oenskeliste SET priotet = " & newprio & " WHERE priotet = " & priotet
Set rs = Connupdate.Execute (sql, Conn, 1, 3)
'så vidt jeg husker skal man ikke lukke updates

set sql = "UPDATE oenskeliste SET priotet = " & priotet & " WHERE priotet = " & newprio
Set rs = Connupdate.Execute (sql, Conn, 1, 3)
Connupdate.Close
end if
Avatar billede socle Nybegynder
27. august 2003 - 13:30 #14
næh, det ser mere ud som:

prøv:

'herefter
if not rs.eof then
newprio = rs("priotet")
newprio=2 '??
rs.close

set sql = "UPDATE oenskeliste SET priotet = " & newprio & " WHERE priotet = " & priotet
rs.Open sql, Conn, 1, 3 '***** her nyt *****
'så vidt jeg husker skal man ikke lukke updates

set sql = "UPDATE oenskeliste SET priotet = " & priotet & " WHERE priotet = " & newprio
rs.Open sql, Conn, 1, 3 '***** her nyt *****
Connupdate.Close
end if
Avatar billede likedon Nybegynder
27. august 2003 - 13:43 #15
Det der sker nu er:

før flytning:

id1=1
id2=2
id3=3

efter jeg køre funktionen ved kilk på id3:
id=1
id2=3
id3=3

den mangler at smide nye værdi på id3

kode:

filmid=Int(Request("filmid"))
brugerid=Int(Request("brugerid"))
priotet=Int(Request("priotet"))

iniprio=priotet-1

dsn=  "Driver={Microsoft Access Driver (*.mdb)};DBQ="&Server.Mappath("../database/filmtest.mdb")
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open dsn
SQL = "SELECT priotet FROM oenskeliste WHERE brugerid="&brugerid&" AND priotet = " & iniprio & ""
Set rs = Server.CreateObject("ADODB.Recordset")
rs.CursorLocation = 3
rs.CursorType = 3
rs.ActiveConnection = Conn
rs.Open SQL, Conn, 1, 3

'herefter
if not rs.eof then
newprio = rs("priotet")

sql = "UPDATE oenskeliste SET priotet= '" & newprio &"'"
sql = sql & "WHERE priotet = " & priotet
Set rs = Conn.Execute (sql)

sql2 = "UPDATE oenskeliste SET priotet= '" & priotet &"'"
sql2 = sql2 & "WHERE priotet = " & iniprio
Set rs2 = Conn.Execute (sql2)


end if
Avatar billede likedon Nybegynder
27. august 2003 - 14:04 #16
hvis jeg bytter rundt på de to updates, så er det omvendt, hvorfor vil den kun køre den første update:

sql = "UPDATE oenskeliste SET priotet= '" & newprio &"'"
sql = sql & "WHERE priotet = " & priotet
Set rs = Conn.Execute (sql)

sql = "UPDATE oenskeliste SET priotet= '" & priotet &"'"
sql = sql & "WHERE priotet = " & iniprio
Set rs = Conn.Execute (sql)
Avatar billede socle Nybegynder
27. august 2003 - 14:12 #17
har du prøvet:

Set rs = Server.CreateObject("ADODB.Recordset")
rs.CursorLocation = 3
rs.CursorType = 3
rs.ActiveConnection = Conn
rs.Open SQL, Conn, 1, 3

'herefter
if not rs.eof then
newprio = rs("priotet")
rs.close

sql = "UPDATE oenskeliste SET priotet= " & Cint(newprio)
sql = sql & " WHERE priotet = " & priotet
rs.open sql, conn, 1, 3
rs.close

sql = "UPDATE oenskeliste SET priotet= " & Cint(priotet)
sql = sql & " WHERE priotet = " & iniprio
rs.open sql, conn, 1, 3
end if
rs.close
Avatar billede likedon Nybegynder
27. august 2003 - 15:52 #18
Var lige i byen:
nu får jeg :
ADODB.Recordset error '800a0e78'

Operation is not allowed when the object is closed.
Avatar billede likedon Nybegynder
27. august 2003 - 16:07 #19
jeg opgiver og laver det på en anden måde.
Avatar billede likedon Nybegynder
27. august 2003 - 16:33 #20
jeg er dog stadig interesseret i en løsning, for så implementere jeg den bare senere, jeg smider den op på 200pt, og så håber jeg der er nogen der gider lave et system til mig der virker, med database og det hele. Lige nu har jeg nemlig ikke mere tid til den.
Avatar billede socle Nybegynder
27. august 2003 - 17:52 #21
databasen er en access database med tabel: 'mens'
to kollonner:
'id' der autonummereres
'prio' der er et tal

<%
usebase = "test" 'navn på access databasen
Set DataConn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
DataConn.Open "DBQ=" & "[din sti til mappen med databasen]" & usebase & ".mdb" & ";Driver={Microsoft Access Driver (*.mdb)};"

iniprio = 3 'prioritet der skal byttes med
sekprio = 4 'prioritet der skal byttes med ini bliver til sek og omvendt

rs.open "SELECT * FROM mens WHERE prio = " & iniprio & " OR prio = " & sekprio & " ORDER BY prio", DataConn, 1, 3
if not rs.eof then
dim pri
dim idt
do while not rs.eof
    pri = pri & rs("prio") & ";"
    idt = idt & rs("id") & ";"   
rs.movenext
loop
pri = left(pri, len(pri)-1)
idt = left(idt, len(idt)-1)

pri = split(pri, ";")
idt = split(idt, ";")

rs.close
rs.open "UPDATE mens SET prio = " & pri(0) & " WHERE id = " & idt(1), DataConn, 1, 3
rs.open "UPDATE mens SET prio = " & pri(1) & " WHERE id = " & idt(0), DataConn, 1, 3
end if

set rs=nothing
dataconn.close
set dataconn = nothing
%>
Avatar billede socle Nybegynder
27. august 2003 - 17:53 #22
det sku gøre tricket, omend jeg tror der er en lidt hurtigere måde med flerdimensionale arrays, men det har jeg ikke helt styr på
Avatar billede likedon Nybegynder
27. august 2003 - 21:32 #23
Jeg tjekker i morgen, og virker det er pt dine :)
Avatar billede eagleeye Praktikant
28. august 2003 - 15:10 #24
Hvad ønsker du fra du skal byttes ??
Når du sender filmID og priotet skal filmID så sættes til den valgte priotet og så skal den filmID med den valgte priotet hvade den valgte filmID's priotet??
Eller hvad mener du.
Avatar billede likedon Nybegynder
28. august 2003 - 15:39 #25
næsten:

Jeg skal have 2 menupunkter til at bytte plads, det eneste jeg kender som jeg kan sende med linket er filmid og filmpriotet på det menupunkt jeg klikker på.
Avatar billede likedon Nybegynder
28. august 2003 - 15:39 #26
socle jeg har ikke haft tid til at kigge på dit sidste foreslag, men håber jeg får tid i morgen fredag.
Avatar billede eagleeye Praktikant
28. august 2003 - 15:52 #27
Hvad skal den så bytte plads med??
så hvis du trykker på priotet  2  så skal en bytte rundt på priotet 2 og 3 ?
Avatar billede likedon Nybegynder
28. august 2003 - 16:49 #28
jep, men jeg ved ikke hvilken priotet menupunktet ovenover har, det kan jo være slettet i mellemtiden.

så faktisk kunne der ske det at priotet 4 skal bytte plads med priotet 2 fordi der ikke er en 3'er.
Avatar billede likedon Nybegynder
28. august 2003 - 16:50 #29
lige nu har jeg bare lavet det med select lister, men det er ikke så kønt, og så er der også flere af mine punkter der kan have samme priotet.
Avatar billede eagleeye Praktikant
28. august 2003 - 17:10 #30
Ok, så den skal finde den priotet som kommer efter den valgte og bytte de to så prøv noget med dette:


<%
filmid = Request("filmid")
brugerid = Request("brugerid")
priotet = Request("priotet")

'Find filmen men næste priotet i rækken
SQL = "SELECT TOP 1 * FROM oenskeliste WHERE brugerid=" & brugerid & " AND priotet > " & priotet & " ORDER BY priotet ASC"

Set rs = Conn.Execute(SQL)
if not rs.EOF then
  film2id = rs("id")
  film2priotet = rs("priotet")

  'sæt den nye priotet for det valge menu punkt
  SQL = "UPDATE oenskeliste SET priotet= " & film2priotet & " WHERE id = " & filmid
  Conn.Execute (SQL)

  'sæt den nye priotet for den film der byttes med
  SQL = "UPDATE oenskeliste SET priotet= " & priotet & " WHERE id = " & film2id
  Conn.Execute (SQL)
end if
%>


Det er et eksemple som du kan prøve hvis du ikke får det andet til at virke og får lidt tid i overskud ;)
Avatar billede socle Nybegynder
09. september 2003 - 21:58 #31
tak for point. brugte du ado i stedet?
Avatar billede likedon Nybegynder
10. september 2003 - 08:52 #32
Jeg har faktisk ikke haft tid til at afprøve, ville bare lukke spørgsmålet, da jeg følte mig overbevist om at jeres svar nok skulle virke eller hjælpe mig i den rigtige retning, når jeg en gang får tid.
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