webForumDet fria alternativet

Vill inte sparas..

ASP

24 svar · 395 visningar · startad av asp

Medlem sedan aug. 2002733 inlägg
Frågan#1

Hej!

Jag bygger just nu på ett nyhetsscript, ett väldigt simpelt. Saken är den att jag inte kan spara information i databasen. Det går att skriva ut nyheterna elegant.

Jag ser inget fel på min kod:

<%
Case "spara"
Dim rubrik, text, datum
rubrik = Trim(Request.Form("rubrik"))
text = Trim(Request.Form("text"))
datum = Trim(Request.Form("datum"))
If Len(rubrik) > 0 Then
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("db/databas.mdb")
Set Rs = Conn.Execute("INSERT INTO Post (Datum, Rubrik, Text) VALUES ('" & datum & "','" & rubrik & "','" & text & "')")
Response.Write("<b>Nyheten är sparad!</b>")
Conn.Close
Set Conn = Nothing
End If
%>
[kod]

Här är formuläret:
[kod]
<form name="post" method="post" action="nyheter.asp?visa=spara">
Datum:<input tpe="text" name="datum"><br>
Rubrik:<input type="text" name="rubrik"><br>
Text:<textarea name="text"></textarea><br>
<input type="submit" value="skicka">
</form>
Medlem sedan juni 200032 967 inlägg
#2

Text är ett reserverat ord, byt namn på fältet.

Får du något felmeddelande, så inkludera detta i felbeskrivningen. (Det känns som att du skulle kunna få ett Syntax error in INSERT INTO-statement eller liknande)

red: dessutom; att skapa ett recordset när man gör INSERT, UPDATE eller DELETE är onödigt, eftersom dylika frågor inte returnerar någonting.

Mvh

Medlem sedan okt. 20005 273 inlägg
#3

Eller klammra [text] ;)

Mvh icaaq

Medlem sedan juni 20019 519 inlägg
#4

Är datum i databasen en text eller ett Datum/tid
isåfall ska du inte ha ' utan #:

Set Rs = Conn.Execute("INSERT INTO Post (Datum, Rubrik, [Text]) VALUES (#" & datum & "#,'" & rubrik & "','" & text & "')")
Medlem sedan okt. 20005 273 inlägg
#5

voigtann1 skrev:

Är datum i databasen en text eller ett Datum/tid
isåfall ska du inte ha ' utan #:

Set Rs = Conn.Execute("INSERT INTO Post (Datum, Rubrik, Text) VALUES (#" & datum & "#,'" & rubrik & "','" & text & "')")

OT: Spelar det nån roll om man har access 2000 + ??

Medlem sedan juni 200032 967 inlägg
#6

I mina tester med Access 2000 går det precis lika bra att använda apostrofer, och det känns ju mest normalt, eftersom det (vad jag vet) inte finns någon annan dbms som använder annat än apostrofer för att markera datumvärden.

Mvh

Medlem sedan juni 20019 519 inlägg
#7

vet inte.. men # visar bättre tycker jag :e

Medlem sedan okt. 20005 273 inlägg
#8

Det är ju dock smidigare att andvända apostrofer om man ska byta dbms

Mvh icaaq

Medlem sedan aug. 2002733 inlägg
#9

Får fortfarande felmeddelande:

Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][Drivrutin för ODBC Microsoft Access] Typblandningsfel i villkorsuttryck.
/Nyheter/nyheter.asp, line 44

Medlem sedan juni 200032 967 inlägg
#10

Gjorde du ändringen som voigtann1 föreslog?

Medlem sedan aug. 2002733 inlägg
#11

Jag bytte ut fältet Text till Nyhet och ändrade Text till Nyhet i koden också. Borde inte det räcka?

Medlem sedan juni 200032 967 inlägg
#12

Nej, det här felmeddelandet har inget med det att göra. Prova att göra som voigtann1 föreslår.

Medlem sedan aug. 2002733 inlägg
#13

Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][Drivrutin för ODBC Microsoft Access] Syntaxfel i datum i frågeuttrycket '##'.
/Nyheter/nyheter.asp, line 44

Medlem sedan juni 200032 967 inlägg
#14

Det verkar som att variabeln datum inte innehåller någonting.

Medlem sedan aug. 2002733 inlägg
#15

Så här ser "spara" ut just nu. Rubrik och Datum är text, Nyhet är PM.

<%
Case "spara"
Dim rubrik, nyhet, datum
rubrik = Trim(Request.Form("rubrik"))
nyhet = Trim(Request.Form("nyhet"))
datum = Trim(Request.Form("datum"))
If Len(rubrik) > 0 Then
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("db/databas.mdb")
Set Rs = Conn.Execute("INSERT INTO Post (Datum, Rubrik, Nyhet) VALUES ('" & datum & "','" & rubrik & "','" & nyhet & "')")
Response.Write("<b>Nyheten är sparad!</b>")
Conn.Close
Set Conn = Nothing
End If
%>
Medlem sedan juni 200032 967 inlägg
#16

Men; datumet som kommer från formuläret. Fyllde du i något i datumfältet? Det ser ut som att variabeln datum saknar värde.

Och: när man felsöker SQL-frågor så gör man det enklast genom att skriva ut den färdiga SQL-frågan till webbläsaren, så man ser vad som exekveras.

strSQL = "INSERT bla bla bla"
Response.write strSQL
Response.end
Medlem sedan aug. 2002733 inlägg
#17

Nu går det att skicka så man kommer till spara utan felmeddelande men inget syns där jag skriver ut nyheterna..

Medlem sedan juni 200032 967 inlägg
#18

Response.end finns med i koden för att inte asp-sidan skall fortsätta exekveras, alltså om du använde det jag gav dig senast så är det till för att slänga fram SQL-frågan till browsern för felsökning. Ingenting sparas alltså i databasen.

Medlem sedan aug. 2002733 inlägg
#19

Det sparas i databasen men det skrivs inte ut rätt som det gjorde förut. här är koden där nyheterna skrivs ut:

<%
ase "nyheter"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("db/databas.mdb")
Set Rs = Conn.Execute("SELECT * FROM Post ORDER BY Id DESC")
Do Until Rs.EOF
%>
<table width="350" cellpadding="0" cellspacing="3" style="border: 1px solid black; background-color: #b1caf3">
<tr>
<td>
<b><%= rs("rubrik") %></b><span style="font-size: 9px"> - <%= rs("datum") %></span><br>
<%= rs("nyhet") %>
<td>
</tr>
</table>
<table>
<tr>
<td height="7"></td>
</tr>
</table>
<%
Rs.Movenext
Loop
Rs.Close : Set Rs = Nothing
Conn.Close : Set Conn = Nothing
%>
Medlem sedan juni 200032 967 inlägg
#20

Hur skrivs det ut då? Hur ska det skrivas ut?

258 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)