Avatar billede thomas_b Nybegynder
03. august 2004 - 16:16 Der er 23 kommentarer og
1 løsning

database udtræk i et loop - kan det lade sig gøre ?

Jeg er et lille loop, men et problem opstår ligeså snart jeg skal lave et db-udtræk midt i det...

Hvad gør jeg...

115 point på højkant...

//thomas
Avatar billede trekkies Juniormester
03. august 2004 - 16:19 #1
Hvordan lyder din fejl?

Hvordan ser din SQL streng ud?
Avatar billede thomas_b Nybegynder
03. august 2004 - 16:23 #2
SQLstmt = "SELECT * FROM Kategorier WHERE KategoriID = " & rs("KategoriID_l")

----

ADODB.Recordset error '800a0cc1'

Item cannot be found in the collection corresponding to the requested name or ordinal.
Avatar billede trekkies Juniormester
03. august 2004 - 16:29 #3
Hvad jeg kan se så kan den ikke finde KategoriID eller KategoriID_l, undersøg de to ord er skrevet rigtigt.
Avatar billede thomas_b Nybegynder
03. august 2004 - 16:31 #4
de er kopieret direkte fra deres tabeller...
Men kan man da godt lave et udtræk midt i et loop ?
Avatar billede trekkies Juniormester
03. august 2004 - 16:33 #5
Jeg har lavet to udtræk fra to forskellige datebaser, og satte to LOOPS til sidst, det virkede fint.
Avatar billede thomas_b Nybegynder
03. august 2004 - 16:34 #6
hvad kan jeg så ellers gøre...
Og må jeg se dit script... ?
Avatar billede thomas_b Nybegynder
03. august 2004 - 16:37 #7
kan det have noget med dette at gøre

SQLstmt = "SELECT * FROM Kategorier WHERE KategoriID = " & ***rs("KategoriID")***

Kan det godt lade sig gøre man tager et udtræk (rs) mens man er ved at åbne en ny DB ?
Avatar billede Spotgun Seniormester
03. august 2004 - 16:59 #8
Prøv at komme med hele din kode.

Det kan godt lade sig gøre at lave flere udtræk, men det afhænger af om du gør det rigtigt.
Avatar billede trekkies Juniormester
03. august 2004 - 17:04 #9
thomas b:
Jeg har ledt efter min kode, men kan ikke lige finde den nu, men bliver ved med at kigge.
Avatar billede thomas_b Nybegynder
03. august 2004 - 17:07 #10
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("do.mdb")

SQLstmt = "SELECT * FROM Kategorier WHERE KategoriID = " & rs("KategoriID")

Conn.Execute (SQLstmt)

Set rs = conn.Execute(SQLstmt)
%>

<%=rs("KategoriNavn")%>

<%
conn.Close
Set conn = nothing
Set SQLstmt = nothing
%>
Avatar billede thomas_b Nybegynder
03. august 2004 - 17:07 #11
trekkies -> okay...
Avatar billede Spotgun Seniormester
03. august 2004 - 17:12 #12
SQLstmt = "SELECT * FROM Kategorier WHERE KategoriID = " & rs("KategoriID")

Dette vil aldrig virke, da du ikke har åbnet noget recordset endnu.
Enten skal du ha' dit kategori-id fra en Request.QueryString eller en Request.Form, eller også skal du åbne et andet recordset først, og hive nogle kategoriID's ud fra en anden tabel.
Avatar billede thomas_b Nybegynder
03. august 2004 - 17:15 #13
Jeg har tal i en tabel og tekst i an anden tabel...

Jeg har igen mulighed for at få KategoriID fra Request.QueryString / Request.Form
Avatar billede Spotgun Seniormester
03. august 2004 - 17:19 #14
Okay, men så bliver du nødt til at åbne din tal-tabel først.

Prøv noget ala dette (jeg går ud fra, at de ligger i samme database)

<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("do.mdb")

SQL_ID = "SELECT * FROM din_kategori_id_tabel"
Set RS_ID = Conn.Execute(SQL_ID)

If Not RS_ID.EOF Then
  SQLstmt = "SELECT * FROM Kategorier WHERE KategoriID = " & rs_id("KategoriID")
  Set rs = conn.Execute(SQLstmt)
  Response.Write rs("KategoriNavn")
End If

conn.Close
Set conn = nothing
Set SQLstmt = nothing
%>
Avatar billede thomas_b Nybegynder
03. august 2004 - 17:29 #15
det virker ikke... Den siger dette:

ADODB.Recordset error '800a0cc1'

Item cannot be found in the collection corresponding to the requested name or ordinal.
Avatar billede Spotgun Seniormester
03. august 2004 - 17:38 #16
Kom lige med en liste over indholdet af de tabeller du har fat i (og også hvilken type felterne i tabellerne har).
Og smid så lige din opdaterede kode også.

Fejlen betyder i hvert fald, at du forsøger at hente noget fra en tabel, som ikke eksisterer.
Avatar billede thomas_b Nybegynder
03. august 2004 - 17:46 #17
1. Kategorier
2. Produkter
Avatar billede Spotgun Seniormester
03. august 2004 - 17:49 #18
Undskyld mig, men det siger ikke alverden.

Har du mulighed for at sende mig din database, så går det nok lidt nemmere...
Du kan maile den på spotgun@undergrunden.dk - Så skal jeg nok se om jeg kan strikke en løsning sammen til dig der virker.
Avatar billede thomas_b Nybegynder
03. august 2004 - 18:05 #19
den er kommer ned til dig nu...
Avatar billede Spotgun Seniormester
03. august 2004 - 18:19 #20
Ok, jeg kigger på det inden længe...
Avatar billede thomas_b Nybegynder
03. august 2004 - 18:22 #21
okay...
Avatar billede Spotgun Seniormester
03. august 2004 - 18:57 #22
Jeg ved ikke helt om det var det her du skulle bruge, men jeg har i hvert fald lavet et eksempel der pløjer dine kategorier igennem, mens det løbende lister de produkter der hører til hvert enkelt kategori.

Jeg oprettede lidt ekstra test-data i databasen. Du kan hente det jeg brugte her:
http://leech.clandestine.dk/exp/525902.zip

Scriptet ser således ud:
<%
' Her åbnes der for databasen
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("do.mdb")

' Her oprettes og åbnes det første recordset, der finder alle dine kategorier
id_sql = "SELECT * FROM Kategorier"
Set id_RS = Server.CreateObject("ADODB.RecordSet")
id_RS.Open id_sql, Conn, 1, 3

' Her oprettes det andet recordset. Bemærk at det oprettes uden for dit loop, for at spare på
' serverens ressourcer, da det ikke er nødvendigt at lave et nyt recordset for alle de oplysninger
' du vil hente. Det er nok blot at åbne og lukke det.

Set RS = Server.CreateObject("ADODB.RecordSet")

' Her loopes dine kategorier igennem
While Not id_RS.EOF
    Response.Write("Kategori: "& id_RS("KategoriNavn") & "<br>")
    ' Her genereres den anden sql-sætning udfra det kategoriID der blev fundet i kategori-tabellen
    sql = "SELECT * FROM Produkter WHERE KategoriID = "& id_RS("KategoriID") & " ORDER BY ProduktNummer"
    ' Her åbnes det andet recordset, der kommer til at indeholde de produkter der hører under den nuværende kategori.
    RS.Open sql, Conn, 1, 3
    ' Alle produkter der findes for det nuværende kategoriID skrives nu ud på en liste.
    While Not RS.EOF
        Response.Write("&nbsp;&nbsp;&nbspProduktnr. "& RS("Produktnummer") & ": "& RS("ProduktNavn") & " ... "& RS("ProduktPris") & "<br>")
        ' Her går vi videre til næste produkt inden for det samme kategoriID
        RS.MoveNext
    Wend
    ' Recordsettet med produkterne lukkes nu.
    RS.Close
    ' Her går vi videre til næste KategoriID
    id_RS.MoveNext   
Wend

' Her lukkes de sidste objekter, så der er ryddet pænt op efter dig igen
Set RS = Nothing
id_RS.Close
Set id_RS = Nothing
Conn.Close
Set Conn = Nothing
%>

Desuden vil jeg anbefale dig at læse op på bl.a. databaseforbindelser i ASP, samt hvordan man designer en ordentlig og effektiv database. Den virker en smule rodet den du har nu.
Avatar billede Spotgun Seniormester
05. august 2004 - 14:03 #23
Har du fundet ud af noget, eller skal du bruge mere hjælp?
Avatar billede thomas_b Nybegynder
05. august 2004 - 15:58 #24
altså det virker ikke men jeg tror bare jeg dropper det...
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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