jag tänkte testa med recordset istället för den där connection... men skriver straxt!
Köra funktioner och UPDATE
46 svar · 1 296 visningar · startad av Sanji · sida 2 av 3
Frågan, av Sanji
Hej! Jag fick idag en uppgift att göra om en sida för att hantera en meny i klassisk asp, så att man kan flytta på menyalternativen upp och ner i listan. Jag började med att lägga till en ny kolumn i databasen som jag namngav till position, där en siffra representerar menyalternativens ordning i listan. Nu återstår koden för att få detta att fungera som jag vill... Så här ser den ut hittills:
Läs frågan i sin helhet →Ett Recordset kräver ju också en connection (om det är mot en databas)
kollade din sub/metod:
sub menuitemdown(pos)
movingItemID = "SELECT ID FROM kategorier WHERE (position =" & str(pos) & ")"
adaptingItemID = "SELECT ID FROM kategorier WHERE (position =" & str(pos+1) & ")"
Connect.Execute "UPDATE kategorier SET position=(pos+1) WHERE (ID =" & int(movingItemID) & ")"
Connect.Execute "UPDATE kategorier SET position=pos WHERE (ID =" & int(adaptingItemID) & ")"
end sub
Du vet att movingItemID och adaptingItemID bara är en sträng och inte något tal på något sätt. så den kommer crashar om du ens försöker köra den
ändrade den till:
sub menuitemdown(pos)
movingItemID = "SELECT ID FROM kategorier WHERE (position =" & str(pos) & ")"
adaptingItemID = "SELECT ID FROM kategorier WHERE (position =" & str(pos+1) & ")"
RecSet.Open movingItemID, Connect
RecSet2.Open adaptingItemID, Connect
RecSet("position") = (pos+1)
RecSet2("position") = pos
RecSet.Update
RecSet2.Update
RecSet.Close
RecSet2.Close
end sub
borde väl fungera?
Om jag har pos som den som är längst ner och trycker så kommer den att crashar, då RecSet2 kommer vara EOF. skulle jag gissa, annars kan det väl fungera. Jag hade gjort tvärtom, kollat om Recset2 INTE är EOF och sen hämtar vad som skall flyttas och göra flytten, först om man vet att det finns en position som är högre då kan man göra flytten.
smart :) jag tror jag kör på det, inte så kul om det kraschar för sånt där ^^
Men för att kunna få värdet i request.querystring, vilken sida är det jag ska peka länken till? samma sida, eller den som innehåller alla frames?
jag gissar på samma sida.... för om det är framen som skall uppdatera så är det det innehållet som kommer visas vid en klick på en länk, om du inte ha satt något target på att den skall rendera om "huvud"-fönstret. skulle jag gissa.
När jag håller på länken så visas alla värden rätt, men när jag trycker på den så säger den "The page can not be found"
okej, jag ska testa ^^
Nu verkar det som att det enda problemet som är kvar är att få SELECT-satserna i funktionerna korrekta... hur gör jag för att få denna att läsas korrekt?
"movingItemID = "SELECT * FROM kategorier WHERE (position =" & pos & ")""
hur använder jag "pos" så att det fungerar?
pos kommer ifrån din metod, du sätter den där anropet körs.
ja den får värde och allting, men jag menar i funktionen, i sql-satsen... är det bara att göra som jag redan gör? för jag får fram ett unspecified error som jag nästan är helt säker på att det kommer på grund av slq-satsen...
Felet kommer nämligen på raden där jag kör RecSet.Open
Hur ser din metod ut nu?
Här har vi den:
sub menuitemup(pos)
movingItemID = "SELECT * FROM kategorier WHERE position =" & pos & ""
adaptingItemID = "SELECT * FROM kategorier WHERE position =" & pos-1 & ""
RecSet.Open movingItemID, Connect
RecSet2.Open adaptingItemID, Connect
RecSet("position") = (pos-1)
RecSet2("position") = pos
RecSet.Update
RecSet2.Update
RecSet.Close
RecSet2.Close
end sub
jag tog nyss bort parenteserna i sql-satserna
jo då, connect är något... det är samma som det är på sidan jag höll på med igår, det ligger i opcon.asp.
Felmeddelandet:
error '80004005'
Unspecified error
/stadmin/categories.asp, line 26
fick något liknande fel igår, och då var det "Order by position ASC" som var i sql-satsen som sabbade...
movingItemID = "SELECT * FROM kategorier WHERE position =" & pos & ""
adaptingItemID = "SELECT * FROM kategorier WHERE position =" & pos-1 & ""
måste du hämta * ? Du använder ju bara position i din fråga längre ner, men kategorier och position är inte resarverade ord vad jag vet är position rätt datatyp i din databas?
movingItemID = "SELECT * FROM kategorier WHERE position =" & pos & ""
adaptingItemID = "SELECT * FROM kategorier WHERE position =" & pos-1 & ""måste du hämta * ? Du använder ju bara position i din fråga längre ner, men kategorier och position är inte resarverade ord vad jag vet är position rätt datatyp i din databas?
jag tror att position var reserverat ändå... jag satte [position] så fungerade det.
nej jag ska egentligen bara hämta id och position, jag testade bara att byta till "*" för att se om det var fel där.
Nu får jag ett annat felmeddelande som klagar på rad 29:
ADODB.Recordset error '800a0cb3'
Object or provider is not capable of performing requested operation.
/stadmin/categories.asp, line 29
rad 29:
RecSet("position") = pos+1
är det pos+1 som strular eftersom jag försöker lägga till ett tal till en sträng?
är pos n sträng? låter korkat ;) konvertera den till ett tal och testar.
hur konverterar man då? läste någonstans att man kan göra VAL(pos) men har ingen aning om hur det fungerar, det funkar inte när jag gjorde så här i alla fall:
sub menuitemup(pos)
movingItemID = "SELECT KategoriID, position FROM kategorier WHERE position =" & VAL(pos) & ""
adaptingItemID = "SELECT KategoriID, position FROM kategorier WHERE position =" & VAL(pos-1) & ""
RecSet.Open movingItemID, Connect
RecSet2.Open adaptingItemID, Connect
RecSet("position") = (VAL(pos)-1)
RecSet2("position") = VAL(pos)
RecSet.Update
RecSet2.Update
RecSet.Close
RecSet2.Close
end sub
_______
ska man göra: VAL(pos+1)
eller: Val(pos)+1
***** / \
__/__\__
det här kanske inte fungerar i vbs?
jag får detta felmeddelande när jag kör sidan:
Microsoft VBScript runtime error '800a000d'
Type mismatch: 'VAL'
/stadmin/categories.asp, line 11
CLng() få du nog bättre resultat, då Val() inte finns i ASP, eller så skapar du en funktion som gör vad VAL() gör.
