Avatar billede nazty Nybegynder
15. juni 2007 - 12:25 Der er 14 kommentarer

To tabeller samme db

Hej eksperter

Jeg har en database med to tabeller i. Syns ikke lige jeg kan gennemskue hvordan jeg lettest løser følgende problem:

Min script starter med at hente alle produkterne i en tabel "lager". Deri har alle varene et 'nr'. Det 'nr' = det 'nr' som står i den anden tabel "variant".
Mit script skal hente alle varene ud af "lager"-tabellen, tjekke om den står 'Ja' i 'billed'-kollonen i "variant", hvis der gør det, skal den skrive/hente produkterne.

Håber i forstår hvad jeg mener, og kan hjælpe mig
Avatar billede w13 Novice
15. juni 2007 - 12:46 #1
Har du noget kode nu?
Avatar billede melieha Nybegynder
15. juni 2007 - 12:56 #2
Du skal vel bare lave et SQL udtræk hvor du bruger et join til at checke hvad der står i den anden tabel.
Alt efter hvilken database du bruger kan du ordne det grafisk og "let", ellers så kan du få forståelsen her: http://www.w3schools.com/sql/sql_join.asp :)
Avatar billede nazty Nybegynder
15. juni 2007 - 13:53 #3
w13:
Har ikke rigtig noget kode nu. For ved ikke hvordan jeg skal gribe den an

melieha:
Jeg bruger access database. Jeg syns aldrig det der står på w3schools minder om det kode jeg skriver? :S Bruger måske noget gammelt asp?
Avatar billede martin_dalgaard Nybegynder
16. juni 2007 - 00:09 #4
Ok lad os sige at Databasen hedder Database1
Du skal bare lige finde ud af hvilke kolonner i Variant du vil udskrive

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

strSQL = "Select * From lager"
Set rs = Conn.Execute(strSQL)

Do
strVariant = "Select * from variant where nr ='" & rs("nr") & "' "
Set vs = Conn.Execute(strVariant)

If vs("billed") = "Ja" then Response.write(vs("produkt")) end if

  rs.MoveNext
Loop While Not rs.EOF

Conn.Close
Set Conn = Nothing
%>




Sådan skulle det vidst gøres, Afprøv det, og giv response
Avatar billede martin_dalgaard Nybegynder
17. juni 2007 - 15:41 #5
ikke særlig meget response på ens hjælp :(
Avatar billede nazty Nybegynder
17. juni 2007 - 17:49 #6
martin_dalgaard: Sorry. Har ikke været hjemme i weekenden. Men det er perfekt! Prøver lige at lege med det nu!
Avatar billede nazty Nybegynder
17. juni 2007 - 17:55 #7
Min nuværende kode ser sådan her ud. Skal jeg så smide variant-delen af din kode ind lige efter jeg har oprettet forbindelse til databasen?

---
<%
'****PAGE: deklarer intpage til paging
intPage = Request("page")
If isNumeric(intPage) = False Or intPage < 1 Then
  intPage = 1
End If
'-----------------------------------------------------------------
'--------DATABASE ACCESS------------------------------------------
'-----------------------------------------------------------------

        'Åbner forbindelse
    Set db = Server.CreateObject("ADODB.RecordSet")
    SQL = ("SELECT * FROM lager WHERE lager>'0' AND Billede = 'Ja' ORDER BY beskrivelse")
    JET = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="& server.MapPath("../../../log/db.mdb")
    db.Open SQL, JET, 1

'-----------------------------------------------------------------
'--------DATABASE ACCESS END--------------------------------------
'-----------------------------------------------------------------



%></strong></font>
<table width="668" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="334"><%
'Varer Pr. side
    if Request.Querystring("perpage") = "" then
    perpage = 10
    else
    perpage = Request.Querystring("perpage")
    end if
Response.Write "<p>Vis "
    '--5--
        if perpage = 5 then
        Response.Write "<b>5</b> - "
        else
        Response.Write "<a href=site_produkter.asp?perpage=5><u>5</u></a> - "
        end if
    '--10--
        if perpage = 10 then
        Response.Write "<b>10</b> - "
        else
        Response.Write "<a href=site_produkter.asp?perpage=10><u>10</u></a> - "
        end if
    '--20--
        if perpage = 20 then
        Response.Write "<b>20</b> - "
        else
        Response.Write "<a href=site_produkter.asp?perpage=20><u>20</u></a> - "
        end if
    '--50--
        if perpage = 50 then
        Response.Write "<b>50</b> - "
        else
        Response.Write "<a href=site_produkter.asp?perpage=50><u>50</u></a> "
        end if
Response.Write "varer pr. side</p>"
'-----------------
%></td>
<td width="334">
<div align="right">
<%
'****PAGE: Hvis ikke db er BOF eller EOF, så gælder dette:
If Not (db.BOF Or db.EOF) Then
  db.PageSize = perpage
  db.AbsolutePage = intPage
  intRecCount = db.PageSize
  intPageCount = db.PageCount

'****PAGE: skriver intPage og intPageCount til siden, vil se sådan her ud: "side x af x".
Response.Write "<p><b>Side " & intPage & " af " & intPageCount & "</b></p>"
%></div>
</td>
</tr>
</table>
<br/>
<%
Response.Write "<table width=100% border=0 cellspacing=0 cellpadding=0><tr height=1><td bgcolor=#e7e7e7 height=1></td></tr>"

'hvis db tom, så

if db.eof then

'ellers skriv det her til siden
else

'gør dette mens databasen ikke er tom og pagesize(intRecCount) er større end 0


Do While Not db.EOF And intRecCount > 0

        id = db("id") + 2152
        beskrivelse = db("beskrivelse")
        beskrivelse2 = db("beskrivelse2")
        vekst = db("vekst")
        lov = db("lov")
        blomst = db("blomst")
        frugt = db("frugt")
        alder = db("alder")
        str = db("str")
        pris = db("pris")
        nr = db("nr")
        placering = db("placering")
       

%>
Avatar billede martin_dalgaard Nybegynder
17. juni 2007 - 18:29 #8
hah det var satme noget af en kode som kom der :)

Men altså det min kode gør er:

Der opretter forbindelse til databasen.

Så tager den tingene fra lageret og samligner et nummer af gangen fra lageret med alle numrene fra variant. 

Og hvis den så finder 2 numre der passer sammen, så tager det billed feltet for det nummers række, og hvis der står "ja" i billed feltet så udskriver den det produkt :D


Præcis det du skal bruge / spurgte om
Avatar billede martin_dalgaard Nybegynder
17. juni 2007 - 18:30 #9
og det gør den så med Alle sammen, da der er en løkke på, så den fortsætter indtil der ikke er flere numre der passer
Avatar billede nazty Nybegynder
17. juni 2007 - 21:45 #10
Skal det så ind her?

<%
'****PAGE: deklarer intpage til paging
intPage = Request("page")
If isNumeric(intPage) = False Or intPage < 1 Then
  intPage = 1
End If
'-----------------------------------------------------------------
'--------DATABASE ACCESS------------------------------------------
'-----------------------------------------------------------------

        'Åbner forbindelse
    Set db = Server.CreateObject("ADODB.RecordSet")
    SQL = ("SELECT * FROM lager WHERE lager>'0' AND Billede = 'Ja' ORDER BY beskrivelse")
    JET = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="& server.MapPath("../../../log/db.mdb")
    db.Open SQL, JET, 1

Do
strVariant = "Select * from variant where nr ='" & rs("nr") & "' "
Set vs = Conn.Execute(strVariant)

If vs("billed") = "Ja" then

'-----------------------------------------------------------------
'--------DATABASE ACCESS END--------------------------------------
'-----------------------------------------------------------------



%></strong></font>
<table width="668" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="334"><%
'Varer Pr. side
    if Request.Querystring("perpage") = "" then
    perpage = 10
    else
    perpage = Request.Querystring("perpage")
    end if
Response.Write "<p>Vis "
    '--5--
        if perpage = 5 then
        Response.Write "<b>5</b> - "
        else
        Response.Write "<a href=site_produkter.asp?perpage=5><u>5</u></a> - "
        end if
    '--10--
        if perpage = 10 then
        Response.Write "<b>10</b> - "
        else
        Response.Write "<a href=site_produkter.asp?perpage=10><u>10</u></a> - "
        end if
    '--20--
        if perpage = 20 then
        Response.Write "<b>20</b> - "
        else
        Response.Write "<a href=site_produkter.asp?perpage=20><u>20</u></a> - "
        end if
    '--50--
        if perpage = 50 then
        Response.Write "<b>50</b> - "
        else
        Response.Write "<a href=site_produkter.asp?perpage=50><u>50</u></a> "
        end if
Response.Write "varer pr. side</p>"
'-----------------
%></td>
<td width="334">
<div align="right">
<%
'****PAGE: Hvis ikke db er BOF eller EOF, så gælder dette:
If Not (db.BOF Or db.EOF) Then
  db.PageSize = perpage
  db.AbsolutePage = intPage
  intRecCount = db.PageSize
  intPageCount = db.PageCount

'****PAGE: skriver intPage og intPageCount til siden, vil se sådan her ud: "side x af x".
Response.Write "<p><b>Side " & intPage & " af " & intPageCount & "</b></p>"
%></div>
</td>
</tr>
</table>
<br/>
<%
Response.Write "<table width=100% border=0 cellspacing=0 cellpadding=0><tr height=1><td bgcolor=#e7e7e7 height=1></td></tr>"

'hvis db tom, så

if db.eof then

'ellers skriv det her til siden
else

'gør dette mens databasen ikke er tom og pagesize(intRecCount) er større end 0


Do While Not db.EOF And intRecCount > 0

        id = db("id") + 2152
        beskrivelse = db("beskrivelse")
        beskrivelse2 = db("beskrivelse2")
        vekst = db("vekst")
        lov = db("lov")
        blomst = db("blomst")
        frugt = db("frugt")
        alder = db("alder")
        str = db("str")
        pris = db("pris")
        nr = db("nr")
        placering = db("placering")
end if

  rs.MoveNext
Loop While Not rs.EOF

Conn.Close
Set Conn = Nothing
%>
%>
Avatar billede martin_dalgaard Nybegynder
17. juni 2007 - 23:38 #11
<%
'****PAGE: deklarer intpage til paging
intPage = Request("page")
If isNumeric(intPage) = False Or intPage < 1 Then
  intPage = 1
End If
'-----------------------------------------------------------------
'--------DATABASE ACCESS------------------------------------------
'-----------------------------------------------------------------
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../../../log/db.mdb")
Conn.Open DSN

strSQL = "SELECT * FROM lager WHERE lager>'0' AND Billede = 'Ja' ORDER BY beskrivelse"
Set rs = Conn.Execute(strSQL)

Do
strVariant = "Select * from variant where nr ='" & rs("nr") & "' "
Set vs = Conn.Execute(strVariant)

If vs("billed") = "Ja" then Response.write(vs("produkt")) end if

  rs.MoveNext
Loop While Not rs.EOF

Conn.Close
Set Conn = Nothing

'-----------------------------------------------------------------
'--------DATABASE ACCESS END--------------------------------------
'-----------------------------------------------------------------



%></strong></font>
<table width="668" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="334"><%
'Varer Pr. side
    if Request.Querystring("perpage") = "" then
    perpage = 10
    else
    perpage = Request.Querystring("perpage")
    end if
Response.Write "<p>Vis "
    '--5--
        if perpage = 5 then
        Response.Write "<b>5</b> - "
        else
        Response.Write "<a href=site_produkter.asp?perpage=5><u>5</u></a> - "
        end if
    '--10--
        if perpage = 10 then
        Response.Write "<b>10</b> - "
        else
        Response.Write "<a href=site_produkter.asp?perpage=10><u>10</u></a> - "
        end if
    '--20--
        if perpage = 20 then
        Response.Write "<b>20</b> - "
        else
        Response.Write "<a href=site_produkter.asp?perpage=20><u>20</u></a> - "
        end if
    '--50--
        if perpage = 50 then
        Response.Write "<b>50</b> - "
        else
        Response.Write "<a href=site_produkter.asp?perpage=50><u>50</u></a> "
        end if
Response.Write "varer pr. side</p>"
'-----------------
%></td>
<td width="334">
<div align="right">
<%
'****PAGE: Hvis ikke db er BOF eller EOF, så gælder dette:
If Not (db.BOF Or db.EOF) Then
  db.PageSize = perpage
  db.AbsolutePage = intPage
  intRecCount = db.PageSize
  intPageCount = db.PageCount

'****PAGE: skriver intPage og intPageCount til siden, vil se sådan her ud: "side x af x".
Response.Write "<p><b>Side " & intPage & " af " & intPageCount & "</b></p>"
%></div>
</td>
</tr>
</table>
<br/>
<%
Response.Write "<table width=100% border=0 cellspacing=0 cellpadding=0><tr height=1><td bgcolor=#e7e7e7 height=1></td></tr>"

'hvis db tom, så

if db.eof then

'ellers skriv det her til siden
else

'gør dette mens databasen ikke er tom og pagesize(intRecCount) er større end 0


Do While Not db.EOF And intRecCount > 0

        id = db("id") + 2152
        beskrivelse = db("beskrivelse")
        beskrivelse2 = db("beskrivelse2")
        vekst = db("vekst")
        lov = db("lov")
        blomst = db("blomst")
        frugt = db("frugt")
        alder = db("alder")
        str = db("str")
        pris = db("pris")
        nr = db("nr")
        placering = db("placering")
     

%>



såen nærmere
Avatar billede martin_dalgaard Nybegynder
17. juni 2007 - 23:40 #12
Du har VILDT meget script til det hvor du deler varene op i forskellige sider
Avatar billede nazty Nybegynder
18. juni 2007 - 13:25 #13
hmm.. hvordan skulle det ellers se ud?
-
Syns ik li jeg kan få det til at funke.
Får følgende fejl:
-
ADODB.Recordset error '800a0cc1'

Item cannot be found in the collection corresponding to the requested name or ordinal.

site_produkter_bonsai.asp, line 67
-
Linie 67 er: kode = vs(kode)

koden:
-
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../../../log/db.mdb")
Conn.Open DSN

strSQL = "SELECT * FROM lager WHERE lager>'0' AND Billede = 'Ja' ORDER BY beskrivelse"
Set db = Conn.Execute(strSQL)

Do
strVariant = "Select * from variant where nr = '" & db("nr") & "' "
Set vs = Conn.Execute(strVariant)

kode = vs(kode)

If db("billede") = "Ja" or "1" then
Response.write kode
end if

  db.MoveNext
Loop While Not db.EOF

Conn.Close
Set Conn = Nothing
-
Avatar billede martin_dalgaard Nybegynder
18. juni 2007 - 14:55 #14
Item cannot be found in the collection corresponding to the requested name or ordinal

=  Navnene er forkerte, 
du manger "" i koden altså kode = vs("kode")
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