webForumDet fria alternativet

Något fel i If-sats

ASP

7 svar · 272 visningar · startad av Zandris

Medlem sedan feb. 200160 inlägg
Frågan#1

Hej!

Har suttit och stirrat mig blind på en kod. Och nuundrar jag om ni kanske kan hjälpa mig att se felet.

Koden ser ut så här:

for each fraga_id in request.Form("fraga_id")
svar_id = "svar_id_"&fraga_id
svar = Request.Form(svar_id)
kommentar = "kommentar_"&fraga_id
kommentar = Request.Form(kommentar)

tabort = "tabort_"&fraga_id
tabort = Request.Form(tabort)

SQL_spara = "UPDATE svar_delobj SET svar_id = "&svar&" WHERE delobj_besk_id = "&delobj_besk_id&" AND fraga_id = "&fraga_id&";"
Set RS_spara = Conn.Execute (SQL_spara)

Response.Write(tabort)

If tabort = "" then

If NOT kommentar = "" then

SQL_sok_kommentar = "SELECT * FROM kommentar WHERE kommentar = '"&kommentar&"';"
Set RS_sok_kommentar = Conn.Execute (SQL_sok_kommentar)

If RS_sok_kommentar.EOF then
SQL_skapa_kommentar = "INSERT INTO kommentar (kommentar) VALUES ('"&kommentar&"');"
Conn.Execute (SQL_skapa_kommentar)

SQL_hamta_kommentar = "SELECT Top 1 * FROM kommentar ORDER BY kommentar_id DESC;"
Set RS_hamta_kommentar = Conn.Execute (SQL_hamta_kommentar)

SQL_uppdatera_kommentar = "UPDATE kommentarer SET kommentar_id = "&RS_hamta_kommentar("kommentar_id")&" WHERE delobj_besk_id = "&delobj_besk_id&" AND fraga_id = "&fraga_id&" AND objekt_id = "&objekt_id&";"

ElseIf NOT RS_sok_kommentar.EOF then

SQL_uppdatera_kommentar = "UPDATE kommentarer SET kommentar_id = "&RS_sok_kommentar("kommentar_id")&" WHERE delobj_besk_id = "&delobj_besk_id&" AND fraga_id = "&fraga_id&" AND objekt_id = "&objekt_id&";"

End If

Set RS_uppdatera_kommentar = Conn.Execute (SQL_uppdatera_kommentar)

ElseIf NOT tabort = "" then

SQL_tabort_kommentar = "DELETE FROM kommentarer WHERE objekt_id = "&objekt_id&" AND fraga_id = "&fraga_id&" AND delobj_besk_id = "&delobj_besk_id&";"
Set RS_tabort_kommentar = Conn.Execute(SQL_tabort_kommentar)
'Response.Write(SQL_tabort_kommentar)

End If

End If

next

Värdet i variabeln tabort försvinner någonstans på vägen.
Innan en If-sats har jag en "Response.Write(tabort)" och då får jag upp det riktiga värdet som jag letar efter men Ifsatsen; ElseIf NOT tabort = "" utförs inte.
Varför?

Tacksam för svar av någon mindre morgontrött person än jag. ;)

MVH Zandris

Medlem sedan juni 200032 967 inlägg
#2
  1. använd [kod ]-taggar, så blir din kod betydligt mer lättläst här på forumet.
  2. skapa inte recordsets när du ska köra insert/update/delete-frågor. det räcker alldeles utmärkt med bara Conn.Execute(sqlfråga), eller ännu hellre Conn.execute sqlfråga, , 128.
  3. Du behöver inte använda ElseIf blablabla när det är samma villkor som i IF-satsen. Använd endast Else.

Jag har skrivit om din kod lite grann. Se om det är något logiskt fel i det hela. ;)

for each fraga_id in request.Form("fraga_id") 
svar_id = "svar_id_"&fraga_id 
svar = Request.Form(svar_id) 
kommentar = "kommentar_"&fraga_id 
kommentar = Request.Form(kommentar) 

tabort = "tabort_"&fraga_id 
tabort = Request.Form(tabort) 

SQL_spara = "UPDATE svar_delobj SET svar_id = "&svar&" WHERE delobj_besk_id = "&delobj_besk_id&" AND fraga_id = "&fraga_id&";" 
Conn.Execute (SQL_spara) 

Response.Write(tabort) 

If tabort = "" then 
    If NOT kommentar = "" then 
       SQL_sok_kommentar = "SELECT * FROM kommentar WHERE kommentar = '"&kommentar&"';" 
       Conn.Execute (SQL_sok_kommentar) 
       If RS_sok_kommentar.EOF then 
            SQL_skapa_kommentar = "INSERT INTO kommentar (kommentar) VALUES ('"&kommentar&"');" 
            Conn.Execute (SQL_skapa_kommentar) 
            SQL_hamta_kommentar = "SELECT Top 1 * FROM kommentar ORDER BY kommentar_id DESC;" 
            Set RS_hamta_kommentar = Conn.Execute (SQL_hamta_kommentar) 
            SQL_uppdatera_kommentar = "UPDATE kommentarer SET kommentar_id = "&RS_hamta_kommentar("kommentar_id")&" WHERE delobj_besk_id = "&delobj_besk_id&" AND fraga_id = "&fraga_id&" AND objekt_id = "&objekt_id&";" 
       Else
            SQL_uppdatera_kommentar = "UPDATE kommentarer SET kommentar_id = "&RS_sok_kommentar("kommentar_id")&" WHERE delobj_besk_id = "&delobj_besk_id&" AND fraga_id = "&fraga_id&" AND objekt_id = "&objekt_id&";" 
       End If 
       Set RS_uppdatera_kommentar = Conn.Execute (SQL_uppdatera_kommentar) 
    Else
       SQL_tabort_kommentar = "DELETE FROM kommentarer WHERE objekt_id = "&objekt_id&" AND fraga_id = "&fraga_id&" AND delobj_besk_id = "&delobj_besk_id&";" 
Set RS_tabort_kommentar = Conn.Execute(SQL_tabort_kommentar) 
'Response.Write(SQL_tabort_kommentar) 
    End If 
End If 

next

Mvh,

Medlem sedan feb. 200112 078 inlägg
#3

Du använder 'fraga_id' som identifierare, och den härstammar från din loop och inte som value från din request.form:s id. Har dessa samma ordning/börjar på samma ställe?

Förstår du vad jag menar?

Medlem sedan feb. 200160 inlägg
#4

Hej på er!

Helt klart är ni mindre morgontrötta än jag ;)

Har ändrat runt lite i din kod, @nders, förstår inte varför men den var liksom mer lättarbetad ;)

Har tagit bort de Recordstetten som ej behövs. (Tack för påminnelsen!) Och ändrat ordningen lite bland if-staserna. Nu ser det bättre ut va´?

Men det funkar inte :(

OveRRidE: förstår inte riktigthur du menar... Om jag får upp värdena som jag ber om vad kan då vara fel? (Massor antar jag ;) )

Nu ser koden ut så här:

for each fraga_id in request.Form("fraga_id")
svar_id = "svar_id_"&fraga_id
svar = Request.Form(svar_id)
kommentar = "kommentar_"&fraga_id
kommentar = Request.Form(kommentar)
tabort = "tabort_"&fraga_id
tabort = Request.Form(tabort) 
SQL_spara = "UPDATE svar_delobj SET svar_id = "&svar&" WHERE delobj_besk_id = "&delobj_besk_id&" AND fraga_id = "&fraga_id&";" 
Conn.Execute (SQL_spara) 

Response.Write(tabort) 

If tabort = "" then 
    If NOT kommentar = "" then 
       SQL_sok_kommentar = "SELECT * FROM kommentar WHERE kommentar = '"&kommentar&"';" 
       Conn.Execute (SQL_sok_kommentar) 
       If RS_sok_kommentar.EOF then 
            SQL_skapa_kommentar = "INSERT INTO kommentar (kommentar) VALUES ('"&kommentar&"');" 
            Conn.Execute (SQL_skapa_kommentar) 
            SQL_hamta_kommentar = "SELECT Top 1 * FROM kommentar ORDER BY kommentar_id DESC;" 
            Set RS_hamta_kommentar = Conn.Execute (SQL_hamta_kommentar) 
            SQL_uppdatera_kommentar = "UPDATE kommentarer SET kommentar_id = "&RS_hamta_kommentar("kommentar_id")&" WHERE delobj_besk_id = "&delobj_besk_id&" AND fraga_id = "&fraga_id&" AND objekt_id = "&objekt_id&";" 
       Else
            SQL_uppdatera_kommentar = "UPDATE kommentarer SET kommentar_id = "&RS_sok_kommentar("kommentar_id")&" WHERE delobj_besk_id = "&delobj_besk_id&" AND fraga_id = "&fraga_id&" AND objekt_id = "&objekt_id&";" 
       End If 
       Conn.Execute (SQL_uppdatera_kommentar) 
	End If
Else
SQL_tabort_kommentar = "DELETE FROM kommentarer WHERE objekt_id = "&objekt_id&" AND fraga_id = "&fraga_id&" AND delobj_besk_id = "&delobj_besk_id&";" 
'Conn.Execute(SQL_tabort_kommentar) 
Response.Write(SQL_tabort_kommentar)
End If 

next

Hoppas det blev rätt med kod-taggarna nu...

MVH Zandris

Medlem sedan mars 20015 287 inlägg
#5

Inte för att jag satt mig in i koden direkt, men detta:

kommentar = "kommentar_"&fraga_id
kommentar = Request.Form(kommentar)
tabort = "tabort_"&fraga_id
tabort = Request.Form(tabort)

I detta block blir det väl som så att alltid blir det värdena från formuläret som blir gällande, de två andra raderna är väl helt onödiga att ha med?
Kan det vara rätt det?

Medlem sedan feb. 200160 inlägg
#6

Hej igen!

solbulle: Hur menar du med att två rader är helt onödiga? Vilka rader och varför?

MVH Zandris

Medlem sedan juni 200032 967 inlägg
#7

Jag tror att solbulle tänker fel. Men man skulle ju faktiskt kunna slå ihop de fyra raderna till två.

kommentar = Request.Form("kommentar_"&fraga_id)
tabort = Request.Form("tabort_"&fraga_id)

Samma sak med svar_id / svar.

Det avhjälper visserligen inte ditt problem. Jag är dock inte helt säker på vad ditt problem är. Kan du förklara igen?

En sak som jag alltid gör, är att jag slänger in testutskrifter precis överallt, för att veta exakt var problemen inträder. Så mitt råd: testutskrifter, ännu fler. ;)

Mvh,

Medlem sedan mars 20015 287 inlägg
#8

Asch ja, jo jag tänkte fel... @nders, du har rätt.

260 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)