webForumDet fria alternativet

Select from...

15 svar · 292 visningar · startad av jns

jnsMedlem sedan dec. 2001132 inlägg
#1

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
#2
SQL = "SELECT * from guestbook WHERE ID = " & Request.Querystring("id")

------------------
essentitia preter non sans multiplicandum

@ndersMedlem sedan juni 200032 969 inlägg
#3

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
#4

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
#5

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
#6

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
#7

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
#8

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
#9

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
#10

LarsG?

------------------
Tiden går och går medans jns sover och sover...

LarsGMedlem sedan dec. 200012 464 inlägg
#11

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
#12

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
#13

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
#14

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
#15

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
#16

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...

129 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)