webForumDet fria alternativet

MoveLast-fel

ASP

7 svar · 227 visningar · startad av Annakay

Medlem sedan sep. 2003143 inlägg
Frågan#1

Får felmeddelandet
Error Type:
(0x80040E24)
skapatest_ok.asp, line 15

Rad 15 är RS.MoveLast

Jag vill mata in i en databas värdet på de kryssrutor som är förbockade (de värden som kommer i Request.Form + knappen "skapa", därav if-satsen)

Jag vill få fram ett testnummer som ska vara samma som det senast inmatade testnumret + 1.
---------------------------------------------------------------------------
Set RS = Server.CreateObject("ADODB.Recordset")

MySQL = "SELECT @@IDENTITY"
Set RS = MyConn.Execute(MySQL)

If RS.EOF OR RS.BOF then

testnr = 0

else

RS.MoveLast
testnr = RS(0)

end if

testnr = testnr + 1

for each field in request.form
if field <> "skapa" then
MySQL = ""
MySQL = "INSERT INTO tbltest (fldKodfrg, fldtestnr) VALUES('" & field & "', '" & testnr & "')"
Set RS = MyConn.Execute(MySQL)

end if

next

MyConn.close
---------------------------------------------------------------------
Några tips..? Börjar bli riktigt SLUT i huvudet...

Medlem sedan juni 200032 967 inlägg
#2

Har du gjort en insert med samma connectionobjekt? Annars kommer inte värdet att stämma (då får antagligen ett nullvärde, och då är det inte konstigt om felmeddelandet kommer för att du försöker lägga till ett till null).

Om du vill ha det högsta värdet i en viss kolumn kan du ju alltid använda MAX i din select-fråga.

Får du verkligen ingen mer info i felmeddelandet? Den väsentliga informationen saknas i meddelandet.

Du behöver aldrig använda MoveLast när du ställer en SELECT-fråga som alltid returnerar en post.

Mvh

Medlem sedan sep. 2003143 inlägg
#3

Får inget felmeddelande längre, sidan visas som den ska, men inget matas in i databasen...
-----------------------------------------------------------------------
Set RS = Server.CreateObject("ADODB.Recordset")

MySQL = "SELECT @@IDENTITY"
Set RS = MyConn.Execute(MySQL)

If RS.EOF then

testnr = 0

else

testnr = RS(0)

end if

testnr = testnr + 1

for each field in request.form
if field <> "skapa" then
MySQL = ""
MySQL = "INSERT INTO tbltest (fldKodfrg, fldtestnr) VALUES('" & field & "', '" & testnr & "')"
Set RS = MyConn.Execute(MySQL)

end if

next

MyConn.close
------------------------------------------------------------------------------

Tips?

Medlem sedan juni 200032 967 inlägg
#4

Jag ber att få upprepa min fråga:

Har du gjort en insert med samma connectionobjekt?

Frågan kommer nog aldrig att kunna ge ett EOF-resultat, jag tror att du alltid kommer få en post, om inte annat en post med null i.

Mvh

Medlem sedan sep. 2003143 inlägg
#5

:o)

Ja, jag använder samma connection-objekt. Ändrade till MAX och nu funkar det! (Tror jag... har inte tagit bort alla poster i databasen och försökt lägga in men...)

Medlem sedan juni 200032 967 inlägg
#6

Om tabellen är tom och du använder MAX(), kommer du förmodligen också få en post med endast null i. Så istället för att kontrollera om recordsetet är EOF kan du använda IsNull() för att se om värdet i fältet är just null.

Mvh

Medlem sedan sep. 2003143 inlägg
#7

Aha, där ser man... Jag kör med isNull istället och testar sen.

Tusen tack!

Medlem sedan juni 200032 967 inlägg
#8

Varsågod.

Hoppas du får ihop det som du vill ha det, annars är det ju bara att återkomma. ;)

Mvh

283 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
149 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)