FirehMedlem sedan jan. 2003173 inlägg Om jag försöker läsa data ur ett fält som råkar vara tomt, så skiter sig allt. Ska det vara så?
Om jag t.ex. kör följande:
Text = rs("Text")
Så får jag följande:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E21)
En OLE DB-åtgärd i flera steg genererade fel. Kontrollera alla OLE DB-statusvärden som finns tillgängliga. Inget arbete utfördes.
Om jag istället kör följande:
If rs("Text") = "First" Then
Så får jag följande:
(0x80020009)
Undantag inträffade.
Detta händer bara om Text-fältet är helt tomt. Står det något i det, så fungerar det bra.
@ndersMedlem sedan juni 200032 969 inlägg Det brukar fungera lite knasigt när det är null (inte riktigt tomt alltså ;) ). Prova om detta fungerar:
Text = "" & rs("Text")
Mvh
FirehMedlem sedan jan. 2003173 inlägg Det framgick inte av första, men när jag inte fick det att funka med bara If-satsen, så testade jag att först plocka in värdet i en variabel för att sedan köra If-satsen.
När jag bara körde If-satsen, så blev det undantagsfelet. När jag först läste in i variabel, så fick jag det andra felet.
Nu verkar det gå att läsa in i variabeln när jag testar med det du skrev, däremot kommer samma fel när den kör "If Text = "First" Then" som tidigare, dvs undantag....
@ndersMedlem sedan juni 200032 969 inlägg Menar du alltså att följande ger ett felmeddelande på raden med if-satsen :q
Text = "" & rs("Text")
If Text = "First" Then
Ytterst märkligt.
Mvh
FirehMedlem sedan jan. 2003173 inlägg If rs("Text") = "First" Then
Resulterade i "Undantag inträffade"
Text = rs("Text")
If Text = "First" Then
Resulterade i "En OLE DB-åtgärd i flera steg genererade fel..."
Text = "" & rs("Text")
If Text = "First" Then
Resulterade i "Undantag inträffade". Dvs samma som när jag bara körde med IF-sats. Därför gissade jag att det If-satsen som genererade felet.
@ndersMedlem sedan juni 200032 969 inlägg Har du lust att visa lite mer kod?
FirehMedlem sedan jan. 2003173 inlägg Admin_text = "" & rs("Admin_text")
If Admin_text = "First" Then
Response.Redirect("crew/first.asp")
Else
Response.Redirect("crew/")
End if
Den säger dessutom kontroll.asp, line 28, som är raden med If-satsen.
Fältets info i tabellen:
-------------------------------
Namn: Admin_text
Typ: Text
Längd/Värden:
Attribut:
Null: Not null (har testat med null också)
Standard:
Extra:
@ndersMedlem sedan juni 200032 969 inlägg Sa du not null?
Senast jag kollade betyder det att fältet i tabellen inte tillåter null, och då borde inte problemet vara nullrelaterat...
Kan du visa koden innan rad 28 också?
FirehMedlem sedan jan. 2003173 inlägg Jag har som sagt testat med Null = Null också, men det gav ingen skillnad.
Set db = Server.CreateObject("ADODB.Connection")
db.Open "DSN=mysql_crew"
User = Request.Form("User")
Pass = Request.Form("Pass")
IP = Request.ServerVariables("REMOTE_ADDR")
SET rs=db.Execute("SELECT * FROM Users WHERE Nick LIKE '" & User & "'")
If not rs.eof and rs("Pass") = Pass Then
Uppdate= "UPDATE Users SET 'zzzzzz' WHERE ID=" & ID
db.Execute Uppdate
Add = "INSERT INTO Login (User, UserID, IP, Datum, Tid, Lyckat) VALUES ('"&User&"',"&ID&",'"&IP&"','"&Date&"','"&Time&"','Ja')"
db.Execute Add
Admin_text = "" & rs("Admin_text")
If Admin_text = "First" Then
Response.Redirect("crew/first.asp")
Else
Response.Redirect("crew/")
End if
End if
Har tagit bort några saker, som Session samt vilken data som uppdateras. Uppdateringen i Users samt tillägget i Login fungerar dock.Och om jag plockar bort hela If-satsen, så går allt jättebra. Samt även om det råkar stå något i Admin_text-fältet.
@ndersMedlem sedan juni 200032 969 inlägg
- Varför använder du LIKE utan wildcards? Använd = om du inte ska göra en sökning.
- Lägg in lösenord i WHERE-satsen i SQL-frågan, det är dumt att ha det utanför.
- Replace:a en apostrof till två i den data som du ska använda i SQL-frågan.
Set db = Server.CreateObject("ADODB.Connection")
db.Open "DSN=mysql_crew"
User = Replace(Request.Form("User"), "'", "''")
Pass = Replace(Request.Form("Pass"), "'", "''")
IP = Request.ServerVariables("REMOTE_ADDR")
SET rs=db.Execute("SELECT * FROM Users WHERE Nick = '" & User & "' AND Pass = '" & Pass & "'")
If not rs.eof Then
Uppdate= "UPDATE Users SET 'zzzzzz' WHERE ID=" & ID
db.Execute Uppdate
Add = "INSERT INTO Login (User, UserID, IP, Datum, Tid, Lyckat) VALUES ('"&User&"',"&ID&",'"&IP&"','"&Date&"','"&Time&"','Ja')"
db.Execute Add
Admin_text = "" & rs("Admin_text")
If Admin_text = "First" Then
Response.Redirect("crew/first.asp")
Else
Response.Redirect("crew/")
End if
End if
Nu kanske inte dessa kodförbättringar hjälper dig med just detta problem, men...
Det bör fungera. Jag kan inte förstå hur det kan paja på den if-satsen.
Mvh
FirehMedlem sedan jan. 2003173 inlägg Här har du hela koden med två av dina ändringar.
Blir dock fortfarande "Undantag inträffade, line 27:
<%
Set db = Server.CreateObject("ADODB.Connection")
db.Open "DSN=mysql_crew"
User = Replace(Request.Form("User"), "'", "''")
Pass = Replace(Request.Form("Pass"), "'", "''")
IP = Request.ServerVariables("REMOTE_ADDR")
SET rs=db.Execute("SELECT * FROM Users WHERE Nick = '" & User & "'")
If not rs.eof Then
ID = rs("ID")
If rs("Pass") = Pass Then
Session("Antal") = rs("Antal") + 1
Session("Go") = 1
Session("Namn") = rs("Fnamn") & " " & rs("Enamn")
Session("Senast") = rs("Senast")
Session("ID") = rs("ID")
Senast = Date & " kl " & Time
Uppdate= "UPDATE Users SET Antal='" & Session("Antal") & "', Senast='" & Senast & "' WHERE ID=" & ID
db.Execute Uppdate
Add = "INSERT INTO Login (User, UserID, IP, Datum, Tid, Lyckat) VALUES ('"&User&"',"&ID&",'"&IP&"','"&Date&"','"&Time&"','Ja')"
db.Execute Add
If rs("Admin_text") = "First" Then
Response.Redirect("crew/first.asp")
Else
Response.Redirect("crew/")
End if
Else
Add = "INSERT INTO Login (User, UserID, IP, Datum, Tid, Lyckat) VALUES ('"&User&"',"&ID&",'"&IP&"','"&Date&"','"&Time&"','Nej')"
db.Execute Add
Session("Meddelande") = "<b>Fel användarnamn<br>och/eller lösenord!</b>"
Response.Redirect("start.asp")
End if
Else
If User <> "" Then
Add = "INSERT INTO Login (User, UserID, IP, Datum, Tid, Lyckat) VALUES ('"&User&"',0,'"&IP&"','"&Date&"','"&Time&"','Nej')"
db.Execute Add
End if
Session("Meddelande") = "<b>Fel användarnamn<br>och/eller lösenord!</b>"
Response.Redirect("start.asp")
End if
%>