Forum > ASP > Generella frågor
Hej,
Jag har nu klurat väldigt länge på en grej! Jag har ett fält i min databas som innehåller värde 1-2. Jag vill att om värdet är lika med 1 så ska det bli response.redirect.
Så här ser min kod ut!
If "fält1=1" then response.Redirect(hej.html)
end if
Men det händer inget? Jag blir aldrig omredigerad!
Skriv ut fält1 och se så att den innehåller ett värde, sen kör den en enkel ifsats.
If Recset("falt1")="1" Then Response.Redirect("Hej.html")
Else
Response.Write("Inget händer")
End If
Microsoft VBScript compilation error '800a03ea'
Syntax error
/kundplatsen/repost.asp, line 93
Else ^
Får en error!
Hur skriver man ut värdet?
Du skall ha radbrytnningar i en if fråga om du skriver det på det sättet
If Recset("falt1")="1" Then
Response.Redirect("Hej.html")
Else
Response.Write("Inget händer, fältet innehöll:" & Recset("falt1"))
End IfEller så kör du redan rätt datatyp men gemför det mot en sträng.
If Recset("falt1")=1 Then
Response.Redirect("Hej.html")
Else
Response.Write("Inget händer, fältet innehöll:" & Recset("falt1"))
End If
Microsoft VBScript runtime error '800a000d'
Type mismatch: 'Recset'
Vi pratar alltså om ett fält i en databas, så det inte blir något missförstånd
Vad heter ditt Recordset? Ge mer kod, jag tog det för givet att du har skapat ett recordset/namn på fältet i databasen?
<%
Dim conn
id = Request.QueryString("msgID")
set conn = Server.CreateObject("ADODB.connection")
sConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Server.MapPath("\kundplatsen\db\betaboard.mdb") & ";" & _
"Persist Security Info=False"
conn.Open(sConnection)
Set rsget = Server.CreateObject("ADODB.Recordset")
rsget.Open "SELECT * FROM board WHERE ThreadID="&id&" AND Lock=0", conn
error = request.querystring("error")
select case cstr(error)
case "1"
Response.Write "<p align=center><font face=arial color=silver size=2><b>You have not fill out Topic, Name or Body. Server cannot process unless these field(s) are fill.</b></font>"
case "2"
Response.Write "<p align=center><font face=arial color=silver size=2><b>Sorry, Scripting is not allow on this MessageBoard. Please fix your Message.</b></font>"
case "3"
Response.Write "<p align=center><font face=arial color=silver size=2><b>Sorry, you have enter an invalid e-mail address. Please fix your e-mail address.</b></font>"
case "4"
Response.Write "<p align=center><font face=arial color=silver size=2><b>Sorry, you have enter an invalid URL. Please fix your URL.</b></font>"
case Else
Response.Write ""
end select
%>
<%
If Recset("Lock")="2" Then
Response.Redirect("Hej.html")
Else
Response.Write("Inget händer, fältet innehöll:" & Recset("Lock"))
End If
%>
jag gissar på att du bara byter ut Recset till rsget, fast den kommer aldrig att kunna vara 2, och ja det skall vara 2 och inte "2" då det inte är en sträng du gemför med utan ett tal. sen bör du även kontrollera att Recordsetet inte är EOF, men if frågan och redirectern är helt onödig då din SQL fråga säger att hämta ut alla lock som har värdet 0
Tack för all hjälp!
Tyvärr fungerar det inte fortfarande.
Jag får error '80020009' .
Buhu :(
http://classicasp.aspfaq.com/genera...009-errors.html
Och jag gissar på följande fel:
Finns det något exempel på hur man "sätter" ett Recordset?
Jag har ju med i koden: Set rsget = Server.CreateObject("ADODB.Recordset")
rsget.Open "SELECT * FROM board WHERE ThreadID="&id&" AND Lock=0", conn
Det verkar som du inte förstå vad jag är ute efter, vill gärna inte ge koden rakt upp och ner då lär du dig aldrig.
Du sätter ju ditt Recordset på det sätt du beskriver, men du MÅSTE kontrollera innan du försöker hämta data ifrån det att det faktist finns data att hämta.
Men hela din kod med Recordsetet är helt onödigt då Lock alltid kommer vara 0 så Lock kan inte vara 2.
Nej, jag tror inte jag förstår men jag försöker iaf :D
Jag testade sätta 2 st olika recordset, det gick dock inte. Sen testade jag byta ut lock=0 till lock=2. Då fungerade "Redirect" Men inte "Write". Så jag antar att det är som du säger att lock inte kan vara 0. För då kan inte lock vara 2 där nere, sjukt klurigt iaf.
Vart inne på aspsidan och fråga men det går ju aldrig att regga sig där.
Tack för alla svar!
Nu få du ta ett steg tillbaka, du skall inte ha fler recordset än vad du behöver, varför skall du ha två recordset med samma data?
Om du ändra din SQL fråga till Lock=2 så är det ju självklart att din if fråga fungera:
rsget.Open "SELECT * FROM board WHERE ThreadID="&id&" AND Lock=0", conn
If Recset("Lock")="2" ThenVaför din if fråga med lock=2 är med stor sannolikhet är att den hittar en träff i databasen med id xx och lock = 2, men inte id xx och lock = 0.
Ta ett steg tillbaka och berätta gärna vad EXAKT du kommer göra med din kod?
Jag byter ut min sqlfråga till "2"
Men när jag gör det så fungerar bara response.redirect och inte else response.write!
Jag kommer till Hej.html, men när lock=2 får jag error '80020009'
/kundplatsen/repost3.asp, line 87.
Samma som förut!
Ja?
Läs vad jag skriver: Du MÅSTE kontrollera om ditt recordset är EOF eller BOF innan du försöker använda det, om du har gjort ett forum(eller vad det verkar vara som du håller på med) så förstå jag inte vad du inte förstå med EOF på ett recordset, det är en av de fösta saker man lär sig när det gäller Recordset:
If Not RecSet.EOF Then 'Recordsetet innehåller något
End If
Du skriver att det fungera på samma sätt som förut, vad för ändringar har du gjort?