---
title: "lista i ASP"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/179349-lista-i-asp"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Sanji"
published: "2009-07-10T13:59:34.000Z"
updated: "2009-08-01T18:25:27.000Z"
replies: 21
views: 1227
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/179349-lista-i-asp"
---

# lista i ASP

_Sida 1 av 2._

## #1 — Sanji, 2009-07-10T13:59Z

Hej! jag har gjort en lista i asp som hämtar data ur två olika tabeller. Den ena hämtar motorcykelmärken och skapar en rad i en html-tabell för varje märke, och den andra hämtar alla motorcykelmodeller där fältet "Prio = 1".

Det funkar bra och visar en lista med märken och modeller, men problemet jag har är att den skapar en rad i tabellen för motorcykelmärken som inte har några modeller med "prio = 1". jag vill bara visa de märken som har modeller med "prio=1", här nedan följer min kod på själva tabellen:

```
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%">
<%
Set Recset = server.CreateObject("ADODB.recordset")

sel = "select * FROM RegisterMarken"

								
Recset.open sel, connect
DO UNTIL RecSet.EOF
	%>
	<TR>
	 <TD WIDTH="100" CLASS="brod"> <%=RecSet("Name")%></TD>
	 <TD ALIGN="center" CLASS="brod">Prio </TD>
	 <TD ALIGN="center" CLASS="brod"> Antal</TD>
	 <TD ALIGN="center" CLASS="brod">90</TD>
	 <TD ALIGN="center" CLASS="brod">91</TD>
	 <TD ALIGN="center" CLASS="brod">92</TD>
	 <TD ALIGN="center" CLASS="brod">93</TD>
	 <TD ALIGN="center" CLASS="brod">94</TD>
	 <TD ALIGN="center" CLASS="brod">95</TD>
	 <TD ALIGN="center" CLASS="brod">96</TD>
	 <TD ALIGN="center" CLASS="brod">97</TD>
	 <TD ALIGN="center" CLASS="brod">98</TD>
	 <TD ALIGN="center" CLASS="brod">99</TD>
	 <TD ALIGN="center" CLASS="brod">00</TD>
	 <TD ALIGN="center" CLASS="brod">01</TD>
	 <TD ALIGN="center" CLASS="brod">02</TD>
	 <TD ALIGN="center" CLASS="brod">03</TD>
	 <TD ALIGN="center" CLASS="brod">04</TD>
	</TR>
```

 

Tabellen som märkena ligger i heter : RegisterMarken

Tabellen som modellerna ligger i heter: RegisterModell

här finns prio-fälten.

hur kan jag göra så att utskriften av märkena som finns i RegisterMarken sker endast då prio=1 i tabellen ReisterModell stämmer?

MVH. Marcus

Permalänk: https://www.webforum.nu/p/179349

## #2 — rille77, 2009-07-10T14:20Z

Nån form av JOIN borde ju funka.

```
select * FROM RegisterMarken LEFT JOIN RegisterModell ON RegisterMarken.Tillverkare = RegisterModell.Tillverkare WHERE RegiterModell.Prio = 1
```

Permalänk: https://www.webforum.nu/p/2192654

## #3 — Sanji, 2009-07-24T06:59Z

Jag är nu tillbaka från semestern, jag ska testa detta och återkommer med svar!

Permalänk: https://www.webforum.nu/p/2193837

## #4 — Sanji, 2009-07-24T07:20Z

Hmm...

jag tycker att detta borde funka, men om jag använder LEFT JOIN så listas endast några märken upp och inget annat, och då jag bara använder JOIN så får jag detta felmeddelande: \[Microsoft\]\[ODBC Microsoft Access Driver\] Syntax error in FROM clause. Någon som har någon idé? jag ska testa mig fram lite så länge...

min sql-rad ser ut så här för tillfället:

```
sel = "SELECT * FROM RegisterMarken JOIN RegisterModell ON RegisterMarken.Name = RegisterModell.Marke WHERE RegisterModell.Prio = 1"
```

Det är en till sak som stör mig... om man gör på det här sättet så kommer det bli en grafisk tabellrad för varje motorcykel, ex. kawasaki-motorcyklar sorteras inte under kawasaki utan det blir en ny kawasakirubrik för varje kawasaki-motorcykel.

Permalänk: https://www.webforum.nu/p/2193838

## #5 — Peter S, 2009-07-24T13:04Z

Byt JOIN till INNER JOIN -- samma sak men annan syntax.

Permalänk: https://www.webforum.nu/p/2193845

## #6 — Sanji, 2009-07-24T13:53Z

Tack

tack för hjälpen, men är det någon som har en lösning till mitt andra problem?

> Det är en till sak som stör mig... om man gör på det här sättet så kommer det bli en grafisk tabellrad för varje motorcykel, ex. kawasaki-motorcyklar sorteras inte under kawasaki utan det blir en ny kawasakirubrik för varje kawasaki-motorcykel.

jag vill ha endast EN tabellrad för varje märke.

Permalänk: https://www.webforum.nu/p/2193849

## #7 — preben, 2009-07-24T14:18Z

Studera detta exempel... och gör dig själv en tjänst och överväg att undvika frestelsen att skriva "SELECT stjärna"! :-)

SELECT u.intID, u.strFirstName, u.strLastName FROM \[users\] u ORDER BY u.strLastname, u.strFirstname;

Det finns ingen anledning till att skriva select stjärna och det är bara nybörjare som gör det också, alternativt folk som av någon anledning vill... bara för de inte orkar skriva eller vad som helst!?

Oavsett vilket, det är sämsta alternativet alla kategorier! :-)

Permalänk: https://www.webforum.nu/p/2193853

## #8 — doggelito, 2009-07-24T14:24Z

Eftersom ett märke kan ha flera modeller så visas märket logiskt flera gånger (en för varje modell). 
Om du vill ha ex:
Märke 1
  Modell 1
  Modell 2
Märke 2
  ...

så får du kolla i loopen om du redan skrivit ut märket eller ej.

```
Dim manufacter
manufacter = ""
DO UNTIL RecSet.EOF
     If manufacter <> RecSet("Namn") Then
          Response.Write(RecSet("Namn"))
          manufacter = RecSet("Namn")
     End If
...
```

Permalänk: https://www.webforum.nu/p/2193854

## #9 — doggelito, 2009-07-24T14:30Z

> **[preben skrev:](https://www.webforum.nu/p/1474726)**
>
> Studera detta exempel... och gör dig själv en tjänst och överväg att undvika frestelsen att skriva "SELECT stjärna"! :-)
> 
> SELECT u.intID, u.strFirstName, u.strLastName FROM \[users\] u ORDER BY u.strLastname, u.strFirstname;
> 
> Det finns ingen anledning till att skriva select stjärna och det är bara nybörjare som gör det också, alternativt folk som av någon anledning vill... bara för de inte orkar skriva eller vad som helst!?
> 
> Oavsett vilket, det är sämsta alternativet alla kategorier! :-)

Håller inte med, jag föredrar \* på alla tabeller utom extremt stora och då jag endast söker en eller ett par kolumner.
Och att döpa kolumner till int\[Komumn\], str\[Kolumn\] är verkligen inte nått jag rekomenderar!

Sen om jag tillhör nybörjarna eller annat folk låter jag vara osakt! ;)

Permalänk: https://www.webforum.nu/p/2193856

## #10 — Sanji, 2009-07-27T06:22Z

tack alla som svarat

tack så mycket för all hjälp, nu ska jag testa det där med loopen direkt!

en sak jag funderar på är, vad gör: "manufacter \<\> RecSet("Namn")" ? jag har inte sett \<\> användas förut.

Permalänk: https://www.webforum.nu/p/2194060

## #11 — voigtann1, 2009-07-27T07:51Z

\<\> innebär att det skall vara skillt ifrån något:

"bob" \<\> "Göran"

kommer bli sant eftersom bob inte är Göran.

Permalänk: https://www.webforum.nu/p/2194063

## #12 — Sanji, 2009-07-27T07:58Z

aha, då förstår jag! tack så mycket

Permalänk: https://www.webforum.nu/p/2194067

## #13 — Sanji, 2009-07-27T09:12Z

Grejen med att kolla om märket redan skrivits ut med denna loop 

```
Dim manufacter
manufacter = ""
DO UNTIL RecSet.EOF
     If manufacter <> RecSet("Namn") Then
          Response.Write(RecSet("Namn"))
          manufacter = RecSet("Namn")
     End If
```

 är att jag inte får det att funka ordentligt. för det första så skrivs det ut en massa märken som innan, och de hamnar heller inte i en tabell. 

Ursäkta för att jag är lite nybörjare, jag har bara pracis börjat med ASP så jag är inte så van vid att felsöka och komma på lösningar :(

Permalänk: https://www.webforum.nu/p/2194071

## #14 — Sanji, 2009-07-27T09:24Z

ursäkta mig

loopen fungerar om man sorterar mysql_query'n efter Märken. Jag återkommer när jag fått iordning på allt!

Permalänk: https://www.webforum.nu/p/2194073

## #15 — Sanji, 2009-07-27T12:53Z

ungefär så här ser min nuvarande sida ut:

```
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%">
<%
Set Recset = server.CreateObject("ADODB.recordset")

sel = "SELECT * FROM RegisterMarken INNER JOIN RegisterModell ON RegisterMarken.ID = RegisterModell.BrandID WHERE RegisterModell.Prio = 1 ORDER BY RegisterModell.Marke ASC"

Recset.open sel, connect

Dim manufacturer
manufacturer = ""

DO UNTIL RecSet.EOF
if manufacturer <> RecSet("Marke") Then
  
  

	%>
	<TR>
	 <TD WIDTH="100" CLASS="brod"><%=RecSet("Marke")%></TD>
	 <TD ALIGN="center" CLASS="brod">Prio </TD>
	 <TD ALIGN="center" CLASS="brod"> Antal</TD>
	 <TD ALIGN="center" CLASS="brod">90</TD>
	 <TD ALIGN="center" CLASS="brod">91</TD>
	 <TD ALIGN="center" CLASS="brod">92</TD>
	 <TD ALIGN="center" CLASS="brod">93</TD>
	 <TD ALIGN="center" CLASS="brod">94</TD>
	 <TD ALIGN="center" CLASS="brod">95</TD>
	 <TD ALIGN="center" CLASS="brod">96</TD>
	 <TD ALIGN="center" CLASS="brod">97</TD>
	 <TD ALIGN="center" CLASS="brod">98</TD>
	 <TD ALIGN="center" CLASS="brod">99</TD>
	 <TD ALIGN="center" CLASS="brod">00</TD>
	 <TD ALIGN="center" CLASS="brod">01</TD>
	 <TD ALIGN="center" CLASS="brod">02</TD>
	 <TD ALIGN="center" CLASS="brod">03</TD>
	 <TD ALIGN="center" CLASS="brod">04</TD>
	</TR>
	<TR>
	 <TD COLSPAN="100" CLASS="brod"><IMG SRC="iconer/tonlinje.gif"></TD>
	</TR>

	<TR>
	 <TD COLSPAN="100" CLASS="brod"><IMG SRC="iconer/tonlinje.gif"></TD>
	</TR>
	<%

manufacturer = RecSet("Marke")
end if

	BG    = "GrayLite"
	Set Rmc = server.CreateObject("ADODB.recordset")
	MC = "select * FROM RegisterModell where Prio = 1 AND VisaIGrid = 'ja' AND Marke = '" & manufacturer & "' ORDER BY Model"				
	Rmc.open MC, connect

	DO UNTIL Rmc.EOF

	'****************| koden för att räkna ut antalat av modellen i lager |****************
		Set LagerCount = server.CreateObject("ADODB.recordset")
		SelectLager = "select * FROM motorcyklar WHERE salestatus = 0 and registerID =" & Rmc("ID")				
		LagerCount.open SelectLager, connect
		Lager = 0
		DO UNTIL LagerCount.EOF
		 Lager = Lager + 1
		 LagerCount.MoveNext
		Loop
		LagerCount.Close
		set lagerCount = nothing
	'*************************************************************************************
	
		%>
		<TR CLASS="<%=BG%>">
		
		 
		  <TD WIDTH="100"><%=Rmc("Model")%></TD>
		  <TD><%=Rmc("Prio")%></TD>
		  <TD ALIGN="CENTER"><%=Lager%></TD>
		 		 <%
		 

		 
		 '=======================================================================
		 'Skriver ut de olika årsmodellerna
		 '=======================================================================
		  Set RY = server.CreateObject("ADODB.recordset")
		  YR = "select * from GridYear WHERE ModelID =" & Rmc("ID")
		  RY.open YR, connect
		  DO UNTIL RY.EOF
						
			%>
			 
			
			 <TD ALIGN="center"><%=RY("Price")%></TD>
			<%
			
		  RY.MoveNext
		  Loop
		  
		  
		  

		  
		  
		  %>
		</TR>
		<%	
		'---------Sätter olika färger på varanan rad------------
		IF BG = "GrayLite" THEN BG = "GrayDark" ELSE BG = "GrayLite" END IF
		'-------------------------------------------------------
		
Rmc.MoveNext
	Loop
	Rmc.Close
	set rmc = nothing

%>
<%

RecSet.MoveNext
Loop	
Recset.Close 
%>
```

Denna kod skriver nu ut alla modeller under rätt märke, MEN av någon anledning kommer det flera av samma modell ett antal gångerunder varje märke... ex. under suzuki kommer:

SV 650 N     
SV 650 S  
VL 800 Volusia 
VZ 800 Marauder
SV 650 N     
SV 650 S  
VL 800 Volusia 
VZ 800 Marauder
SV 650 N     
SV 650 S  
VL 800 Volusia 
VZ 800 Marauder
SV 650 N     
SV 650 S  
VL 800 Volusia 
VZ 800 Marauder

är det någon som kan se felet? jag känner mig blind just nu, hur mycket jag än går igenom koden hittar jag det inte :/

Permalänk: https://www.webforum.nu/p/2194093

## #16 — doggelito, 2009-07-28T09:11Z

Jag tror du missförstod lite! :)
Tricket med if-satsen i loopen var att du inte behöver hämta modellerna i en separat selectsats utan de hämtas samtidigt. Du behöver heller inte ha en separat selectsats för att räkna cyklarna. Slå ihop alla tre till en gemensam och försök få till det därifrån.
Selecten bör se ut något liknande:

```
sel = "SELECT *, (SELECT COUNT(*) FROM motorcyklar AS mot WHERE mot.salestatus = 0 AND mot.registerID = rmo.ID) AS Stock FROM RegisterMarken AS rma INNER JOIN RegisterModell AS rmo ON rma.ID = rmo.BrandID WHERE rmo.Prio = 1 And rmo.VisaIGrid = 'ja' ORDER BY rma.Marke ASC, rmo.Modell ASC"
```

och lite exempelkod:

```
Dim manufacturer
manufacturer = ""

Response.Write("<tr><th>Märke/Modell</th><th>Lager</th></tr>")

DO UNTIL RecSet.EOF
     If manufacturer <> RecSet("Marke") Then
          Response.Write("<tr><td>" & RecSet("Marke") & "</td></tr>")
     End If
     Response.Write("<tr><td>" & RecSet("Modell") & "</td><td>" &  RecSet("Stock")  & "</td></tr>")
```

Permalänk: https://www.webforum.nu/p/2194173

## #17 — Sanji, 2009-07-29T09:26Z

En till sak

Okej, nu har jag skrivit om och nu får jag motorcyklarna att listas korrekt, men jag har fortfarande ett problem. Jag måste också få ut priset i euro efter varje årsmodell...

kan man kanske göra detta enkelt med en for-loop eller? I tabellen gridyear finns motorcykelns id, årsmodell och pris. det ska skrivas ut ett pris för varje årsmodell, ex.

Suzuki \| Prio \| Lager \| 90 \| 91 \| 92 \| 93 \| 94 \| 95 \| 96 \| 97 \| 98 \| 99 \| 00 \| 01 \| 02 \| 03 \| 04

och här under ska det stå ett pris för varje årtal m.m. 

eller går det att smälla ihop även detta med föregående?

här är ett exempel på hur jag tänker, jag vet att det finns fel då jag inte är så duktig med asp än.

```
<%
		 '=======================================================================
		 'Skriver ut de olika årsmodellerna
		 '======================================================================= 
			For count = 1990 to 2004
                        
                        YR = "select * FROM GridYear INNER JOIN RegisterModell AS rmo ON GridYear.ModelID = rmo.ID WHERE rmo.Prio = 1 And rmo.VisaIGrid = 'ja' AND GridYear.Year = " & count & " ORDER BY rmo.Marke ASC, rmo.Model ASC"
			%>
			 <TD ALIGN="center"><%=YR("Price")%></TD>
			<%
		 	  Next
		  %>
```

Permalänk: https://www.webforum.nu/p/2194287

## #18 — doggelito, 2009-07-29T18:37Z

> **Sanji skrev:**
>
> eller går det att smälla ihop även detta med föregående?

Ja, smäll ihop bara! :)
Det blir lite finlir när du ska rita ut det hela bara men det ska du nog få till. 

```
sel = "
SELECT *, (
     SELECT COUNT(*) 
     FROM motorcyklar AS mot 
     WHERE mot.salestatus = 0 AND mot.registerID = rmo.ID) AS Stock 
FROM RegisterMarken AS rma 
INNER JOIN RegisterModell AS rmo ON rma.ID = rmo.BrandID 
INNER JOIN GridYear AS grd ON grd.ModellID = rmo.ID
WHERE rmo.Prio = 1 And rmo.VisaIGrid = 'ja' 
ORDER BY rma.Marke ASC, rmo.Modell ASC"
```

(jag slog isär raderna bara för att se tydligare)

```
Dim manufacturer, model, gridYearStart, gridYearEnd
manufacturer = ""
model = ""
gridYearStart = 1990
gridYearEnd = Year(Now())
Response.Write("<tr><th>Märke/Modell</th><th>Lager</th>)
For gridYearStart to gridYearEnd
     Response.Write("<th>" & gridYearStart & "</th>")
Next
Response.Write("</tr>")

DO UNTIL RecSet.EOF
     If manufacturer <> RecSet("Marke") Then
          Response.Write("<tr><td colspan=""" & gridYearEnd-gridYearStart & """>" & RecSet("Marke") & "</td></tr>")
     End If
     Response.Write("<tr><td>" & RecSet("Modell") & "</td><td>" &  RecSet("Stock")  & "</td>")
     
     gridYearStart = 1990
     model = RecSet("Modell")
     For gridYearStart to gridYearEnd
          Response.Write("<td>" & RecSet("Price") & "</td>")
          If RecSet.Eof Then Exit For
          RecSet.MoveNext()
          If model <> RecSet("Modell") Then
               RecSet.MovePrevious()
               Exit For
          End If
     Next

     If gridYearStart < gridYearEnd Then
          For gridYearStart to gridYearEnd
               Response.Write("<td></td>")
          Next
     End If

     Response.Write("</tr>")
```

Jag har dock semester så vissa fel kan ha smugit sig in i koden men du får nånting att labba med i alla fall! ;)

Permalänk: https://www.webforum.nu/p/2194323

## #19 — Sanji, 2009-07-30T06:21Z

Tack så mycket! nu ska det testas :)

Permalänk: https://www.webforum.nu/p/2194350

## #20 — Sanji, 2009-07-30T08:35Z

nu är det något problem med min sql-sats. min webläsare klagar på: 

\[Microsoft\]\[ODBC Microsoft Access Driver\] Syntax error (missing operator) in query expression 'rma.ID = rmo.BrandID INNER JOIN GridYear AS grd ON grd.ModellID = rmo.ID'

```
sel = "SELECT *, (SELECT COUNT(*) FROM motorcyklar AS mot WHERE mot.salestatus = 0 AND mot.registerID = rmo.ID)
 AS Stock FROM RegisterMarken AS rma 
INNER JOIN RegisterModell AS rmo ON rma.ID = rmo.BrandID 
INNER JOIN GridYear AS grd ON grd.ModellID = rmo.ID 
WHERE rmo.Prio = 1 And rmo.VisaIGrid = 'ja' ORDER BY rma.Name ASC, rmo.Model ASC"
```

Löst detta problem, men fått andra ^^ Jag fick skriva om min select-kod lite innan det funkade:

```
sel = "SELECT *, (SELECT COUNT(*) FROM motorcyklar AS mot WHERE mot.salestatus = 0 AND mot.registerID = rmo.ID) 
AS Stock FROM RegisterMarken AS rma INNER JOIN (GridYear AS grd INNER JOIN RegisterModell AS rmo ON grd.ModelID = rmo.ID) 
ON rma.ID = rmo.BrandID 
WHERE rmo.Prio = 1 And rmo.VisaIGrid = 'ja' ORDER BY rma.Name ASC, rmo.Model ASC"
```

Permalänk: https://www.webforum.nu/p/2194356

---

Tråden på webben: https://www.webforum.nu/amne/asp/179349-lista-i-asp  
Nästa sida: https://www.webforum.nu/amne/asp/179349-lista-i-asp/page2.md
