/ 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
Udskrift fra 2 tabeller
Fra : Jakob Munck


Dato : 02-07-01 18:26

Jeg har tidligere spurgt og fået hjælp om dette problem, men det er ikke
lykkedes mig at løse det. Men jeg har da (vist nok) forbedret koden, dog
uden at virker endnu. Hvis nogen kan hjælpe yderligere, vil jeg være glad.

Jeg har et lille billedgalleri, hvor jeg viser billederne med relevante
oplysninger under. Men i en visning skal jeg vise oplysninger, som jeg
henter fra 2 forskellige tabeller, under hvert billede. Det kan vist gøres
v.hj.a. en "inner join"-måde, og en "union" måde. Den sidste virker -
umiddelbart - som den letteste, men ingen af dem har jeg kunnet få til at
virke. Min kode ser sådan ud og det er informationen "brugerFoedeaar", som
kommer fra en anden tabel end de 3 første oplysninger jeg vil udskrive
(brugerId, fileId, brugernavn).

<%
........
id = request.querystring("id")
brugerId_2 = session("brugerId")

Set RS = Server.CreateObject("ADODB.Recordset")

SQL = ("select * from files where fileid=" & id)
SQL = SQL & "union select * from bruger where brugerId=" & brugerId_2

set RS= Conn.execute(SQL)

brugerId: <%=RS("brugerId")%><br>
fileId: <%=RS("fileid")%><br>
brugernavn: "<%=RS("brugernavn")%>"<br>

brugerFoedeaar: "<%=RS("brugerFoedeaar")%>"<br>
......
%>

Fejlmeddelelsen ser sådan ud:
------------------------
[Microsoft][ODBC Microsoft Access-driver] Der er en syntaksfejl, fordi der
mangler en operator. i forespørgselsudtrykket "fileid=221union select * from
bruger where brugerId=85".
/get2you/galleri.asp, line 58
-----------------------------

Jeg laver noget galt, men hvad???

v.h.
Jakob Munck



 
 
Jørn Andersen (02-07-2001)
Kommentar
Fra : Jørn Andersen


Dato : 02-07-01 18:30

On Mon, 2 Jul 2001 19:25:43 +0200, "Jakob Munck"
<jakob.munck@email.dk> wrote:

Hej Jakob,

>Jeg har et lille billedgalleri, hvor jeg viser billederne med relevante
>oplysninger under. Men i en visning skal jeg vise oplysninger, som jeg
>henter fra 2 forskellige tabeller

Et eller andet siger mig, at du måske ikke har den smarteste
tabel-opbygning - eller også har jeg bare svært ved at gætte, hvordan
dine tabeller ser ud. Kan du ikke skrive et par ord om, hvilke
tabeller du har og hvad de indeholder.

Fx: Indgår brugerID og/eller fileID i begge tabeller?

<SNIP>

> SQL = ("select * from files where fileid=" & id)
> SQL = SQL & "union select * from bruger where brugerId=" & brugerId_2

SQL = "select * from files where fileid=" & id
- eller: SQL = "(select * from files where fileid=" & id & ")"
SQL = SQL & " union select * from bruger where brugerId="
SQL = SQL & brugerId_2 & ";"

- du behøver ikke parantesen
- hvis du bruger den, er den en del af strengen og ikke af id
- husk mellemrum inden 'union (det er det, der giver:
"fileid=221union select ..." fejlmeddelelsen)

En anden ting, der kan drille er, om de variable, du har hentet fra
Session og QueryString er numeriske (som de formentlig skal være i dit
tilfælde) eller om de er streng-variable. Muligvis skal de
konverteres.

Og så lige en gang til: I stedet for skrive
"SELECT * FROM ..."
- så skriv navnene på de felter, du skal bruge, fx:
"SELECT fileID, brugerID FROM ..."

Så får du ikke trukket flere ting ind, end du skal bruge (og sparer
altså server-ressourcer + at din side er hurtigere).


Good luck,
Jørn


--
Jørn Andersen
Brønshøj

Jakob Munck (03-07-2001)
Kommentar
Fra : Jakob Munck


Dato : 03-07-01 00:24

Først tak for hjælpen.

De to tabeller (som har henholdsvis 6 og 9 kolonner) har kolonnen "brugerId"
til fælles, og det jeg prøver er at få udskrevet først en oplysninger fra
den ene tabel og derefter fra den anden tabel, fra de records i tabellen,
hvor brugerId er den samme. Jeg ved ikke om det er forståeligt?

Jeg prøvede den kode du foreslog, og fik følgende fejlmelding:

" Antallet af kolonner i de to markerede tabeller eller forespørgsler i en
foreningsforespørgsel stemmer ikke overens."

Det tyder på at serveren mener, at der skal være lige mange kolonner i de 2
tabeller, og det er der som sagt og.


Jeg er meget modtagelig for gode forslag.

v.h.

Jakob Munck



Jørn Andersen (03-07-2001)
Kommentar
Fra : Jørn Andersen


Dato : 03-07-01 05:21

On Tue, 3 Jul 2001 01:23:30 +0200, "Jakob Munck"
<jakob.munck@email.dk> wrote:


>Først tak for hjælpen.

You're welcome!

>De to tabeller (som har henholdsvis 6 og 9 kolonner) har kolonnen "brugerId"
>til fælles, og det jeg prøver er at få udskrevet først en oplysninger fra
>den ene tabel og derefter fra den anden tabel, fra de records i tabellen,
>hvor brugerId er den samme. Jeg ved ikke om det er forståeligt?

Hmmm ...

>Jeg prøvede den kode du foreslog, og fik følgende fejlmelding:
>
>" Antallet af kolonner i de to markerede tabeller eller forespørgsler i en
>foreningsforespørgsel stemmer ikke overens."

Hvilket i det mindste betyder, at din forespørgsel er kommet igennem -
for nu at se det positive
Og fejlmeldingen er jo også rigtig nok, idet UNION jo betyder at man
simpelthen klasker to tabeller med samme struktur sammen.

>Det tyder på at serveren mener, at der skal være lige mange kolonner i de 2
>tabeller

Nemlig.

Det jeg har lidt svært ved at se, er stadig din tabelstruktur.
Hvad er forholdet mellem dine to tabeller?

Den ene indeholder, så vidt jeg kan gætte, oplysninger om dine
billeder (fileID m.v.).
Den anden gætter jeg så på indeholder oplysninger om
"ejer"/"kunstner"/"bruger??" eller hvad det nu er.

Der må så være en relation mellem de to tabeller??
Jeg forstår blot ikke, hvorfor du har brugernavn i samme tabel som
fileID?

Hvis jeg kan lokke dig til at skrive noget lignende:
Tabel1:
felt1
felt2
osv.

Tabel2:
felt1
felt2
osv.

samt oplysning om hvilken relation, der er mellem de to tabeller.
Og så markere, hvilke felter, du vil have fra hvilke tabeller.
Så kunne det være, vi kunne komme videre :)

Er det en Access-database?
Hvis ja, kan du få det til at virke i Access?

Jeg bruger tit den metode, hvis jeg ikke lige kan gennemskue en SQL,
at jeg så laver forespøgslen i Access, og når det så virker efter
hensigten, så kopierer jeg SQL'en direkte fra Access (med de få
modifikationer, der skal være).


Good luck,
Jørn


--
Jørn Andersen
Brønshøj

Jakob Munck (03-07-2001)
Kommentar
Fra : Jakob Munck


Dato : 03-07-01 09:34

Man skammer sig altid en smule, når man ulejliger andre mennesker, og det
viser sig at problemet er temmelig simpelt. Men sådan er det nok mange
gange.

Jeg har nu løst problemet, og her er koden, der fungerer:

<%
............

Set RS = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT * from files where fileid=" & request.querystring("id")
set RS= Conn.execute(SQL)

Session("Filename") = RS("Filename")

SQL = "SELECT * from bruger where brugerId=" & RS("brugerId")
set RS= Conn.execute(SQL)
%>

brugerId: <%=RS("brugerId")%><br>
Filename: <%=session("Filename")%><br>
brugernavn: "<%=RS("brugernavn")%>"<br>
brugerFoedeaar: "<%=RS("brugerFoedeaar")%>"<br>
............
%>

Den læser fra 2 tabeller, og udskriver nederst fra henholdsvis den ene og
anden. Oplysningerne fra den første sql-søgning er lagt i en sessionvariabel
før den anden søgning er sat i gang. Og så kan der udskrives.

Undskyld, jeg er kun begynder.
Tak for hjælpen.

v.h.
Jakob Munck



Jørn Andersen (03-07-2001)
Kommentar
Fra : Jørn Andersen


Dato : 03-07-01 18:51

On Tue, 3 Jul 2001 10:33:43 +0200, "Jakob Munck"
<jakob.munck@email.dk> wrote:

>Man skammer sig altid en smule, når man ulejliger andre mennesker, og det
>viser sig at problemet er temmelig simpelt. Men sådan er det nok mange
>gange.

Ja, det kender jeg godt :)

<SNIP>

>Session("Filename") = RS("Filename")

Da du (formentlig?) ikke skal bruge den på andre sider, er der ingen
grund til at bruge en Session-variabel - du kan lige så godt gemme den
som:
Filename = RS("Filename")

Når du skal udskrive, skriver du i stedet for:
>Filename: <%=session("Filename")%><br>
Filename: <%= Filename %><br>

Session-variable bruger flere server-ressourcer, fordi de jo ikke
"dør", før Session afsluttes (typisk 20 min. efter sidste aktivitet
fra klienten mod webserveren).


Good luck,

Jørn


--
Jørn Andersen
Brønshøj

Søg
Reklame
Statistik
Spørgsmål : 177508
Tips : 31968
Nyheder : 719565
Indlæg : 6408576
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste