webForumDet fria alternativet

Fel när jag ska hämta data!

ASP

24 svar · 344 visningar · startad av magnusfernstrom

Medlem sedan mars 20033 686 inlägg
Frågan#1

Hej hej!
När jag kör denna kod

<%
Set db = Server.CreateObject("ADODB.Connection")
db.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath ("forum.mdb")
SQL = "SELECT* FROM forum WHERE Id = '" & Request.Querystring("trad") & "'"
Set rs = db.Execute(SQL)
%>
<%
Do until rs.EOF
%>
<%=rs("Namn")%>
<%
rs.MoveNext
Loop
%>

Får jag detta meddelande:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.

/slauson/db/test/las.asp, line 5

Jag har prövat att skriva ut Querystringen och får då rätt värde!

Vad är fel?

Mvh Magnus Fernström

Medlem sedan juli 20015 107 inlägg
#2

Om du tar bort enkelfjuttarna i SQL frågan på tabellen ID!
Fungerar det då? För jag antar att ID innehåller siffra/siffror
samt ha gärna ett mellanslag mellan SELECT och *

SQL = "SELECT * FROM forum WHERE Id = " & Request.Querystring("trad") & ""
Set rs = db.Execute(SQL)
Medlem sedan mars 20033 686 inlägg
#3

Visst serru, det fungerar utmärkt. Tack så mycket!

Medlem sedan juli 20015 107 inlägg
#4

magnusfernstrom skrev:

Visst serru, det fungerar utmärkt. Tack så mycket!

Varsågod :) Markera som slutgiltigt svar om det fungerade!

Medlem sedan mars 20033 686 inlägg
#5

Men nya problem har dykt upp :)
Jag postar dom här:

När jag ska posta nytt så får jag detta meddelande:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.

/slauson/db/test/new.asp, line 5

Koden ser ut så här:

<%
Set db = Server.CreateObject("ADODB.Connection")
db.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath ("forum.mdb")
SQL = "INSERT INTO forum (Namn,Rubrik,Inlagg,Svar) VALUES ('" & Request.Form("Namn") & "', '" & Request.Form("Rubrik") & "', '" & Request.Form("Inlagg") & "', '" & Request.Form("Svar") & "')"
Set rs = db.Execute(SQL)

Response.Redirect "forum.asp"
%>

Jag har 0 som standard värde på Svar i databasen, som är av typen Tal.

Om man postar ett nytt inlägg har Querystringen inget värde, och jag gissar att det är därför det spökar.

Medlem sedan juni 200032 967 inlägg
#6

Men alltså. Som M.Cheraghi skriver i sitt inlägg ovan, du skall icke ha apostrofer runt ett värde som tillhör ett fält av numerisk datatyp.

Om man postar ett nytt inlägg har Querystringen inget värde, och jag gissar att det är därför det spökar.

Vilken querystring?

Medlem sedan juli 20015 107 inlägg
#7

du skall ICKE ha enkelfjuttar kring dem som har siffra/siffror som värde :)

Ocksen om du har standardvärde 0 som sätts av databasen! Varför ens ha med det fältet i SQL frågan och definera värdet 0 när databasen endå kommer att tilldela värdet 0 för den kolumnen!

r:/ Marsvin + hårtrimmer = sant :)

Medlem sedan mars 20033 686 inlägg
#8

Men alltså, ska jag då ha:
" & Request.Form("Svar") & " eller?

Medlem sedan juni 200032 967 inlägg
#9

Ja, alltså. ;)

& " på slutet ska du dock bara ha om du ska lägga till fler saker till strängen med sql-frågan (som i det här fallet, där du ska avsluta en parentes.)

Mvh

Medlem sedan juli 20015 107 inlägg
#10

magnusfernstrom skrev:

Men alltså, ska jag då ha:
" & Request.Form("Svar") & " eller?

Om typen på kolumnen är TAL / NUMBER och "Svar" innehåller numeriskt värde, så ja :)

r:/Marsvin + häcksax = sant
jag hänger inte med i svängarna!

Medlem sedan mars 20033 686 inlägg
#11

@nders skrev:

Vilken querystring?

Oj, glömde att säga det.
Sidan som formuläret finns på har denna kod:

<input type="hidden" name="Svar" value="<%=Request.Querystring("svar")%>">

Och om man kommer från en "tråd sida" och ska svara på tråden, förljer Id numret med så man vet vad man svarat på :D

Om man däremot ska skriva nytt inlägg så är strängen tom, då är det ett svar.
Eller ja, de poster med värder 0 på svar är huvudtrådar.

Hur ska jag då lösa detta då?

Medlem sedan mars 20033 686 inlägg
#12

Om typen på kolumnen är TAL / NUMBER och "Svar" innehåller numeriskt värde, så ja

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error in INSERT INTO statement.

/slauson/db/test/new.asp, line 5

:)

Medlem sedan mars 20033 686 inlägg
#13

Nu har jag även tagit bort standardvärde 0 i databasen.

Medlem sedan juni 200032 967 inlägg
#14

Ok. Då är det en querystring på förra sidan, men inte nu längre ju. Nu kommer ju värdet från ett formulärfält. :)

Antingen så utelämnar du fältet svar ur SQL-frågan, eller så får du kolla att du får ett värde.

If request.form("svar") <> "" then svar=request.form("svar") else svar=0

Använd sedan svar istället för request.form("svar") i SQL-frågan.

Medlem sedan mars 20033 686 inlägg
#15

Javisst, nu fungerar det!
Tack så hemskt mycket för hjälpen grabbar, och ursäkta om jag inte begriper allt :) ;)

Medlem sedan mars 20033 686 inlägg
#16

Hej!
Ännu ett litet problem har dykt upp.

När man postat sitt svar vill jag att man ska skickas tillbkas till tråden man svarade i.

Response.Redirect "las.asp?trad=<%=request.querystring("trad")%>"

Denna kod fungerar inte, jag har även prövat att ta bort citationstecken mm. men det vill inte fungera.

Tacksam för svar // MF

Medlem sedan juni 200032 967 inlägg
#17

På vilket sätt fungerar det inte? Var finns värdet för trad? Varifrån hämtar du det?

Medlem sedan mars 20033 686 inlägg
#18

Detta är den fullständiga koden:

<%
If request.form("Svar") <> "" then svar=request.form("Svar") else svar=0

Set db = Server.CreateObject("ADODB.Connection")
db.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath ("forum.mdb")
SQL = "INSERT INTO forum (Namn,Rubrik,Inlagg,Svar) VALUES ('" & Request.Form("Namn") & "', '" & Request.Form("Rubrik") & "', '" & Request.Form("Inlagg") & "', " & svar & ")"
Set rs = db.Execute(SQL)

Response.Redirect "las.asp?trad=<%=Request.Form("Svar")%>"
%>

Detta felmeddelande får jag:
Microsoft VBScript compilation error '800a0401'

Expected end of statement

/slauson/db/test/new.asp, line 9

Response.Redirect "las.asp?trad=<%=Request.Form("Svar")
-------------------------------------------------^

När jag endast skriver <%=Request.Form("Svar")%> på sidan som ska sätta in datan i databasen och sedan skickar iväg från sidan med förmuläret får jag rätt värde, det vill säga trådens ID.

Medlem sedan juni 200032 967 inlägg
#19

Jag ber om ursäkt, det är jag som läser slarvigt. Du ska inte ha asp-contextswitchar (<% %>) inuti asp-kod, utan du ska konkatenera med &.

Response.Redirect "las.asp?trad=" & Request.Form("Svar")

Mvh

Medlem sedan mars 20033 686 inlägg
#20

Och ja, det var fel innan. Jag hade Querystring istället för Form, men det funkar ändå inte!

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