Avatar billede hemberg Forsker
22. oktober 2002 - 09:02 Der er 18 kommentarer og
1 løsning

Krydshenvisninger imellem to DB'er

Hej allesammen. Har et spørgsmål som volder mig lidt problemer. Først lige en beskrivelse af DB.

Jeg har i en access2000 DB fil oprettet to databaser. Fx:

1) Lager

Id      Navn      Kvalitet      Stk
1      Melon        2            20
2      Tomater      4            10


2) Priser

Id      Navn      Kvalitet      Pris
1      Æbler        1            8,95
2      Melon        3            10,95
3      Melon        2            12,95

Sådan kunne db'erne se ud. (Jeg skal bruge det i forbindelse med min vinsamling).

Jeg har lavet et ASP script der viser heleindholdet af "Priser" i en tabel. Nu vi jeg gerne have at scriptet går ind og undersøger om der er produkter magen til på lager. (Navn og Kvalitet skal være ens), Og sætter en link ind i tabellen over priser.

Lyder lidt indviklet. Men det var det nemmeste ex. jeg kunne komme på.

Håber det kan lade sig gøre...

Mvh Poul-Henning
Avatar billede chrisrj Forsker
22. oktober 2002 - 09:20 #1
Er du sikker på at du har to databaser og ikke to tabeller? - Det lyder nemlig som om det er to tabeller du har.
Avatar billede chrisrj Forsker
22. oktober 2002 - 09:23 #2
Hvis det er to tabeller, skriver du noget ala det her:

SELECT navn FROM lager WHERE priser.navn=lager.navn
Avatar billede chrisrj Forsker
22. oktober 2002 - 09:27 #3
Hvis du også skal have kvalitet med ser det sådan ud:

SELECT navn FROM lager WHERE priser.navn=lager.navn AND priser.kvalitet=lager.kvalitet
Avatar billede hemberg Forsker
22. oktober 2002 - 09:29 #4
Du kan se den rigtige DB her. Og du har ret det er to tabeller. Der skal laves krydshenvisning imellem "smagning" & "kaelder"

http://www28.brinkster.com/hemberg/vin.mdb

Kan du specificerer ala ???
Avatar billede chrisrj Forsker
22. oktober 2002 - 09:33 #5
:)

Man kan ikke se din db:

HTTP1.1 STATUS 403 Remote Access to this object forbidden This file cannot be directly accessed from a remote site, but must be linked through the Brinkster Member's site.

Det er lidt svært at specificerer det, uden at se koden.
Avatar billede hemberg Forsker
22. oktober 2002 - 09:38 #6
Tak...Lyder for nemt til at være sandt...Hvad så med "SELECT" resultater. Hvordan får jeg det udskrevet som et link..??
Avatar billede chrisrj Forsker
22. oktober 2002 - 09:44 #7
Hvis du vil udskrive et link fra db, kan det gøres sådan:

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

    strSQL = "Select * From menu order by Menu"
    Set rs = Conn.Execute(strSQL)


    Do
      ' menu navn
      strNavn = rs("Menu")

        Response.write "<b>|<a href='"& RS("link") &"'>"& rs("menu") &"</a>"

      rs.MoveNext
    Loop While Not rs.EOF

    Conn.Close
    Set Conn = Nothing
%>

Her er hele stien i databasen uden "link". Teksten er i "menu".
Avatar billede chrisrj Forsker
22. oktober 2002 - 09:44 #8
"uden" skal naturligvis være "under" ;)
Avatar billede hemberg Forsker
22. oktober 2002 - 09:47 #9
Tak for hjælpen...Du har fortjent dine point......Har din far læst højt fra en asp manual da du var lille eller sådan noget. Eller er du proff....

Anyway tak !!
Avatar billede chrisrj Forsker
22. oktober 2002 - 09:49 #10
:D

haha, noget i den stil.... ;)
Avatar billede chrisrj Forsker
22. oktober 2002 - 09:54 #11
Tak for points!!
Avatar billede eagleeye Praktikant
22. oktober 2002 - 09:56 #12
Typisk når man laver et system af flere tabeller vil man som regl undgå redundant data eks. du har i begge tabeller både navn og Kvalitet på alle dine vare. Hvis det er nødvendigt så er der ingen grund til at dele en tabel i to tabeller for den kommer til at fylde doblet så meget plads som eller plus det tager længer tid at pare to tabeller hvis mange ting skal være opfyldt.

Så skulle du måske overvej en table:

Id      Navn      Kvalitet      Pris      lager
1      Æbler        1            8,95      0
2      Melon        3            10,95      0
3      Melon        2            12,95      20
4      Tomater      2            12,95      10

Det giver dig samme information.


Når man så deler op vælger man en "hovedtabel" som er udgangspunktet eks her kunne være priser for det er det som afgør om en vare føre:

2) Priser

Id      Navn      Kvalitet      Pris
1      Æbler        1            8,95
2      Melon        3            10,95
3      Melon        2            12,95
4      Tomater      4            12,95

Lager skal så havde en kolonne som refere til ID i priser for at lave relation melle de to tabeller.

1) Lager

Id  priserID    Stk
1      3        20
2      4        10

Så kan du lave din SQL sådan her:

SQL = "SELECT * FROM priser LEFT JOIN lager ON priser.ID = lager.priserID;"

Så kan du melig udskriver alle kolonner fra begge tabeller:

do while not rs.eof
  response.write rs("navn") & " "
  response.write rs("Kvalitet")  & " "
  response.write rs("pris")  & " "
  response.write " antal på lager: " & rs("stk")  & "<br>"
  rs.movenext
loop
Avatar billede chrisrj Forsker
22. oktober 2002 - 09:59 #13
Jeg undrede mig også over hvorfor du ikke svarede på spørgsmålet... Nu ved jeg hvorfor. ;)
Avatar billede eagleeye Praktikant
22. oktober 2002 - 10:05 #14
;) ja det tog lidt tid at få skrevet...
Avatar billede eagleeye Praktikant
22. oktober 2002 - 10:08 #15
Flere fordele: Når du en gang vil rette navnet på en vare skal det kun gøre et sted hvis du laver det med relationer ellers skal du ind i hver tabel og rettet navet til.
Avatar billede hemberg Forsker
22. oktober 2002 - 10:17 #16
Får denne fejl:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'smagning.Vinnavn=kealder.Vin Navn'.

/hemberg/test.asp, line 21

Hvad kan det være....??
Avatar billede hemberg Forsker
22. oktober 2002 - 10:25 #17
Hele linien ser sådan ud:

strSQL = "SELECT * FROM smagning WHERE smagning.Vinnavn=kealder.Vin Navn"
Set rs = Conn.Execute(strSQL)
Avatar billede chrisrj Forsker
22. oktober 2002 - 10:46 #18
du kan ikke have et mellemrum i vin navnet:

strSQL = "SELECT * FROM smagning WHERE smagning.Vinnavn=kealder.Vin Navn"

prøv den her:

strSQL = "SELECT * FROM smagning WHERE smagning.Vinnavn=kealder.VinNavn"
Avatar billede eagleeye Praktikant
22. oktober 2002 - 10:47 #19
Fejlen '80040e14' betyder ulovligt kolonne navn det vil sige et koloennenavn betår af et tegn/karakter som ikke er [a-z][A-Z][0-9] eller _

Der er mellemrum i nanvet Vin Navn i kealder tabellen

Det kan dog let løses i SQL ved at sætte [] omkring navnet, alternativt skal kolonne navnet ændre til at gyldigt navn (vinnavn):

strSQL = "SELECT * FROM smagning WHERE smagning.Vinnavn=kealder.[Vin Navn]"
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