Avatar billede krogstrup Nybegynder
24. maj 2003 - 15:39 Der er 11 kommentarer og
2 løsninger

Relationer - sikkert nemt !

Jeg har 2 tabeller:

OPGAVER
opgaveID
firma
adresse
bla bla bla
sælger
opgaveAnsvarlig

PERSONER
personID
navn

I felterne sælger & opgaveAnsvarlig ønsker jeg blot at skrive personID fra tabellen PERSONER på den respektive person. Men det betyder jo at jeg måske laver henvisning til 2 forskellige personer i PERSONER tabellen.

Hvordan laver jeg nu mit SQL kald fra min ASP side således at jeg får det korrekte navn med fra PERSONER tabellen tilknyttet henholdsvis feltet sælger & opgaveAnsvarlig ???

Skal jeg oprette nogle relationer i Access databasen først eller kan det ganske enkelt gøres med den rigtige SQL konstruktion ???

HELP :-)
Avatar billede somaliomar Praktikant
24. maj 2003 - 15:59 #1
Så vidt jeg har forstået vil du have at
En opgave kan have flere personer involveret og
En person kan have flere opgaver kørende samtidigt

Hvis det er det du er ude efter skal du gøre flg.:
1. Drop feltet opgaveAnsvarlig
2. Opret en ny tabel med to primære felter; "PersonId" og "OpgaveId"
3. Nu kan du lave et SQL-udtræk der ser sådan ud:

SELECT PERSONER.navn, OPGAVER.firma, OPGAVER.adress, .......
FROM PERSONER
INNER JOIN (OPGAVER INNER JOIN MyLinkTable ON OPGAVER.id = MyLinkTable.PersonId) ON PERSONER.id = MyLinkTable.OpgaveId
Avatar billede hekla Nybegynder
24. maj 2003 - 16:21 #2
Opret din forespørgsel i Access og kald den med din ASP, på samme måde som du kalder en tabel:

I Access klikker du på fanebladet Forespørgsler:
Klik: Opret en forespørgsel i designvisning
Højreklik og vælg SQL-visning

Indsæt følgende i vinduet og luk og gem forespørgslen

SELECT Opgaver.opgaveID, Opgaver.firma, Opgaver.adresse, DLookUp("[Navn]","personer","[personer]![personID] =" & [sælger]) AS sælger, DLookUp("[Navn]","personer","[personer]![personID] =" & [opgaveansvarlig]) AS opgaveansvarlig
FROM personer INNER JOIN Opgaver ON personer.personID = opgaver.sælger
GROUP BY opgaver.opgaveID, opgaver.firma, opgaver.adresse, DLookUp("[Navn]","personer","[personer]![personID] =" & [sælger]), DLookUp("[navn]","personer","[personer]![personID] =" & [opgaveansvarlig]);
Avatar billede hekla Nybegynder
24. maj 2003 - 16:21 #3
Det var et svar
Avatar billede krogstrup Nybegynder
24. maj 2003 - 16:42 #4
Lad mig lige prøve at omformulere lidt - bare for at være 100% sikker på I har forstået mig korrekt !

Jeg har en tabel indeholdende data om diverse opgaver. Til en opgave kan der være knyttet en ansvarlig for design, ansvarlig for programmering, ansvarlig for kundekontakt osv osv. Alle disse navne skal "hentes"/relatere til tabellen PERSONER. Jeg ønsker altså at kunne vedligeholde alle disse navn centralt i tabellen PERSONER.

Men når jeg henter feltet DesignAnsvarlig fra opgaver står der jo f.eks. bare 37 heri (hvis den design ansvarlige har ID nr 37 i PERSONER). Spørgsmålet er hvordan jeg nemmest & mest effektivt får hentet navnet på nr 37 ind i stedet for personID´et.

I må undskylde hvis jeres svar allerede nu besvarer ovenstående smøre - jeg ville bare være sikker på at vi talte om det samme !


somaliomar >>>
Kan du uddybe dit svar en anelse. Skal jeg lave nogle relationer mellem den nye tabel og da andre stamdata tabeller ?
Avatar billede hekla Nybegynder
24. maj 2003 - 17:50 #5
DLookUp("[Navn]","personer","[personer]![personID] =" & [sælger]) AS sælger
henter navn fra tabellen personer hvor personID = sælger for hver post

DLookUp("[Navn]","personer","[personer]![personID] =" & [opgaveansvarlig])
henter navn fra tabellen personer hvor personID = opgaveansvarlig for hver post

så min løsning dækker det, som du har brug for. Det kan godt være at der skal være [firkantede paranteser] udenom navnene som indeholder danske bogstaver.

Hvis du skal have flere felter med, skal de tilføjes i både SELECT-delen og GROUP BY-delen - nemmest før den første Dlookup i hver del og med kommaer udenom
Avatar billede krogstrup Nybegynder
24. maj 2003 - 20:07 #6
hekla >>>

Jeg ved godt jeg ikke specificerede det i mit spm, men jeg foretrækker en løsning hvor jeg kan specificere mit SQL kald direkte i koden, og ikke skal kalde en forespørgsel i access databasen.

Er der nogle fordele (f.eks. performance eller andet) ved at benytte din metode frem for at udføre SQL kaldet direkte i asp koden ?


somaliomar >>>

Dækker din løsning det behov jeg har? og kunne jeg lokke dig til at uddybe punkterne en anelse?

:-)
Avatar billede somaliomar Praktikant
24. maj 2003 - 20:22 #7
Misforstod dit første spørgsmål. Prøv det her:

SELECT
  OPGAVER.firma,
  OPGAVER.adresse,
  PERSONER_1.navn AS opgave,
  PERSONER_2.navn AS design,
  PERSONER_3.navn AS kontakt

FROM
  PERSONER AS PERSONER_3 INNER JOIN
    (PERSONER AS PERSONER_2 INNER JOIN
      (PERSONER AS PERSONER_1 INNER JOIN
        OPGAVER ON PERSONER_1.id = OPGAVER.opgaveansvarlig)
    ON PERSONER_2.id = OPGAVER.designansvarlig)
  ON PERSONER_3.id = OPGAVER.kontaktansvarlig;
Avatar billede hekla Nybegynder
24. maj 2003 - 21:45 #8
Fordelen ved at lave det i Access, er at du har nogle flere muligheder i Access end i ASP.
Man kunne også spørge: Hvad er fordelen ved at lave forespørgslen i ASP??
Avatar billede hekla Nybegynder
24. maj 2003 - 21:46 #9
Jeg ved i øvrigt ikke om man kan lave den forespørgsel, som jeg foreslår, i ASP. Du kunne evt prøve.
Avatar billede krogstrup Nybegynder
24. maj 2003 - 23:10 #10
somaliomar >>>

Nu har jeg fået skruet følgende sammen som VIRKER:

SELECT *,PERSONER_1.personNavn AS saelgerNavn,PERSONER_2.personNavn AS ansvarligNavn FROM PERSONER AS PERSONER_2 INNER JOIN (PERSONER AS PERSONER_1 INNER JOIN OPGAVER ON PERSONER_1.personID = OPGAVER.saelger) ON PERSONER_2.personID = OPGAVER.ansvarlig

Det eneste der irriterer mig nu, er at jeg ikke rigtig kan gennemskue syntaksen i INNER JOIN - jeg forstår simpelthen ikke ovenståede SQL sætning - dvs. jeg forstår ikke JOIN delen !!!

Kunne du evt. overtales til at give mig en pædagogisk forklaring på hvordan INNER JOIN fungerer og hvorledes disse sammensættes. Det forvirrer mig f.eks. en del at de 2 INNER JOINS ikke kommer efter hinanden, men er flettet ind i hinanden...!!!

?!?
Avatar billede somaliomar Praktikant
25. maj 2003 - 08:17 #11
Avatar billede krogstrup Nybegynder
25. maj 2003 - 14:48 #12
Jeg takker mange gange for jeres indsats og svar !!!

:-)
Avatar billede somaliomar Praktikant
25. maj 2003 - 15:32 #13
Jeg takker mange gange for din points og points !!!

:)
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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