06. november 2002 - 17:50Der er
8 kommentarer og 1 løsning
hente Access-data med ASP
Til et websted har jeg et script 'sportsgrene', som lister en række sportsgrene op i en menu. Ved klik på en sportsgren skal der på siden vises en overskrift med sportsgrenens navn samt en beskrivelse af sportsgrenen. Scriptet til menuen ser således ud:
<% sportsgreneid=request.querystring("sportsgreneid") if sportsgreneid<>"" and isnumeric(sportsgreneid) then session("sportsgreneid")=sportsgreneid sportsgreneid=session("sportsgreneid")
set dbrs=objConn.execute("select * from sportsgrene") if not (dbrs.eof or dbrs.bof) then while not dbrs.eof strsportsgren=dbrs("sportsgren") strid=dbrs("id") %> <tr> <td><a href="showinfo.asp?sportsgreneid=<%=strid%>"><%=strsportsgren%></a></td> </tr> <% dbrs.movenext wend end if dbrs.close %>
og scriptet til den side, hvor overskrift og beskrivelse af sportsgren skal være, ser således ud:
< sportsgreneid=request.querystring("id") set dbrs=objconn.execute("select * from sportsgrene") if not (dbrs.eof or dbrs.bof) then while not dbrs.eof strsportsgren=dbrs("sportsgren") strbeskrivelse=dbrs("beskrivelse") strid=dbrs("id") if sportsgreneid+1 = strid+1 then %> <tr> <td valign="top"><%=strsportsgren%></td> </tr> <tr> <td valign="top"><%=strbeskrivelse%></td> </tr> <tr> <td valign="top"> </td> </tr> <% else dbrs.movenext end if wend end if dbrs.close %>
Når jeg kører scriptet, kommer der hverken overskrift eller beskrivelse af sportsgren frem. Hvis jeg derimod sletter 'if sportsgreneid+1 = strid+1 then...' osv. kommer der overskrift og beskrivelse af alle sportsgrene. Hvordan skriver jeg en betingelsessætning, der kun viser en sportsgren ad gangen??? Databasen jeg bruger er Access 2002.
paa den side hvor du udskriver din sportsgren kan du tilfoeje dette til din sql, den kan maaske klare opgaven. SELECT * FROM sportsgrene WHERE id = " & sportsgreneid
herved faar du udvalgt alle de records som har det id du soeger, hvilket burde vaere en record.
<% sportsgreneid=request.querystring("id") set dbrs=objconn.execute("SELECT * FROM sportsgrene WHERE id = " & sportsgreneid")
Først det gode: selvfølgelig har du ret i, at der ikke er brug for nogen løkke-struktur; det er tilstrækkeligt i det første script. Og så det mindre gode: jeg har afprøvet dit forslag, men uden resultat - det giver fejlen
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'id ='.
Jeg tror problemet kan være, at 'id' er en integer og 'sportsgreneid' er en string. Jeg har prøvet følgende:
sportsgreneid=CInt(sportsgreneid) set dbrs=objconn.execute("SELECT * FROM sportsgrene WHERE id ="&sportsgreneid)
Det giver ingen fejl, når scriptet køres, men der bliver heller ikke skrevet noget ud om den konkrete sportsgren. Såå... er der andre forslag?
Undskyld det halvfærdige svar... Tog åbenbart ikke tid nok til at læse dit indlæg ordenligt igennem... Udfra fejlen [Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'id ='. tyder det som du siger meget på at sportsgreneid er tom... Har du prøvet at teste det med en <%=sportsgreneid%>?
Jeg har selv et script kørende som ser således ud: del = Request.QueryString("del") strSQL = "select * from news where (id = " & del & ")" som jeg bruger til at slette et nyhedsindlæg i en side... Prøv at sætte parantes og se om det hjælper for det er sgu lidt underligt :) Det skal lige siges at ID feldtet i DB'en er autonumber.
Fint - det lykkedes med dit forslag, psyco01. Disse linjer gjorde forskellen:
sportsgreneid=request.querystring("sportsgreneid") strSQL = "select * from sportsgrene where (id = " & sportsgreneid & ")" set dbrs=objconn.execute(strSQL) osv.
Nu skal jeg bare lige forstå hvorfor. Soes, du har ret i at variablen 'sportsgreneid' var tom, fordi <%=sportsgreneid%> skrev ikke noget ud. Ved at ændre
sker der det, at det, der bliver hentet af 'request.querystring' er den værdi, der står i adresselinjen, når der er klikket på en sportsgren. Det, der har forvirret mig, er linjen i det første script
altså 'sportsgreneid=<%=strid>'. Jeg har fokuseret på at få fat på id'et (som er autonummereret), men det er jo netop valgt i det første script. I det andet script drejer det sig i stedet om at få fat på den værdi, der er sat i adresselinjen, derfor
-det med pointene virkede ikke lige i første omgang - de kommer i eftermiddag
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.