---
title: "iterera för att skriva ut en checkbox"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/145945-iterera-för-att-skriva-ut-en-checkbox"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "peppar"
published: "2006-04-24T13:06:37.000Z"
updated: "2006-05-04T14:52:36.000Z"
replies: 26
views: 1232
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/145945-iterera-för-att-skriva-ut-en-checkbox"
---

# iterera för att skriva ut en checkbox

_Sida 1 av 2._

## #1 — peppar, 2006-04-24T13:06Z

Jag har två tabeller i relation.

med_kategorier(här finns bara sex poster med usr_KATID 1-6)
\---------------
usr_KATID
usr_KATEGORI

med_origin 
\----------
usr_ORIGINID
usr_USRORIGIN
usr_KATEGORI

Säg att jag har en användare som tillhör kategorierna 1 och 3 t.ex.

Nu vill jag kunna uppdatera denna informationen genom att kolla igenom hela tabellen med_origin och skriva ut en chockbox för varje kategori, om användaren tillhör en kategori redan skall ceckboxen markeras "checked"... min kod nu ser ut såhär och den fungerar inte alls bra... den skriver ut hela settet flera gånger.... Det bör väl finnas bättre sätt?

```
sql1 =	"SELECT * from med_origin where usr_USRORIGIN = "& thisUsrId 
set rs1 = conndb1.execute(sql1)

do until rs1.eof
	if rs1("usr_KATEGORI") = 1 then
		response.write "<input name=""usr_KATEGORI"" type=""checkbox"" value=""1"" checked/>Odlare<br />"
	else
		response.write "<input name=""usr_KATEGORI"" type=""checkbox"" value=""1"" />Odlare<br />"
	end if

	if rs1("usr_KATEGORI") = 2 then
		response.write "<input name=""usr_KATEGORI"" type=""checkbox"" value=""2"" checked/>Uppf&ouml;dare<br />"
	else
		response.write "<input name=""usr_KATEGORI"" type=""checkbox"" value=""2"" />Uppf&ouml;dare<br />"
	end if

	if rs1("usr_KATEGORI") = 3 then
		response.write "<input name=""usr_KATEGORI"" type=""checkbox"" value=""3"" checked/>F&ouml;r&auml;dlare<br />"
	else
		response.write "<input name=""usr_KATEGORI"" type=""checkbox"" value=""3"" />F&ouml;r&auml;dlare<br />"
	end if

	if rs1("usr_KATEGORI") = 4 then
		response.write "<input name=""usr_KATEGORI"" type=""checkbox"" value=""4"" checked/>Matlagare<br />"
	else
		response.write "<input name=""usr_KATEGORI"" type=""checkbox"" value=""4"" />Matlagare<br />"
	end if	

	if rs1("usr_KATEGORI") = 5 then
		response.write "<input name=""usr_KATEGORI"" type=""checkbox"" value=""5"" checked/>Butik<br />"
	else
		response.write "<input name=""usr_KATEGORI"" type=""checkbox"" value=""5"" />Butik<br />"
	end if		

	if rs1("usr_KATEGORI") = 6 then
		response.write "<input name=""usr_KATEGORI"" type=""checkbox"" value=""6"" checked/>Resurs<br />"
	else
		response.write "<input name=""usr_KATEGORI"" type=""checkbox"" value=""6"" />Resurs<br />"
	end if		
rs1.movenext
loop
```

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

## #2 — Engine^, 2006-04-24T13:41Z

```
strSQL = "SELECT t1.usr_KATID AS t1KatId, t1.usr_KATEGORI AS t1Kat, t2.usr_KATEGORI AS t2KatId" & _
  " FROM med_kategorier t1" & _
  " LEFT JOIN med_origin t2 ON t1.usr_KATID = t2.usr_KATEGORI" & _
  " WHERE t2.usr_ORIGINID = " & thisUserId & _
  " ORDER BY t1.usr_KATEGORI"

 set rs1 = conndb1.execute( strSQL )

while ( not rs1.eof )

  response.write "<input name=""usr_kategori"" type=""checkbox"" value=""" & rs1( "t1KatId" ) & """"

  if ( rs1( "t1KatId" ) = rs1( "t2KatId" ) ) then
    response.write " checked>" & rs1( "t1Kat" ) & "<br />"
  else
    response.write ">" & rs1( "t1Kat" ) & "<br />"
  end if

  call rs1.movenext()

wend
```

Nu lovar jag inte att den här koden fungerar speciellt bra, men såhär skulle jag förmodligen försökt lösa det hela.

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

## #3 — CatZ, 2006-04-24T13:47Z

Vet inte om det stämmer precis men det borde ge dig en idé om hur man kan gå till väga. Har absolut inte testat koden men om du knåpar lite får du nog ihop det :)

```
sql1 =	"SELECT * from med_origin where usr_USRORIGIN = "& thisUsrId 
set rs1 = conndb1.execute(sql1)
dim intUsrCat, funcTitel

	
do while not rs1.eof
	intUsrCat = CInt(rs1("usr_KATEGORI"))
	for i = 1 to 6
		response.write "<input name=""usr_KATEGORI"" type=""checkbox"" value=""" & i & """ "
			If i = intUsrCat Then 
				response.write " selected" 
			end if
		response.write "/>" & funcTitel & "<br />"
	i = i + 1
	next
rs1.movenext
loop
```

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

## #4 — peppar, 2006-04-24T22:14Z

> **Engine^ skrev:**
>
> Nu lovar jag inte att den här koden fungerar speciellt bra, men såhär skulle jag förmodligen försökt lösa det hela.

 Den skriver inte ut någonting... Inget felmeddelande.

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

## #5 — peppar, 2006-04-25T07:03Z

> **CatZ skrev:**
>
> Vet inte om det stämmer precis men det borde ge dig en idé om hur man kan gå till väga. Har absolut inte testat koden men om du knåpar lite får du nog ihop det :)

 Det fungerar ju så långt att den skriver ut alla checkboxarna, men att sedan få in rätt värde från med_kategorier.usr_KATEGORI till funcTitel är en annan femma... Jag har provat att sätta ihop några olika JOIN baserade frågor men ofta får jag *undantag inträffade fel*

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

## #6 — Engine^, 2006-04-25T07:22Z

> **peppar skrev:**
>
> Den skriver inte ut någonting... Inget felmeddelande.

Det kan bero på två saker.

Antingen matchar inte sql-uttrycket något - vilket är väldigt enkelt att testa.
Eller så jämförs inte rätt saker i if-satsen - vilket också är enkelt för dig att kolla, eftersom det är din databas kan du ju se vad som ska testas.

Det blir inget felmeddelande, eftersom inga fel orsakas. :OO

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

## #7 — peppar, 2006-04-25T08:08Z

om jag innan whileloppen försöker skriva ut t.ex rs1( "t1Kat" ) så för jag bof eller eof är satt till True ... osv.
Då matchas inget, eller hur?!

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

## #8 — peppar, 2006-04-25T08:15Z

Dang! Ett fel hittade jag i frågan 

```
strSQL = "SELECT t1.usr_KATID AS t1KatId, t1.usr_KATEGORI AS t1Kat, t2.usr_KATEGORI AS t2KatId" & _
  " FROM med_kategorier t1" & _
  " LEFT JOIN med_origin t2 ON t1.usr_KATID = t2.usr_KATEGORI" & _
  " WHERE t2.[b]usr_USRORIGIN[/b] = " & thisUserId & _
  " ORDER BY t1.usr_KATEGORI"
```

 Den var tidigare **usr_ORIGINID**. Som du sade lite att jämföra fel saker...

Nu skriver den **endast** ut dom kategorier man redan tillhör....  inte dom som skall lämnas tomma...

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

## #9 — Engine^, 2006-04-25T08:45Z

Ok. Testa kör frågan direkt i ditt DBMS. Jag chansade lite på dina kolumner när jag skrev ihop det och du kanske kan se om det är någon missmatch på join-villkoret eller om möjligen användarid:t är galet.

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

## #10 — peppar, 2006-04-25T09:31Z

Om jag skickar in 39 i **thisUsrId** så får jag ut två poster, i både Access och Visual Studios QUERYhanterare. Det är ju det jag skall ha ut också. Men jag vill också få ut dom som inte matchar för att kunna skriva ut dom också... Går det att åstadkomma med samma fråga?

Jag skickar med en liten bild av hur tabellerna ser ut...

Bilagor:

- [joint.jpg](https://www.webforum.nu/a/10495.jpg)

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

## #11 — Engine^, 2006-04-25T09:49Z

Tja... det är ju typiskt det du använder left join till.

Left join innebär lite löst: ta med allt från vänstra tabellen och det som matchar från den högra tabellen. Det som matchar är vad du anger i ON-villkoret.

Men här verkar ju något gå snett av någon anledning och just nu kommer jag inte på varför... följande ska fungera helt enkelt

```
SELECT med_kategorier.usr_KATEGORI, med_origin.usr_USRORIGIN
FROM med_kategorier
LEFT JOIN med_origin ON med_kategorier.usr_KATID = med_origin.usr_KATEGORI
WHERE med_origin.usr_USRORIGIN = 39
ORDER BY med_kategorier.usr_KATID
```

Här bör det komma följande resultat

```
odlare      null
uppfödare   null
förädlare   null
matlagare   39
butik       null
resurs      39
```

Efter detta ska det räcka att ändra i if-satsen i min kod till

```
if ( not isnull( rs1( "usr_USRORIGIN" ) ) ) then
```

Tycker jag...

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

## #12 — peppar, 2006-04-25T10:18Z

Ja, jag har stirrat på det här ett tag nu, jag skall ta en promenad och försöka få lite luft... såhär ser koden ut nu 

```
strSQL = "SELECT med_kategorier.*, med_origin.*"&_
	  " FROM med_kategorier"&_
	  " LEFT JOIN med_origin ON med_kategorier.usr_KATID = med_origin.usr_KATEGORI"&_
	  " WHERE med_origin.usr_USRORIGIN = " & thisUsrId & _ [b] värdet är 39[/b]
	  " ORDER BY med_kategorier.usr_KATID"

 set rs1 = conndb1.execute( strSQL )

while ( not rs1.eof )

  response.write "<input name=""usr_kategori"" type=""checkbox"" value=""" & rs1("usr_KATID") & """"

  if ( not isnull( rs1( "usr_USRORIGIN" ) ) ) then
    response.write " checked>" & rs1("usr_KATID") & "<br />"
  else
    response.write ">" & rs1("usr_KATID") & "<br />"
  end if

  call rs1.movenext()
```

 och den genererar:

matlagare   39
resurs      39

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

## #13 — Engine^, 2006-04-25T12:59Z

Hoppsan Kerstin! :r

Det är ju inget fel i det resultatet... det är jag som är helt ute och cyklar i mina sql-kunskaper :D

Frågan bör nog se lite annorlunda ut

```
SELECT usr_KATEGORI, (SELECT 1 FROM med_origin
WHERE usr_usrorigin=39 AND usr_kategori = t2.usr_katid)
FROM med_kategorier t2
ORDER BY usr_katid
```

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

## #14 — @nders, 2006-04-25T13:02Z

Flytta villkoret från WHERE till JOIN-instruktionen, annars blir det en INNER JOIN av det hela.

```
"LEFT JOIN med_origin ON med_kategorier.usr_KATID = med_origin.usr_KATEGORI"&_
	  " AND med_origin.usr_USRORIGIN = 39"
```

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

## #15 — peppar, 2006-04-25T13:18Z

> **@nders skrev:**
>
> Flytta villkoret från WHERE till JOIN-instruktionen, annars blir det en INNER JOIN av det hela.
>
> ```
> "LEFT JOIN med_origin ON med_kategorier.usr_KATID = med_origin.usr_KATEGORI"&_
> 	  " AND med_origin.usr_USRORIGIN = 39"
> ```

 Då stöds inte kopllingsuttrycket längre...

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

## #16 — @nders, 2006-04-25T13:18Z

Jävla Access. :(

Mvh

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

## #17 — Engine^, 2006-04-25T13:19Z

Spana på min förra post så ska du se att det fungerar bättre... :)

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

## #18 — peppar, 2006-04-25T13:24Z

Dang! ;) Nu fungerar det i Access...

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

## #19 — CatZ, 2006-04-25T13:44Z

Glom inte markera traden som lost! *djavla engelska tangentbord!!* Mwhahahah

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

## #20 — peppar, 2006-04-25T19:42Z

> **CatZ skrev:**
>
> Glom inte markera traden som lost! *djavla engelska tangentbord!!* Mwhahahah

Nejdå! Jag brukar vara duktigt på det, men jag tänkte att när jag fått hela utskriften att fungera så kan jag posta läsningen här och då när jag fått det att fungera markera tråden... :)

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

---

Tråden på webben: https://www.webforum.nu/amne/asp/145945-iterera-för-att-skriva-ut-en-checkbox  
Nästa sida: https://www.webforum.nu/amne/asp/145945-iterera-för-att-skriva-ut-en-checkbox/page2.md
