Avatar billede Slettet bruger
06. april 2006 - 15:48 Der er 9 kommentarer og
1 løsning

Læse fra to tabeller med RecordSet

Hej, Jeg står med 2 tabeller "tbl_1" og "tbl_2" i dem begge er der en kolonne der heder "Name"

Men jeg kan ikke "Response.Write rs("tbl_1.Name")" hvad gør jeg så?

/Gregers
Avatar billede softspot Forsker
06. april 2006 - 15:55 #1
Man laver typisk et join mellem de to tabeller og tildeler så sammenfaldende kolonner et alias, som man kan referere til igennem recordsetobjektet.

Eksempel:

sql = "SELECT tabel1.name as name1, tabel2.name as name2 FROM tabel1 INNER JOIN tabel2 ON table1.tabel2id = tabel2.id"

set rs = con.execute(sql)

if not rs.eof then
  response.write rs("name1") & "<br>"
  response.write rs("name2") & "<br>"
end if

rs.close

Eksemplet overnfor forudsætter at du har åbnet en forbindelse til databasen som ligger i variablen con.
Avatar billede fennec Nybegynder
06. april 2006 - 15:57 #2
... Du kan også bruge nummer metoden (nummer på select listen)
rs(2)
rs(5)

Jeg vil dog anbefale at bruge alias som softspot har vist dig.
Avatar billede Slettet bruger
06. april 2006 - 15:59 #3
Softspot: Den tager jeg :)
fennec: Ja, ellers skal jeg hen og lave to SQL-Query's
Avatar billede softspot Forsker
06. april 2006 - 16:07 #4
Mht. fennec's metode, så vil jeg umiddelbart være "forsigtig" med at bruge den, da den let går "i stykker" hvis man ændrer på forspørgslen (men det er sikkert bare mig der er en kylling :)).

Husk at du til hver en tid kan definere alias for de kolonner du trækker ud (i det mindste med de mest populære databasesystmer... og Access ;-)). Man kan med fordel også gøre det når man f.eks. summerer eller tæller rækker i en tabel:

Eksempel:

SELECT COUNT(*) AS AntalRaekker FROM tabel1 WHERE summen > 10

her kan antallet så hentes ud af recordsettet (som i dette tilfælde ligger i en variabel ved navn rs) med flg. linie:

Antalraekker = rs("AntalRaekker")
Avatar billede Slettet bruger
06. april 2006 - 16:11 #5
A-Ha, Ja det lyder sgu da smart.

Jeg har lige et spørgsmål, ciatat fra dig: INNER JOIN tabel2 ON table1.tabel2id = tabel2.id"

Hvad mener du med: table1.tabel2id ?
Avatar billede fennec Nybegynder
06. april 2006 - 16:15 #6
gregers >>
Du behøver skam ikke 2 Query's. Alle items i et recordset kan hentes ud med deres navn eller nummer. Dit problem her, at at der er 2 rækker med samme navn, også får man altid den sidste forkomst (eller er det den første).

select tabel1.name, tabel2.name ...
response.write rs(0) <-- Giver tabel1.name
response.write rs(1) <-- Giver tabel2.name

Men hold dig til Alias metoden. Nummer metoden bruges mest til dynamisk udtræk, hvor man ikke ved hvor mange kolonner der er, eller hvad de hedder :o)
Avatar billede softspot Forsker
06. april 2006 - 16:19 #7
Det er lidt ligesom at referere en egenskab på et objekt i VBScript (f.eks. rs.fields("name1")) - jeg angiver altså bare at det er feltet tabel2id i tabel1 jeg vil have fat i.

Det er en typisk fremmednøgle-konstruktion, dvs. at feltet tabel2id (i tabel1) peger på den/de rækker i tabel2 via dens id og det er så den/de rækker man kobler elementerne i tabel1 sammen med.vha. INNER JOIN... dette vil, alt afhængig af entydigheden af tabel2id og id i tabel2, kunne resulterer i en 1-1, 1-m eller m-n relation (jeg tror jeg stopper her - det bliver hurtigt kompliceret :)).
Avatar billede softspot Forsker
06. april 2006 - 16:21 #8
...og tak for point :)
Avatar billede Slettet bruger
06. april 2006 - 16:23 #9
fennec: Okay, det lyder faktisk enkelt.
softspot: Det giver faktisk mening, tak for hjælpen :)
Avatar billede softspot Forsker
06. april 2006 - 16:26 #10
Lækkert! :D

Velbekomme :)
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