/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
data fra flere tabeller samtidigt
Fra : Michael Tillgaard


Dato : 05-01-03 14:32

Hvordan trækker man data fra flere tabeller samtidigt?
Jeg har tre tabeller Menu1, Menu2 og Menu3 som jeg gerne vil
trække data fra.
Jeg troede at dette kunne gå men det kan det ikke:

SQL = "SELECT * FROM Menu1 AND Menu2 AND Menu3 WHERE
TextOverskrift etc...

Med venlig hilsen

Michael Tillgaard


--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Michael Tillgaard (05-01-2003)
Kommentar
Fra : Michael Tillgaard


Dato : 05-01-03 14:53

Michael Tillgaard wrote in >
> SQL = "SELECT * FROM Menu1 AND Menu2 AND Menu3 WHERE

Når jeg skriver:
SQL = "SELECT * FROM Menu1, Menu2, Menu3 WHERE etc...

Får jeg følgende fejlmelding:

Microsoft OLE DB Provider for ODBC Drivers fejl '80004005'

[Microsoft][ODBC Microsoft Access-driver] Det angivne felt
"TextOverskrift" kan referere til mere end én tabel, der er vist
i FROM-delsætningen i sætningen SQL.

Med venlig hilsen
Michael Tillgaard

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Jimmy (05-01-2003)
Kommentar
Fra : Jimmy


Dato : 05-01-03 14:57


"Michael Tillgaard" <post@multibook.dk> wrote in message
news:av9dav$5ib$1@sunsite.dk...
> Michael Tillgaard wrote in >
> > SQL = "SELECT * FROM Menu1 AND Menu2 AND Menu3 WHERE
>
> Når jeg skriver:
> SQL = "SELECT * FROM Menu1, Menu2, Menu3 WHERE etc...
>
> Får jeg følgende fejlmelding:
>
> Microsoft OLE DB Provider for ODBC Drivers fejl '80004005'
>
> [Microsoft][ODBC Microsoft Access-driver] Det angivne felt
> "TextOverskrift" kan referere til mere end én tabel, der er vist
> i FROM-delsætningen i sætningen SQL.

SQL = "SELECT * FROM Menu1, Menu2, Menu3 WHERE Menu1.TextOverskrift = '' AND
Menu2.Whatever LIKE '%e%'

osv.
Søg på google - "join tutorial microsoft access"

Mvh
Jimmy



Jørn Andersen (05-01-2003)
Kommentar
Fra : Jørn Andersen


Dato : 05-01-03 16:11

On Sun, 5 Jan 2003 13:52:31 +0000 (UTC), Michael Tillgaard
<post@multibook.dk> wrote:

>Når jeg skriver:
>SQL = "SELECT * FROM Menu1, Menu2, Menu3 WHERE etc...

I stedet for at bruge *, så skal (bør) du - også helt generelt -
specificere felterne. Det giver både mere overskuelig kode og bedre
performance.

>Får jeg følgende fejlmelding:
>
>Microsoft OLE DB Provider for ODBC Drivers fejl '80004005'
>
>[Microsoft][ODBC Microsoft Access-driver] Det angivne felt
>"TextOverskrift" kan referere til mere end én tabel, der er vist
>i FROM-delsætningen i sætningen SQL.

SELECT Menu1.TextOverskrift, Menu2.feltnavn2, Menu2.feltnavn3 osv.
- altså i stedet for blot:
Feltnavn

skriver du:
Tabelnavn.Feltnavn

Good luck!

--
Jørn Andersen,
Brønshøj

Kenneth Johansen (05-01-2003)
Kommentar
Fra : Kenneth Johansen


Dato : 05-01-03 14:58


> Hvordan trækker man data fra flere tabeller samtidigt?
> Jeg har tre tabeller Menu1, Menu2 og Menu3 som jeg gerne vil
> trække data fra.
> Jeg troede at dette kunne gå men det kan det ikke:
>
> SQL = "SELECT * FROM Menu1 AND Menu2 AND Menu3 WHERE
> TextOverskrift etc...

Jeg mener bestemt man skal lave en INNER JOIN.


Søg og du skal finde

Mvh

Kenneth Johansen



Michael Tillgaard (05-01-2003)
Kommentar
Fra : Michael Tillgaard


Dato : 05-01-03 18:11

Kenneth Johansen wrote in
dk.edb.internet.webdesign.serverside.asp:
> Jeg mener bestemt man skal lave en INNER JOIN.

Dette virker ikke helt:
SQL = "SELECT * FROM Menu2 INNER JOIN Menu3 ON Menu2=Menu3 WHERE
TextOverskrift

Giver følgende fejlmelding:

Microsoft OLE DB Provider for ODBC Drivers fejl '80004005'

[Microsoft][ODBC Microsoft Access-driver] Joinudtrykket
understøttes ikke.

Med venlig hilsen

Michael Tillgaard

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Jørn Andersen (05-01-2003)
Kommentar
Fra : Jørn Andersen


Dato : 05-01-03 20:17

On Sun, 5 Jan 2003 17:10:34 +0000 (UTC), Michael Tillgaard
<post@multibook.dk> wrote:

>Dette virker ikke helt:
>SQL = "SELECT * FROM Menu2 INNER JOIN Menu3 ON Menu2=Menu3 WHERE
>TextOverskrift
>
>Giver følgende fejlmelding:
>
>Microsoft OLE DB Provider for ODBC Drivers fejl '80004005'
>
>[Microsoft][ODBC Microsoft Access-driver] Joinudtrykket
>understøttes ikke.

Fordi det er ikke er tabelnavne, men feltnavne der skal stå efter ON.

Prøv at kigge fx her for at se den korrekte syntax for JOINS:
<URL: http://sqlcourse2.com/joins.html>

Men derudover er det ikke særligt klart for mig, hvad det præcist er,
du vil opnå?
JOIN bruges til relaterede tabeller. Men det er ikke sikkert det er
det, du skal bruge - det afhænger af, hvad du vil opnå.

Good luck!

--
Jørn Andersen,
Brønshøj

Michael Tillgaard (05-01-2003)
Kommentar
Fra : Michael Tillgaard


Dato : 05-01-03 20:43

Jørn Andersen wrote in dk.edb.internet.webdesign.serverside.asp:
> Men derudover er det ikke særligt klart for mig, hvad det præcist er,
> du vil opnå?
Beklager den manglende/dårlige beskrivelse.
Jeg er ved at rette et søge script til.

Jeg har en access-database med flere tabeller:
Menu2, Menu3, Menu4 etc.
I tabellerne findes ens feltnavne. Feltnavnet TextOverskrift findes
således i alle tabellerne.
Nu vil jeg så gerne lave en søgning i tabellerne Menu2, Menu3, Menu 4 i
feltnavnet TextOverskrift.

SQL = "SELECT Menu2.TextOverskrift, Menu3.TextOverskrift FROM (Menu2
INNER JOIN Menu3 ON TextOverskrift = TextOverskrift) WHERE
TextOverskrift like '%" & overskrift & "%' "

Med venlig hilsen

Michael Tillgaard

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Jørn Andersen (05-01-2003)
Kommentar
Fra : Jørn Andersen


Dato : 05-01-03 23:56

On Sun, 5 Jan 2003 19:42:36 +0000 (UTC), Michael Tillgaard
<post@multibook.dk> wrote:

>Jeg har en access-database med flere tabeller:
>Menu2, Menu3, Menu4 etc.
>I tabellerne findes ens feltnavne. Feltnavnet TextOverskrift findes
>således i alle tabellerne.
>Nu vil jeg så gerne lave en søgning i tabellerne Menu2, Menu3, Menu 4 i
>feltnavnet TextOverskrift.
>
>SQL = "SELECT Menu2.TextOverskrift, Menu3.TextOverskrift FROM (Menu2
>INNER JOIN Menu3 ON TextOverskrift = TextOverskrift) WHERE
>TextOverskrift like '%" & overskrift & "%' "

Mon ikke man i sådan et tilfælde ville bruge en UNION:
SQL = "SELECT Menu2.TextOverskrift" & _
" FROM Menu2" & _
" WHERE Menu2.TextOverskrift LIKE '%" & overskrift & "%'" & _
" UNION" & _
" SELECT Menu3.TextOverskrift" & _
" FROM Menu3" & _
" WHERE Menu3.TextOverskrift LIKE '%" & overskrift & "%'"

Nu er jeg ikke SQL-haj, så det kan måske laves på en smartere måde,
men dette burde virke.

I øvrigt kan jeg da generelt anbefale at bruge Access's
forespørgselsgenerator (QBE - Query By Example), hvis man skal lege
med forespørgsler og ikke er alt for stiv i SQL. Lav forespørgslen ved
at udvælge de tabeller og felter du vil have, og når så forespørgslen
er som den skal være, så gå over til SQL-visning og hiv resultatet ud
herfra.
Det virker dog ikke i dette tilfælde (med UNION), men man kan stadig
*skrive* SQL'en og teste om det virker.

Good luck!

--
Jørn Andersen,
Brønshøj

Michael Tillgaard (06-01-2003)
Kommentar
Fra : Michael Tillgaard


Dato : 06-01-03 20:48

Jørn Andersen wrote in dk.edb.internet.webdesign.serverside.asp:

Klip

Tak for hjælpen. Jeg fik nedenstående til at virke men...

SQL=" SELECT Menu1.TextOverskrift" &_
" FROM Menu1" &_
" WHERE TextOverskrift like '%" & overskrift & "%' " &_
" UNION " &_
" SELECT Menu2.TextOverskrift" &_
" FROM Menu2" &_
" WHERE TextOverskrift like '%" & overskrift & "%' " &_
" UNION " &_
" SELECT Menu3.TextOverskrift" &_
" FROM Menu3" &_
" WHERE TextOverskrift like '%" & overskrift & "%' "
Set RS = Conn.Execute(SQL)
count = 0
if RS.eof then
response.write "<p><b>0 resultater</b></p>"
end if
   Do While Not RS.EOF
   count = count + 1
   %>
<p>
<%=count%>.<br>
<%=RS("TextOverskrift")%><br>
<br></p>

<% RS.MoveNext
Loop

RS.close
set RS = nothing
Conn.close
set Conn = nothing %>
<hr>

Erstatter jeg TestOverskrift med TextFyld (den vil jeg lave noget
tilsvarende med) kommer følgende fejlmelding:

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

[Microsoft][ODBC Microsoft Access-driver] Feltet "Textfyld" af typen Memo,
OLE eller Hyperlink Object kan ikke bruges i en SELECT-delsætning i en
union-forespørgsel.

Hvad er jeg stødt ind i her?

Med venlig hilsen
Michael Tillgaard

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Jens Gyldenkærne Cla~ (05-01-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 05-01-03 23:28

Michael Tillgaard skrev:

> Beklager den manglende/dårlige beskrivelse.

Bedre sent end aldrig Men det illustrerer meget godt hvorfor en
god beskrivelse er vigtig på usenet.

> Jeg har en access-database med flere tabeller:
> Menu2, Menu3, Menu4 etc.
> I tabellerne findes ens feltnavne. Feltnavnet TextOverskrift
> findes således i alle tabellerne.
> Nu vil jeg så gerne lave en søgning i tabellerne Menu2, Menu3,
> Menu 4 i feltnavnet TextOverskrift.

Så skal du bruge en union-forespørgsel. Join-forespørgsler lægger
tabeller ved siden af hinanden - der bliver flere tilgængelige
felter, men ikke flere poster (cross join dog undtaget).
Union-forespørgsler lægger derimod tabeller under hinanden - for at
virke kræver det at hver delelement (en select-sætning) indeholder
samme type data, det vil sige samme antal felter og matchende
felttyper hele vejen igennem.

I dit tilfælde kan man skrive:

SELECT TextOverskrift FROM Menu2
UNION
SELECT TextOverskrift FROM Menu3
UNION
SELECT TextOverskrift FROM Menu4

- det vil give en liste med alle overskrifter fra de tre tabeller
(dubletter fjernes). Hvis du har brug for at vide hvilken tabel et
givent resultat stammer fra må du inkludere noget mere - enten et
felt som er unikt på tværs af de tre menuer eller bare en tekst der
fortæller tabelnavnet:

SELECT TextOverskrift, 'menu2' AS tabelKilde FROM Menu2
UNION
SELECT TextOverskrift, 'menu3' FROM Menu3
UNION
SELECT TextOverskrift, 'menu4' FROM Menu4

(det er ikke nødvendigt at navngive felter andre steder end i den
første select - disse navne bruges for det samlede recordset).

NB: Hvis du skal sortere en union-forespørgsel skal ORDER BY-
delsætningen placeres én gang - efter sidste select-sætning. Den
virker på hele union-sættet.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jens Gyldenkærne Cla~ (06-01-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 06-01-03 22:42

Michael Tillgaard skrev:

> Erstatter jeg TestOverskrift med TextFyld (den vil jeg lave
> noget tilsvarende med) kommer følgende fejlmelding:
>
> Microsoft OLE DB Provider for ODBC Drivers fejl '80040e14'
>
> [Microsoft][ODBC Microsoft Access-driver] Feltet "Textfyld" af
> typen Memo, OLE eller Hyperlink Object kan ikke bruges i en
> SELECT-delsætning i en union-forespørgsel.

Den var værre. Du kan prøve at skrive UNION ALL i stedet for UNION
(alle steder) - så vil Access ikke forsøge at fjerne dubletter. Men
hvis det heller ikke virker er der ikke så meget at gøre.

Men du kan i øvrigt heller ikke søge på et memo-felt - så måske er
union-forespørgslen ikke så meget værd her.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Michael Tillgaard (07-01-2003)
Kommentar
Fra : Michael Tillgaard


Dato : 07-01-03 16:35

Jens GyldenkærneClausen wrote in
> Den var værre. Du kan prøve at skrive UNION ALL i stedet for UNION
> (alle steder) - så vil Access ikke forsøge at fjerne dubletter. Men
> hvis det heller ikke virker er der ikke så meget at gøre.

Tak for hjælpen, det virker bare.

M.v.h.

Michael Tillgaard

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408946
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste