Avatar billede thomas-k Nybegynder
30. august 2008 - 22:12 Der er 10 kommentarer og
1 løsning

Hent fra 2 tabeller ud fra overskrift

Jeg har en access DB, hvor jeg har oprettet 2 tabeller. Den ene hedder links1. Her kan jeg indføre links samt en overskrift til linket ud fra den anden tabel (hedder links2) som har en kolonne der hedder linksoverskrift.

links1 kolonner: linknavn | overskrift

links2 kolonner: linkoverskrift

Nu vil jeg gerne på min ASP side udskrive alle linksoverskrifter fra links2 tabellen via et loop, og vise alle tilhørende links fra links1 tabellen som har denne overskrift (hvilket jo påføres ved indsættelse af linket). Håber det mening at læse hvad jeg skriver. For at lave et eksempel:

Link overskrift 1 (links2 tabel)
  link1 - overskrift 1 (links1 tabel)
  link2 - overskrift 1 (links1 tabel)
  link3 - overskrift 1 (links1 tabel)

Link overskrift 2 (links2 tabel)
  link 6 - overskrift 2 (links1 tabel)
  link 8 - overskrift 2 (links1 tabel)

Link overskrift 3  (links2 tabel)
  link 4 - overskrift 3 (links1 tabel)
  link 9 - overskrift 3 (links1 tabel)

osv. osv.

Jeg har prøvet med nedenstående, der som sagt er lidt gebroken ASP sprog hvilket ikke virker ;-)

<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("/vti_log/db.mdb")
Conn.Open DSN
strSQL = "Select * From links1 Order by link"
Set rs = Conn.Execute(strSQL)

strengSQL = "Select * From links2 Order by linkoverskrift"
Set rstreng = Conn.Execute(strengSQL)

Do While Not rstreng.EOF
response.write "<b>"
response.write rstreng("linkoverskrift")
response.write "</b><br />"

Do While Not rs.EOF
If rs("overskrift") = rstreng("linkoverskrift") then
Response.write rs("link")
Response.write "<br />"
else
response.write "En fejl opstod!<br />"
end if
rs.MoveNext
Loop

response.write "<br /><br />"

rstreng.MoveNext
Loop

Conn.Close
Set Conn = Nothing
%>


- Dette giver bare et resultat der henter alle rækker fra link1 med strengen "En fejl opstod!" og smider dem ind under den første overskrift fra links2. Her skal den selvsagt skrive linknavnet ud for den overskrift den høre til...
Avatar billede w13 Novice
31. august 2008 - 11:24 #1
Det skal vel snarere være noget i retning af:

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

Set rs1 = Conn.Execute("Select * From links2 Order by linkoverskrift")

Do While Not rs1.EOF
  response.write "<b>"
  response.write rs1("linkoverskrift")
  response.write "</b><br />"

  Set rs2 = Conn.Execute("Select * From links1 WHERE overskrift='"&rs1("linkoverskrift")&"' Order by link")
  Do While Not rs2.EOF
    Response.write rs2("link")
    Response.write "<br />"

    rs2.MoveNext
  Loop
  rs2.close

  response.write "<br /><br />"

  rs1.MoveNext
Loop

rs1.Close
Conn.Close
Set Conn=Nothing
%>
Avatar billede w13 Novice
31. august 2008 - 11:25 #2
Men det er ikke så godt at gemme overskriften i links2 for hvert link. Det man normalt gør, er at gemme id'et i stedet for overskriften.
Avatar billede solle Nybegynder
31. august 2008 - 12:39 #3
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("/vti_log/db.mdb")

Set rs1 = Conn.Execute("Select * From links2 INNER JOIN links1 ON links1.overskrift=links2.linkoverskrift Order by linkoverskrift, link"

strForrigeOverskrift = ""
intPoster = 0

Do While Not rs1.EOF
  if(strForrigeOverskrift<>rs1("linkoverskrift"))then
      strForrigeOverskrift=rs1("linkoverskrift")
      if(intPoster>0)then Response.Write("</br></br>")
      response.write "<b>"
      response.write strForrigeOverskrift
      response.write "</b><br />"
  end if

  Response.write rs1("link")
  Response.write "<br />"

  intPoster = intPoster + 1

  rs1.MoveNext
Loop

rs1.Close
Conn.Close
Set Conn=Nothing
%>
Avatar billede thomas-k Nybegynder
31. august 2008 - 12:41 #4
Jamen det jo perfekt w13. Tusind tak. Vedr. ved at gemme overskrift, tænker du så på dubletter?
Avatar billede w13 Novice
31. august 2008 - 13:20 #5
Tak for point! :)

Jeg tænker på mange ting. Bl.a. at hvis du ændrer i et elements overskrift, så skal du ændre det alle steder. Hvis du refererer til ID i stedet, skal du kun ændre 1 sted. Og så fylder det meget mindre.
Avatar billede thomas-k Nybegynder
31. august 2008 - 13:47 #6
Ja, det er rigtig nok. Nu har jeg lavet det sådan at man kun kan tilføje og slette - ikke redigere. Men det med pladsen er jo selvfølgelig en fordel.
Avatar billede w13 Novice
31. august 2008 - 13:49 #7
Det bliver generelt også mere dynamisk, når du skal arbejde med det. Bare det at have det som tal i stedet for tekst.
Avatar billede thomas-k Nybegynder
31. august 2008 - 14:38 #8
Ja, du har nok ret i at det er god stil.
Avatar billede w13 Novice
31. august 2008 - 15:02 #9
Så kan der principielt også være flere af samme overskrift, selvom det nok ikke bliver aktuelt. =)
Avatar billede thomas-k Nybegynder
31. august 2008 - 15:58 #10
Jo, men jeg har taget højde for dette under indsættelse, da man får en fejl smidt i hovedet hvis samme overskrift findes i forvejen.
Avatar billede ceetara Nybegynder
03. september 2008 - 12:56 #11
hej w13

jeg har brug for lidt hjælp til min hjemmeside med bl.a. en opload funktion.
er det noget du kunne hjælpe med, gerne mod betaling.

kan kontaktes på king@mail.dk
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
Kurser inden for grundlæggende programmering

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