jnsMedlem sedan dec. 2001132 inlägg skriver en gäst bok och förstår inte hur jag ska göra för att selecta en rad i databasen...
<%
set mincon =Server.CreateObject("ADODB.Connection")
set rs = server.createobject("ADODB.Recordset")
mincon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\kalasmannen\db\db_guestbook.mdb")
SQL = "SELECT * from guestbook WHERE ID = '" & Request.Querystring("id") & "'"
rs.Open SQL, mincon
%>
och fel koden blir:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.
/kalasmannen/msgnfo.asp, line
tror att det är nått fel på denna rad:
SQL = "SELECT * from guestbook WHERE ID = '" & Request.Querystring("id") & "'"
men hur ska den se ut?
------------------
Tiden går och går medans jns sover och sover...
LarsGMedlem sedan dec. 200012 464 inlägg SQL = "SELECT * from guestbook WHERE ID = " & Request.Querystring("id")
------------------
essentitia preter non sans multiplicandum
@ndersMedlem sedan juni 200032 969 inlägg Jag utgår ifrån att ID är numeriskt, antagligen en räknare. Då skall man inte ha apostrofer runt värdet i sin SQL-fråga.
Alltså:
SQL = "SELECT * from guestbook WHERE ID = " & Request.Querystring("id")
Mvh,
------------------
Let your body decide
jnsMedlem sedan dec. 2001132 inlägg tackar båda två... jag har suttit och klurat på detta länge... och nu fick jag till min skapelse... ännu ett steg mot framgång...
------------------
Tiden går och går medans jns sover och sover...
jnsMedlem sedan dec. 2001132 inlägg har nu ett nytt problem...
<%
set mincon = Server.CreateObject("ADODB.Connection")
set rs = server.createobject("ADODB.Recordset")
mincon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\kalasmannen\db\db_guestbook.mdb")
SQL = "SELECT * from guestbook"
rs.Open SQL, mincon
msg = request.Form("msg")
name = request.Form("name")
mail = request.Form("mail")
webpage = request.Form("webpage")
icq = request.Form("icq")
rs.AddNew
rs.("msg") = msg
rs.("name") = name
rs.("mail") = mail
rs.("webpage") = webpage
rs.("icq") = icq
rs.("ip") = request.ServerVariables("REMOTE_ADDR")
rs.("date") = FormatDateTime(date)
rs.("time") = FormatDateTime(time)
mincon.close
%>
den säger:
HTTP 500 Internal server error.
There is a problem with the page you are trying to reach and it cannot be displayed.
hjälp mig...
------------------
Tiden går och går medans jns sover och sover...
LarsGMedlem sedan dec. 200012 464 inlägg Det skall inte vara någon . vid dessa tilldelningar.
rs("msg") = msg
rs("name") = name
rs("mail") = mail
rs("webpage") = webpage
rs("icq") = icq
rs("ip") = request.ServerVariables("REMOTE_ADDR")
rs("date") = FormatDateTime(date)
rs("time") = FormatDateTime(time)
Du får bättre felmeddelanden om du ändrar i IE.
Tools
internet options
advanced
Show user-friendly http
se till att den rutan inte är kryssad.
------------------
essentitia preter non sans multiplicandum
jnsMedlem sedan dec. 2001132 inlägg bra! tackar...
men:
ADODB.Recordset error '800a0cb3'
Current Recordset does not support updating. This may be a limitation of the provider, or of the selected locktype.
/kalasmannen/write.asp, line 47
vad är nu problemet?
[Redigerat av jns den 07 feb 2002]
LarsGMedlem sedan dec. 200012 464 inlägg I din open så måste du ange att du vill förändra data
rs.Open SQL, mincon,3,3
Egentligen så är felet är att du använder recordset istället för sql för att göra update.
------------------
essentitia preter non sans multiplicandum
jnsMedlem sedan dec. 2001132 inlägg och hur kommer min kod se ut om jag använder sql istället?
------------------
Tiden går och går medans jns sover och sover...
jnsMedlem sedan dec. 2001132 inlägg LarsG?
------------------
Tiden går och går medans jns sover och sover...
LarsGMedlem sedan dec. 200012 464 inlägg Det finns flera exempel om du söker.
T.ex.
<%
set mincon = Server.CreateObject("ADODB.Connection")
mincon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\kalasmannen\db\db_guestbook.mdb")
query = "insert into t(msg,name) values('" & msg & "','" & name &')"
mincon.execute query,,128
Det är bara att fylla på med alla kolumner. Varför har du date och time i två olika kolumner?
------------------
essentitia preter non sans multiplicandum
jnsMedlem sedan dec. 2001132 inlägg min kod ser nu ut så här
<%
set mincon = Server.CreateObject("ADODB.Connection")
mincon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\kalasmannen\db\db_guestbook.mdb")
msg = request.Form("msg")
name = request.Form("name")
mail = request.Form("mail")
webpage = request.Form("webpage")
icq = request.Form("icq")
query = "insert into t(msg,name,mail,webpage,icq,ip,date,time) values('" & msg & "','" & name &"','" & mail & "','" & webpage & "','" & icq & "','" & ip & "','" & date & "','" & time & "')"
mincon.execute query,,128
mincon.close
%>
men den tycks inte fungera...
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error in INSERT INTO statement.
/kalasmannen/write.asp, line 45
får jag som fel meddelande...
line 45 är:
mincon.execute query,,128
vad är fel på den då?
och jag har date och time i oloika för att de ska visas i olika rutor och jag tyckte att det blev enklast så
------------------
Tiden går och går medans jns sover och sover...
LarsGMedlem sedan dec. 200012 464 inlägg Jag undvek några problem som kan uppstå om man använder SQL.
Det första är reserverade ord. Om du använder date eller time t.ex. som kolumnnamn så blir det en konflikt då det är namnet på en funktion. För att undvika det så kan man antingen byta namn på kolumnen (rekommenderas) eller så får man skriva
query = "insert into t(msg,name,mail,webpage,icq,ip,[date],[time]) values('" & msg & "','" & name &"','" & mail & "','" & webpage & "','" & icq & "','" & ip & "','" & date & "','" & time & "')"
mincon.execute query,,128
Det blir samma problem om du skriver en select-sats så det är inget man kommer undan.
Det andra problemet är att man måste vara mer noga med vilken typ en kolumn är definierad som. Det påverkar hur man anger värdet i insert.
Följande gäller för Access
Text --> värdet anges inom '
datetime --> värdet anges inom #
number --> ingen avgränsare
------------------
essentitia preter non sans multiplicandum
jnsMedlem sedan dec. 2001132 inlägg tackar! de funkar jätte bra.... förutom en sak... inläggen kommer i en extremt mycko ordning...
2
3
4
5
1
och de ska se ut såhär:
5
4
3
2
1
?
------------------
Tiden går och går medans jns sover och sover...
LarsGMedlem sedan dec. 200012 464 inlägg Det är aldrig någon garanti att posterna kommer i en viss ordning om du inte använder order by
query = "select * from guestBook order by id desc"
T.ex. så sorteras resultatet så att de poster som har höhst id kommer först.
------------------
essentitia preter non sans multiplicandum
jnsMedlem sedan dec. 2001132 inlägg wee!
äntligen är den klar...
ta en titt på den här: http://www25.brinkster.com/kalasmannen/test.htm
------------------
Tiden går och går medans jns sover och sover...