/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Problemer med asp/SQL
Fra : Carsten Christensen


Dato : 18-01-05 13:31

Hej

Jeg har et problem med db forespørgsel.

Jeg ønsket at finde den rigtige bil ud fra to selectbokse (form).
Når man f.eks har valgt opel, skal den anden boks opdatere,
således at man ikke kan vælge "Opel 307".

Jeg skrev et indlæg under html og fik svar på det problem, men så
kom et nyt. Jeg har læst her på html.dk om asp, og jeg har læst
lidt i en bog. Jeg kan ikke umiddelbart se problemet i denne
kode.

Problemet kan ses her:
www.autocarelemvig.dk/pris

Koden der giver problemer ser således ud:

<form method="get" action="default.asp" name="fabriform">
<select size="1" name="fabri" id="fabri" onChange="maerke()">
<option selected="selected" disabled>::Vælg mærke::</option>
<%
dim rs,strSQL
strSQL = "SELECT DISTINCT(maerke) FROM bil"
Set rs = cn.Execute(strSQL)

Do
Response.Write "<option>" & rs("maerke") & "</option>"
rs.MoveNext
Loop While Not rs.EOF %> </form>
</td>
<td>
<form method="get" action="default.asp" name="modelform">
<select size="1" name="model" id="model">
<option selected="selected" disabled>::Vælg model::</option>
<%
dim rs2,strSQL2,strmaerke
Set strmaerke = Request.QueryString("fabri")

strSQL2 = "SELECT model FROM bil"
Set rs2 = cn.Execute(strSQL2)

If not rs2.EOF then
strSQL2 = "SELECT model FROM bil WHERE
maerke='strmaerke'"
Set rs2 = cn.Execute(strSQL2)
End If Do
Response.Write "<option>" & rs2("model") & "</option>"
rs2.MoveNext
Loop While Not rs2.EOF %> </form>

Første <form> synes at fungere, men det er som om den går i stå.
Det nederste af siden bliver ikke uploaded som på f.eks
www.autocarelemvig.dk/prod

Håber nogen kan hjælpe!
- Carsten


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Jens Gyldenkærne Cla~ (18-01-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 18-01-05 13:54

Carsten Christensen skrev:

> Jeg har læst her på html.dk om asp,

Lige for en ordens skyld - du er ikke "her" på html.dk. Dine indlæg er
sendt i danske nyhedsgrupper der kan læses på mange forskellige måder -
og mange andre steder end via html.dk.

Se evt. siden her: <http://html.dk/nyhedsgrupper/usenet.asp>.


> dim rs2,strSQL2,strmaerke
> Set strmaerke = Request.QueryString("fabri")

Her ser det fint ud. Du henter strmaerke fra querystring så den kan
bruges i forespørgslen.

> strSQL2 = "SELECT model FROM bil"
> Set rs2 = cn.Execute(strSQL2)

Men her går det galt. Du bruger ikke strmaerke - du skal jo kun hente de
modeller hvor mærket er strmaerke.


> If not rs2.EOF then
> strSQL2 = "SELECT model FROM bil WHERE
> maerke='strmaerke'"
> Set rs2 = cn.Execute(strSQL2)

Her går det endnu mere galt. Hvis der er poster i dit nye postsæt (rs2),
laver du en ny forespørgsel - denne gang med et kriterie - og lægger den
over i rs2. Din sql-sætning er heller ikke rigtig - du har fået
sql-anførselstegn om strmaerke, men du skal stadig have strmaerke ud af
asp-strengen.

Lige nu har du:

strSQL2 = "SELECT model FROM bil WHERE maerke='strmaerke'"

- som på dansk betyder "hent model-feltet fra bil-tabellen hvor
maerke-feltet har værdien "strmaerke". Da du formentlig ikke har nogen
biler af fabrikatet "strmaerke", returnerer sætningen ingen poster.

Det du skal bruge er:

strSQL2 = "SELECT model FROM bil WHERE maerke='" & strmaerke & "'"

Her bruges der strengsammensætning til at lave en streng hvor *værdien*
af variablen strmaerke indgår. Hvis du har kaldt siden med querystringen
"fabri=Ford", vil strSQL2 blive til:

   SELECT model FROM bil WHERE maerke='Ford'

- og dén sætning giver mening når den køres i databasen.


> End If Do

Her skal du have "Do" ned på en ny linje.

> Response.Write "<option>" & rs2("model") & "</option>"
> rs2.MoveNext
> Loop While Not rs2.EOF %>

En generel rettesnor ved databaseløkker - det er en fordel at have
kriteriet først. Når du skriver:

   Do
   ...
   Loop While Not rs.EOF

- vil løkken altid køre én gang, hvilket vil resultere i en fejl hvis
postsættet er tomt.

Skriver du i stedet:

   Do While Not rs.EOF
   ...
   Loop

- springes løkken helt over hvis postsættet er tomt. Det er oftest en
fordel.

--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Carsten Christensen (18-01-2005)
Kommentar
Fra : Carsten Christensen


Dato : 18-01-05 14:36

Lige først:
Tusind tak for din extreme tålmodighed Jens, den er ved at fise ind..

> Lige for en ordens skyld - du er ikke "her" på html.dk. Dine indlæg er
> sendt i danske nyhedsgrupper der kan læses på mange forskellige måder -
> og mange andre steder end via html.dk.
>
> Se evt. siden her: <http://html.dk/nyhedsgrupper/usenet.asp>.

Det vidste jeg egentlig godt, men tankerne var et andet sted

> > End If Do
>
> Her skal du have "Do" ned på en ny linje.

Copy-paste fejl!

Nu ser det således ud:
www.autocarelemvig.dk/pris

Og så den sidste lille detalje..
Når bilmærket er valgt, så reloades siden, og dermed står der igen ::vælg
mærke:: i stedet for det aktuelle mærke. Jeg ved godt hvorfor, men er der
en nem løsning på dette, eller er en løkke vejen frem?

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Jens Gyldenkærne Cla~ (18-01-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 18-01-05 22:32

Carsten Christensen skrev:

> Nu ser det således ud:
> www.autocarelemvig.dk/pris

Du får en databasefejl i linje 178. Der er formentlig en fejl i
sql-sætningen.

Se mere om hvordan du kommer videre her:
<http://asp-faq.dk/article/?id=41>

Hov - jeg opdagede lige en fejl jeg overså før. Du skriver

Set strmaerke = Request.QueryString("fabri")

Det er en fejl. "Set" skal kun bruges ved objektvariable - ikke ved
simple variable (variable der ikke har egenskaber, altså tal,
tekster, datoer mv.)


> Og så den sidste lille detalje..
> Når bilmærket er valgt, så reloades siden, og dermed står der
> igen ::vælg mærke:: i stedet for det aktuelle mærke.

Du har jo den værdi der skal være valgt i din querystring (fabri).
Du har også allerede en løkke der udskriver bilmærkerne.

Det du mangler er en if-sætning der undersøger om det aktuelle
mærke (fra postsættet) er det samme som din værdi fra querystring:

Dim strmaerke
strmaerke = Request.Querystring("fabri")
Do While Not rs.EOF
   If strmaerke = rs("maerke") Then
       Reponse.write "<option selected>" & _
           rs("maerke") & "</option>"
   Else
       Reponse.write "<option>" & _
           rs("maerke") & "</option>"
   End If
   rs.movenext
Loop
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste