Avatar billede vesting Nybegynder
06. november 2002 - 17:50 Der 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">&nbsp;</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.
Avatar billede soes Nybegynder
06. november 2002 - 18:34 #1
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")

strsportsgren=dbrs("sportsgren")
strbeskrivelse=dbrs("beskrivelse")
%>
        <tr>
          <td valign="top"><%=strsportsgren%></td>
        </tr>
        <tr>
          <td valign="top"><%=strbeskrivelse%></td>
        </tr>
        <tr>
          <td valign="top">&nbsp;</td>
        </tr>
<%
dbrs.close
%>
Avatar billede soes Nybegynder
06. november 2002 - 18:35 #2
set dbrs=objconn.execute("SELECT * FROM sportsgrene WHERE id = " & sportsgreneid")

skal vaere
set dbrs=objconn.execute("SELECT * FROM sportsgrene WHERE id = " & sportsgreneid)
Avatar billede vesting Nybegynder
06. november 2002 - 20:29 #3
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?
Avatar billede psyco01 Nybegynder
06. november 2002 - 22:20 #4
set dbrs=objconn.execute("SELECT * FROM sportsgrene WHERE id = (" & sportsgreneid & ")")

Prøv sådan
Avatar billede psyco01 Nybegynder
06. november 2002 - 22:22 #5
vrøvl...
set dbrs=objconn.execute("SELECT * FROM sportsgrene WHERE (id = '" & sportsgreneid & "')")

Det skulle gøre det!
Avatar billede soes Nybegynder
07. november 2002 - 14:37 #6
nope, jeg vil mene at problemet er at din variabel sportsgreneid er tom! ellers ville den have skrevet noget med at data-typerne ikke stemmer overens.
Avatar billede psyco01 Nybegynder
07. november 2002 - 15:59 #7
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.
Avatar billede vesting Nybegynder
08. november 2002 - 08:39 #8
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

sportsgreneid=request.querystring("id")

til

sportsgreneid=request.querystring("sportsgreneid")

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

<td><a href="showinfo.asp?sportsgreneid=<%=strid%>"><%=strsportsgren%></a></td>

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

'sportsgreneid=request.querystring("sportsgreneid")'

Lyder det som en rimelig forklaring?

Under alle omstændigheder: herligt at problemet er løst - 45 point til psyco01
Avatar billede vesting Nybegynder
08. november 2002 - 08:40 #9
-det med pointene virkede ikke lige i første omgang - de kommer i eftermiddag
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester