---
title: "Hämta data till listruta"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/147156-hämta-data-till-listruta"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Vinnaren"
published: "2006-05-21T09:08:37.000Z"
updated: "2006-05-30T15:44:20.000Z"
replies: 69
views: 2314
page: 1
pages: 4
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/147156-hämta-data-till-listruta"
---

# Hämta data till listruta

_Sida 1 av 4._

## #1 — Vinnaren, 2006-05-21T09:08Z

Hej

Jag undrar hur man skriver när man ska hämta data från en databas till en nedrullningsbar listruta??

min databaskopling är:

```
Set objConn = Server.CreateObject("ADODB.Connection")
Set objRS = Server.CreateObject("ADODB.recordset")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("databas.mdb")
```

samt HTML koden till rutan:

```
<select name="skribenter" size="3" onChange="this.form.namn.value=this[this.selectedIndex].value;" style="width: 150px;">
</select></font><font face="Verdana"><b><font size="2"><br>
		</font>
	</b><input type="text" name="Skribent" size="45"><b><font size="2"><br>
		Email:</font></b><font size="2"><br>
		</font>
		<input type="text" name="email" size="45">
```

Tabellen som det ska hämtas ifrån heter "red" och kolumnen "namn". 
Kan man även göra så när man trycker på ett namn så kommer dennes Email upp i rutan Email??

Tacksam för all hjälp jag kan få   :stud

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

## #2 — calson, 2006-05-21T22:20Z

Du kan använda en loop eller spara värdena i en array och sedan använda for.
Nedan har du ett exempel för en loop

Sql sattsen får du sköta själv.

```
<%

If not objRs.Eof Then

  response.write("<select name=""skribenter"" size=""3"" onChange=""this.form.namn.value=this[this.selectedIndex].value;"" style=""width: 150px;"">")

Do until objRs = nothing
  response.write(<option value=""" & objRs("värde") & """>" & objRs("värde") & "</option>")

objRs.MoveNext
Loop

  response.write("</select>")

End If
%>
```

Lycka till

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

## #3 — Vinnaren, 2006-05-22T10:41Z

ok, har provat med

```
<select name="namn" onChange="document.forms[0].email.value=this[this.selectedIndex].value;" style="width: 150px;">

<%set RS=objConn.execute("SELECT epost, namn FROM red order by namn")
if not RS.eof then
Do until RS.EOF
response.write "<option value="""&RS("epost")&""">"&RS("namn") & "<option>"
RS.Movenext
Loop
RS.close
else
rs.close
end if
%>
</select>

<input type="text" name="email" size="45">
```

men får följande felmeddelande:

Microsoft JET Database Engine (0x80040E10) 
Det har inte angetts något värde för en eller flera nödvändiga parametrar. 

på rad: \<%set RS=objConn.execute("SELECT epost, namn FROM redaktionen order by namn") 

vad kan det vara för fel?   :(

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

## #4 — @nders, 2006-05-22T10:46Z

Det är antagligen ett tabell- eller fältnamn som inte stämmer.

mvh

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

## #5 — Vinnaren, 2006-05-22T11:01Z

namnen stämmer, kan det vara i konflikt med något annat i koden? Jag hade tänkt att anv. denna till att kunna välja skribentens namn som har skrivit nyheten. Så nyheten sparas i en annan tabell i samma databas som man hämtar skribentens namn och epost ifrån   :r

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

## #6 — J.N., 2006-05-22T11:55Z

HEJ!

Lite långsökt, men testa sätt \[\] runt namn, epost och red, botar om du använt reserverade ord. Dock, inget av de bör vara det, inte ens på en svensk access-version. Reservation för 'red', men det är ju ett ord, vilket som.
Dubbel och trippelkolla så fälten och tabellen är rätt, posta annars mer av koden.

Jag tipsar om att du inte ska spara namnet i databasen knutet till nyheten, du spar personens id (räknare).

När man konstruerar databaser gäller att data endast ska finnas på ett ställe, dvs namn (+id och epost, ev mfl) i skribent-tabellen, och skribentens id-nummer är sedan det som sparas tillsammans med nyheten.

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

## #7 — Vinnaren, 2006-05-22T12:14Z

kan visa lite mer kod som jag har 
den som ska hämta skribenternas namn och epost: 

```

<select name="namn" onChange="document.forms[0].email.value=this[this.selectedIndex].value;" style="width: 150px;">

<%
Set objRS = objConn.Execute("SELECT epost, namn FROM red order by namn")
if not RS.eof then
Do until RS.EOF
response.write "<option value="""&RS("epost")&""">"&RS("namn") & "<option>"
RS.Movenext
Loop
RS.close
else
rs.close
end if
%>
</select>

<input type="text" name="email" size="45">
```

 

koden som ska spara nyheten  (vet att den går att förminska en del) 

```
<%
' Stänger och förstör alla objekt
objRS.Close : Set objRS = nothing
objConn.Close : Set objConn = nothing

' Sparar nyheten
ElseIf Request.QueryString("visa") = "nyhetspara" AND Session("Admin") = "true" Then

    strDatum        = now()
    strRubrik        = SafeSQL(Request.Form("rubrik"))
    strNyhet        = SafeSQL(Request.Form("nyhet"))
    strSkribent        = SafeSQL(Request.Form("Skribent"))
    strlank         = SafeSQL(Request.Form("lank"))
    strlanknamn    = SafeSQL(Request.Form("lanknamn"))
    stremail        = SafeSQL(Request.Form("email"))
    strkategori        = SafeSQL(Request.Form("kategori"))
    

    
    objConn.Execute("INSERT INTO nyheter(Datum,Rubrik,Nyhet,Skribent, lank, lanknamn, email,kategori) VALUES('" & strDatum & "','" & strRubrik & "','" & strNyhet & "','" & strSkribent & "','" & strlank & "','" & strlanknamn & "','" & stremail & "','" & strkategori & "')")
    
    ' Stänger och förstör alla objekt
    Set objRS = nothing : objConn.Close : Set objConn = nothing
    
    Response.Redirect sidnamn & "?visa=nyhet"
    
    
' Ändrar nyheten
ElseIf Request.QueryString("visa") = "nyhetandrat" AND Session("Admin") = "true" Then

    strRubrik        = SafeSQL(Request.Form("rubrik"))
    strNyhet        = SafeSQL(Request.Form("nyhet"))
    strSkribent        = SafeSQL(Request.Form("skribent"))
    strlank         = SafeSQL(Request.Form("lank"))
    strlanknamn        = SafeSQL(Request.Form("lanknamn"))
    stremail        = SafeSQL(Request.Form("email"))
    strkategori        = SafeSQL(Request.Form("kategori"))
    strDatum        = now()

    objConn.execute("Update nyheter Set Rubrik='" & strRubrik & "', Nyhet='" & strNyhet & "', Skribent='" & strSkribent & "', lank='" & strlank & "', lanknamn='" & strlanknamn & "', email='" & stremail & "', datum='" & strdatum & "', kategori='" & strkategori & "' Where id = "& SafeSQL(CLng(Request.Querystring("id"))))

    ' Stänger och förstör alla objekt
    Set objRS = nothing : objConn.Close : Set objConn = nothing

    Response.Redirect sidnamn & "admin.asp?visa=nyhet"

' Tar bort nyheten
ElseIf Request.QueryString("visa") = "tabort" AND Session("Admin") = "true" Then
    objConn.Execute("DELETE FROM nyheter WHERE id="& SafeSQL(CLng(Request.Querystring("id"))))
    Response.Redirect sidnamn & "?visa=nyhet"

    ' Stänger och förstör alla objekt
    Set objRS = nothing : objConn.Close : Set objConn = nothing

End If
%>
```

 

så jag vill alltså att man väljer sitt namn när man skriver nyheten, sen så ska namnet och emailen sparas tillsamans med nyheten.

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

## #8 — calson, 2006-05-22T14:59Z

Du använder både objRs och RS
Ändra objRs -\> RS så borde det fungera

```
<%
Set [b]RS[/b] = objConn.Execute("SELECT epost, namn FROM red order by namn")
if not RS.eof then
Do until RS.EOF
response.write "<option value="""&RS("epost")&""">"&RS("namn") & "<option>"
RS.Movenext
Loop
RS.close
else
rs.close
end if
%>
</select>

<input type="text" name="email" size="45">
```

I den nedre kodsnutten borde du först och främst kolla så du använder en av sätten att kalla objektet RS. Vill du använda RS så gör det överallt. När du använder **Set RS =**  så döper du objektet till rs och kommer därför att använda RS tills du stänger det då du skriver RS.Close : set RS = nothing och INTE objRs.Close

Samma med databasobjektet (i ditt fall objConn)

Tänk på att använda så få databasöppningar som möjligt.

```
<%
' Stänger och förstör alla objekt
RS.Close : Set RS = nothing
objConn.Close : Set objConn = nothing

' Sparar nyheten
ElseIf Request.QueryString("visa") = "nyhetspara" AND Session("Admin") = "true" Then

    strDatum        = now()
    strRubrik        = SafeSQL(Request.Form("rubrik"))
    strNyhet        = SafeSQL(Request.Form("nyhet"))
    strSkribent        = SafeSQL(Request.Form("Skribent"))
    strlank         = SafeSQL(Request.Form("lank"))
    strlanknamn    = SafeSQL(Request.Form("lanknamn"))
    stremail        = SafeSQL(Request.Form("email"))
    strkategori        = SafeSQL(Request.Form("kategori"))
    

    
    objConn.Execute("INSERT INTO nyheter(Datum,Rubrik,Nyhet,Skribent, lank, lanknamn, email,kategori) VALUES('" & strDatum & "','" & strRubrik & "','" & strNyhet & "','" & strSkribent & "','" & strlank & "','" & strlanknamn & "','" & stremail & "','" & strkategori & "')")
    
    ' Stänger och förstör alla objekt
    Varför stänga objRs när den inte är skapad? ta bort detta -> [b]Set objRS = nothing[/b] : objConn.Close : Set objConn = nothing
    
    Response.Redirect sidnamn & "?visa=nyhet"
    
    
' Ändrar nyheten
ElseIf Request.QueryString("visa") = "nyhetandrat" AND Session("Admin") = "true" Then

    strRubrik        = SafeSQL(Request.Form("rubrik"))
    strNyhet        = SafeSQL(Request.Form("nyhet"))
    strSkribent        = SafeSQL(Request.Form("skribent"))
    strlank         = SafeSQL(Request.Form("lank"))
    strlanknamn        = SafeSQL(Request.Form("lanknamn"))
    stremail        = SafeSQL(Request.Form("email"))
    strkategori        = SafeSQL(Request.Form("kategori"))
    strDatum        = now()

    objConn.execute("Update nyheter Set Rubrik='" & strRubrik & "', Nyhet='" & strNyhet & "', Skribent='" & strSkribent & "', lank='" & strlank & "', lanknamn='" & strlanknamn & "', email='" & stremail & "', datum='" & strdatum & "', kategori='" & strkategori & "' Where id = "& SafeSQL(CLng(Request.Querystring("id"))))

    ' Stänger och förstör alla objekt
    Samma här, ta bort -> [b]Set objRS = nothing[/b] : objConn.Close : Set objConn = nothing

    Response.Redirect sidnamn & "admin.asp?visa=nyhet"

' Tar bort nyheten
ElseIf Request.QueryString("visa") = "tabort" AND Session("Admin") = "true" Then
    objConn.Execute("DELETE FROM nyheter WHERE id="& SafeSQL(CLng(Request.Querystring("id"))))
    Response.Redirect sidnamn & "?visa=nyhet"

    ' Stänger och förstör alla objekt
    samma ta bort -> [b]Set objRS = nothing[/b] : objConn.Close : Set objConn = nothing

End If
%>
```

Nu kanske det blev luddigt, skrev detta som hastigast pga tidsbrist :)
Fråga om du inte förstår vad jag menar

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

## #9 — J.N., 2006-05-22T15:34Z

För att slippa skriva stäng- och förstörkod på varje sidan, lägg det i en include-fil, använd därefter den sub som behövs.

```
Sub close_rs_db()
	RS.close
	Set RS=nothing
	Conn.Close
	Set Conn=nothing
End Sub

'stänger övriga rs, genom tex Call Close_rs(rs3)
Sub Close_rs(byRef RS)
	RS.Close
	Set RS = Nothing
End Sub

'om endast finns Conn att stänga
Sub Close_db()
	Conn.Close
	Set Conn = Nothing
End Sub
```

Det räcker med Close_db() när du använt insert/update/delete alltså.

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

## #10 — Vinnaren, 2006-05-22T15:35Z

ok, tack. gjorde tvärt om RS--\> objRS, för objRS anv. i databaskopplingen men det ska väll inte vara någon skillnad?

```
<%
Set objRS = objConn.Execute("SELECT epost, namn FROM redaktionen order by namn")
if not objRS.eof then
Do until objRS.EOF
response.write "<option value="""&objRS("epost")&""">"&objRS("namn") & "<option>"
objRS.Movenext
Loop
objRS.close
else
objRS.close
end if
%>
```

Tyvärr så hjälpte inte detta, får fortfarande:

Microsoft JET Database Engine (0x80040E10)
Det har inte angetts något värde för en eller flera nödvändiga parametrar.

på raden:
Set objRS = objConn.Execute("SELECT epost, namn FROM red order by namn")

 :OO

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

## #11 — J.N., 2006-05-22T15:38Z

> **Vinnaren skrev:**
>
> ...
> Tyvärr så hjälpte inte detta, får fortfarande:
> 
> Microsoft JET Database Engine (0x80040E10)
> Det har inte angetts något värde för en eller flera nödvändiga parametrar.
> 
> på raden:
> Set objRS = objConn.Execute("SELECT epost, namn FROM red order by namn")

Och du har testat mina råd? Prova med \* istället, annan tabell, ta bort order by, sätt \[\], så vi närmar oss problemet.

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

## #12 — Vinnaren, 2006-05-22T15:46Z

ok, provade med: 
Set objRS = objConn.Execute("SELECT \* FROM val \[\]")

fick då felmeddelandet:
Microsoft JET Database Engine (0x80040E14)
Ogiltiga parenteser kring namnet '\[\]'.

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

## #13 — J.N., 2006-05-22T15:49Z

Hmm, det var väl ändå lite optimistiskt! :h
Citerar mig själv, enligt <https://www.webforum.nu/showthread.php?p=1196688#post1196688>.

> **Johnny skrev:**
>
> testa sätt \[\] runt namn, epost och red

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

## #14 — Vinnaren, 2006-05-22T15:55Z

tyvärr så hjälpte inte det heller   :( , men det kan inte kolidera med varandra då jag har ett fält i tabellen nyheter som också heter email??   :r

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

## #15 — J.N., 2006-05-22T15:58Z

Nej, du kan ha flera samma fält med i alla tabeller om du vill. Man namnger fältet tabell.fält då. Men, eftersom du endast är i en tabell, påverkar det inte!

Hur gick det med de andra förslagen?

- \* istället
- annan tabell
- ta bort order by

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

## #16 — Vinnaren, 2006-05-22T16:04Z

då kommer det fram:

ADODB.Recordset (0x800A0CC1)
Objektet kunde inte hittas i mängden med det begärda namnet eller numret.

på alla försöken

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

## #17 — J.N., 2006-05-22T16:12Z

:q 

Alt 1 borde inte ge det.
SELECT \* FROM red ORDER BY namn
(hämtar alla fält, och sorterar dem)

Alt 2 borde ge det.
SELECT epost FROM produkter ORDER BY flt
(hämta värde från en annan tabell, försöker sedan visa ett recordsetvärde som inte finns, tex epost från produkttabell)

Alt 3 borde inte heller ge det.
SELECT epost, namn FROM red
(hämtar alla fält från rätt tabell)

Har du **verkligen** skrivit enligt ovan, gör du något väldigt konstigt!

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

## #18 — Vinnaren, 2006-05-22T16:22Z

Set objRS = objConn.Execute("SELECT \* FROM nyheter ORDER BY rubrik")

fel:
ADODB.Recordset (0x800A0CC1)
Objektet kunde inte hittas i mängden med det begärda namnet eller numret.

fast där så ligger felet på:
response.write "\<option value="""&objRS("epost")&"""\>"&objRS("namn") & "\<option\>"

samma fel med:
Set objRS = objConn.Execute("SELECT rubrik FROM nyheter ORDER BY rubrik")

likaså med:
Set objRS = objConn.Execute("SELECT rubrik, email FROM nyheter ")

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

## #19 — J.N., 2006-05-22T16:32Z

:q

Nu använder du nyheter, är det den tabellen som gäller, eller du missförstod mig? Min tanke var att du skulle testa de tre förslagen var för sig på den tabellen du hade från början, red (alt redaktionen), och se vad som händer.

Att du får fel nu förstår du säkert varför; epost finns inte i tabellen nyheter.

Jag tror det enklaste är att du tänker igenom vad du försöker göra, vad heter fälten, tabellen, hur hämtar jag data och hur skriver jag ut det.

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

## #20 — Vinnaren, 2006-05-22T16:41Z

ok, gjorde det först då jag fick felmeddelandet:
ADODB.Recordset (0x800A0CC1)
Objektet kunde inte hittas i mängden med det begärda namnet eller numret.

ser nu när jag försökte igen att det inte felet ligger Set objRS = objConn.Execute("SELECT \* FROM redaktionen") utan på response.write "\<option value="""&objRS("epost")&"""\>"&objRS("namn") & "\<option\>"

oj, ser nu att den inte heter epost utan email :S

Men hur gör man nu när man ska spara namnet på den man har valt i dropdownrutan? bara emailen sparas nu. Sen så är det lite "luft" emellan varje namn, hur löser man det?

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

---

Tråden på webben: https://www.webforum.nu/amne/asp/147156-hämta-data-till-listruta  
Nästa sida: https://www.webforum.nu/amne/asp/147156-hämta-data-till-listruta/page2.md
