Avatar billede jetkat Nybegynder
03. juni 2003 - 22:44 Der er 16 kommentarer og
1 løsning

Benytte visse varenumre som tilbehør på andre varenumre

Jeg bruger ASP og Access database. Jeg har i Access en kolonne som hedder Webstatus, hvis varenummeret er markeret med www i Webstatus kommer det på webben - ellers ikke.
Jeg har oprettet nogle tilbehørskolonner Tilb1, Tilb2 osv. Her påfører jeg de varenumre som skal listes som tilbehør. Problemet er nu, at de varenumre som påføres i Tilb1, Tilb2 osv. går uden om mit Webstatus-check og kommer på webben uanset de er markeret som www eller ej.
Er der mon nogen som kan kringle den ?
Avatar billede eagleeye Praktikant
03. juni 2003 - 23:07 #1
Kan du stadig tjekke på webstatus, ved at JOIN din vare tabel med Tilb1 eller Tilb2 og så tjekke på webstatus sådan her:

SQL = "SELECT * FROM tilb1 LEFT JOIN vareTabel ON tilb1.vareID = vareTabel.vareID WHERE vareTabel.webstatus = 'www'";
Avatar billede netro Nybegynder
03. juni 2003 - 23:28 #2
Tilb1 og Tilb2 er da kolonner, ik'?
Avatar billede luftballon Nybegynder
04. juni 2003 - 00:31 #3
Så vidt jeg kan se bliver du nok nød til at splitte din tabel op i 2. En vare tabel (tblvare) og en tabel med de tilknyttede poster (tbltilknytning).

Derefter vil du kunne anvende følgende SQL-sætning:

SELECT tblvare.Varenr, tbltilknytning.tilknyttetvarenr, tblvare.www FROM tblvare INNER JOIN tbltilknytning ON tblvare.Varenr = tbltilknytning.Varenr WHERE tbltilknytning.tilknyttetvarenr In (SELECT varenr FROM tblvare WHERE www=true) AND tblvare.www=True AND tbltilknytning.Varenr=1;

Det centrale i den er at den laver en sub-query, der tjekker om www feltet for det tilknyttede varenr er = true.

I ovenstående eks. er der taget udgangspunkt i at du forespørger mod varenr 1.

En sidegevinst ved denne løsning er at du kan oprette et ubegrænset antal tilknyttede vare.
Avatar billede eagleeye Praktikant
04. juni 2003 - 08:43 #4
Hvad hedder din(e) tabeller?

Og er Tilb1 og Tilb2 tabeller eller kolonner i en tabel?
Avatar billede jetkat Nybegynder
04. juni 2003 - 10:21 #5
Min tabel hedder Produkter. Her er følgende kolonner: Varenr (primær nøgle), Webstatus, Tilb1, Tilb2
I Tilb1 og Tilb2 indtaster jeg nogle af posterne fra Varenr som tilbehør. Disse har det altså med at smutte udenom mit Webstatus=www check.
Er det bedre at oprette en separat tilbehørstabel evt. med følgende kolonner: Varenr, Tilb1, Tilb2 osv. ?
Jeg tester lige nogle af jeres forslag når jeg kommer hjem fra arbs i aften.
Avatar billede netro Nybegynder
04. juni 2003 - 19:34 #6
Ja, lav en ekstra tabel med Varenr som fremmednøgle. Og sørg så for, at der er referentiel integritet mellem Produkter og den nye tabel.
Avatar billede jetkat Nybegynder
04. juni 2003 - 19:59 #7
Undskyld mange gange. Jeg glemte helt at sige jeg gerne vil have den til at vise Varenavn på tilbehørsvarenumrene istedet for Varenr.
Opsummering: 2 tabeller
1. Produkter
Kolonner:
Varenr (Primær nøgle)
Varenavn
Webstatus
2. Tilbehor
Kolonner:
Varenr
Til1
Til2
Avatar billede luftballon Nybegynder
04. juni 2003 - 20:07 #8
Er en tilbehørsvare ikke også en selvstændigt vare? Hvis den er er det bedre med
1. Produkter
Kolonner:
Varenr (Primær nøgle)
Varenavn
Webstatus

2. Tilbehor
Kolonner:
Varenr
tilbehørsvarenr

Hvor varenr og tilbehørsvarenr er en sammensatnøgle.
Avatar billede netro Nybegynder
04. juni 2003 - 20:49 #9
Prøv at køre følgende statement:

Set rs_navn = conn_navn.Execute("Select p.Varenr, p.Varenavn, t.Til1, t.Til2 From Produkter p Left Join Tilbehor t On p.Varenr = t.Varenr Where p.Webstatus = 'www'")
While Not rs_navn.EOF
  Response.Write rs_navn("Varenr") & " - " & rs_navn("Varenavn") & " - " & rs_navn("Til1") & " - " & rs_navn("Til2") & "<br>"
  rs_navn.MoveNext
Wend
Avatar billede jetkat Nybegynder
12. juni 2003 - 12:14 #10
Undskyld tænkepausen, jeg skulle pludselig på ferie :-)
Jo, de varenumre jeg indtaster i Til1 og Til2 er også selvstændige produkter fra kolonnen Produkter.Varenr

Jeg har prøvet at oversætte følgende af "Luftballon's" tidligere svar til min database uden held:
SELECT tblvare.Varenr, tbltilknytning.tilknyttetvarenr, tblvare.www FROM tblvare INNER JOIN tbltilknytning ON tblvare.Varenr = tbltilknytning.Varenr WHERE tbltilknytning.tilknyttetvarenr In (SELECT varenr FROM tblvare WHERE www=true) AND tblvare.www=True AND tbltilknytning.Varenr=1;

Blev til:

SELECT Produkter.Varenr, Tilbehor.Til1, Produkter.Webstatus FROM Produkter INNER JOIN Tilbehor ON Produkter.Varenr = Tilbehor.Varenr WHERE Tilbehor.Til1 In (SELECT Varenr FROM Produkter WHERE Webstatus=www) AND Produkter.Webstatus=True AND Tilbehor.Varenr='::Varenr::'

Jeg får følgende fejlbeskrivelse i på webben:

Database Results Error
Description: [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
Number: -2147217904 (0x80040E10)
Source: Microsoft OLE DB Provider for ODBC Drivers

Som sagt er mit mål at få listet Varenavn + Pris på de Varenr jeg indtaster i Til1 og Til2.
Avatar billede eagleeye Praktikant
12. juni 2003 - 21:14 #11
Hvis Varenr er tal skal der stå noget andet end '::Varenr::' her:

Tilbehor.Varenr='::Varenr::'

Eks

Tilbehor.Varenr=1
Avatar billede jetkat Nybegynder
12. juni 2003 - 21:30 #12
Varenr, Varenavn, Webstatus, Til1 og Til2 er alle tekst.
Avatar billede eagleeye Praktikant
12. juni 2003 - 21:37 #13
Og dine tabeller ser ud som i beskrevet i 4/06-2003 20:07:29 ?
Avatar billede jetkat Nybegynder
13. juni 2003 - 01:29 #14
Nej som i 04/06-2003 19:59:24
Jeg forstår ikke helt det med den "sammensatte nøgle".
Avatar billede luftballon Nybegynder
13. juni 2003 - 12:12 #15
Okay tror jeg at jeg har kringlet den:

SELECT (SELECT varenavn  FROM produkter WHERE varenr=til) AS Navn, (SELECT pris  FROM produkter where varenr=til) AS Pris

FROM Produkter INNER JOIN Tilbehor ON Produkter.Varenr = Tilbehor.Varenr

WHERE Tilbehor.Varenr=1 AND (SELECT webstatus FROM produkter WHERE varenr=til)='www';

2 tabeller:

1. Produkter
Kolonner:
Varenr (Primær nøgle)
Varenavn
pris
Webstatus

2. Tilbehor
Kolonner:
Varenr (sammensat nøgle)
Til (sammensat nøgle)

I den forbindelse er det vigtigt at bemærke at det ikke er nødvendigt med felterne til1 og til2 i tilbehørstabellen, idet der skal oprettes en record for hver tilbehørsvare. Dvs hvis varenr 1 har  varenr 2 og 3 som tilbehørsvarer, skal der oprettes 2 poster til tabellen tilbehor. Derfor er der kun ”vaernr” og ”til” i tabellen tilbehor.

Jeg har lavet en lille eksempeldatabase. Hvis du giver mig din email adr. så må du få den.
Avatar billede jetkat Nybegynder
13. juni 2003 - 14:19 #16
Send meget gerne eksempeldatabase til jetkat@get2net.dk
Avatar billede jetkat Nybegynder
15. juni 2003 - 10:13 #17
Luftballon's nedenstående løsning fungerer, tak.

SELECT (SELECT varenavn  FROM produkter WHERE varenr=til) AS Varenavn, (SELECT pris  FROM produkter where varenr=til) AS Pris, (SELECT Varenr FROM produkter where varenr=til) AS Varenr
FROM Produkter INNER JOIN Tilbehor ON Produkter.Varenr=Tilbehor.Varenr
WHERE Tilbehor.Varenr='::Varenr::' AND (SELECT webstatus FROM produkter WHERE varenr=til)='www';
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