|
| DB-opslag mellem relaterede tabeller Fra : Jens R. Rasmussen |
Dato : 19-06-11 20:08 |
|
Hej/
Mit spørgsmål er meget elementært, men jeg kender desværre ikke
svaret.
Jeg har en Acess database med tabeller, der er indbydes
relaterede. En tabel hedder Stamdata og den indeholder bl.a.
feltet Formand. En anden tabel hedder Kunder, og den indeholder
bl.a. felterne Fornavn og Efternavn på en lang række personer.
Indhold af feltet Formand i Stamdata er nøgle til tabellen
Kunder.
Ved gennemløb af Stamdata udvælger jeg en række formands id'er,
som jeg skal bruge til at finde Fornavn og Efternavn i Kunder.
Jeg har følgende kode:
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open DSN
strSQL = "SELECT * FROM Stamdata ORDER By Saeson desc"
set rs = Conn.Execute(strSQL)
DO WHILE Not rs.eof
Response.write "Formand:" & rs("Formand") & "<br />"
...
rs.MoveNext
Loop
....
Se det giver mig en korrekt liste af formands-id'er, fx '17',
'23' og '138'. Men jeg skal jo ikke liste id'eerne men liste de
tilsvarende fornavne og efternavne, som findes i den anden tabel
(kunder).
Hvordan kan jeg under søgningen i Stamdata samtidig søge i Kunde
for at finde nr. 17 for- og efternavn uden at ødelægge den
fortsatte søgning i Stramdata?
mvh
/Jens
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Michael Weber (19-06-2011)
| Kommentar Fra : Michael Weber |
Dato : 19-06-11 20:38 |
|
Den 19-06-2011 21:07, Jens R. Rasmussen skrev:
> Hej/
>
> Mit spørgsmål er meget elementært, men jeg kender desværre ikke
> svaret.
>
> Jeg har en Acess database med tabeller, der er indbydes
> relaterede. En tabel hedder Stamdata og den indeholder bl.a.
> feltet Formand. En anden tabel hedder Kunder, og den indeholder
> bl.a. felterne Fornavn og Efternavn på en lang række personer.
> Indhold af feltet Formand i Stamdata er nøgle til tabellen
> Kunder.
>
> Ved gennemløb af Stamdata udvælger jeg en række formands id'er,
> som jeg skal bruge til at finde Fornavn og Efternavn i Kunder.
>
> Jeg har følgende kode:
>
> Set Conn = Server.CreateObject("ADODB.Connection")
> Conn.Open DSN
> strSQL = "SELECT * FROM Stamdata ORDER By Saeson desc"
> set rs = Conn.Execute(strSQL)
> DO WHILE Not rs.eof
> Response.write "Formand:"& rs("Formand")& "<br />"
> ..
> rs.MoveNext
> Loop
> ...
>
> Se det giver mig en korrekt liste af formands-id'er, fx '17',
> '23' og '138'. Men jeg skal jo ikke liste id'eerne men liste de
> tilsvarende fornavne og efternavne, som findes i den anden tabel
> (kunder).
>
> Hvordan kan jeg under søgningen i Stamdata samtidig søge i Kunde
> for at finde nr. 17 for- og efternavn uden at ødelægge den
> fortsatte søgning i Stramdata?
Du skal have fat i et sql-mæssigt inner join.
Der er et eksempel her:
http://www.w3schools.com/sql/sql_join_inner.asp
På ovenstående website, er der også eksempler på andre slags joins.
http://www.w3schools.com/sql/sql_join.asp
| |
Jens R. Rasmussen (19-06-2011)
| Kommentar Fra : Jens R. Rasmussen |
Dato : 19-06-11 21:41 |
|
Michael Weber wrote in dk.edb.internet.webdesign.serverside.asp:
> Den 19-06-2011 21:07, Jens R. Rasmussen skrev:
..
> > Jeg har en Acess database med tabeller, der er indbydes
> > relaterede. En tabel hedder Stamdata og den indeholder bl.a.
> > feltet Formand. En anden tabel hedder Kunder, og den indeholder
> > bl.a. felterne Fornavn og Efternavn på en lang række personer.
> > Indhold af feltet Formand i Stamdata er nøgle til tabellen
> > Kunder.
> >
> > Ved gennemløb af Stamdata udvælger jeg en række formands id'er,
> > som jeg skal bruge til at finde Fornavn og Efternavn i Kunder.
> >
> > Jeg har følgende kode:
> >
> > Set Conn = Server.CreateObject("ADODB.Connection")
> > Conn.Open DSN
> > strSQL = "SELECT * FROM Stamdata ORDER By Saeson desc"
> > set rs = Conn.Execute(strSQL)
> > DO WHILE Not rs.eof
> > Response.write "Formand:"& rs("Formand")& "<br />"
> > ..
> > rs.MoveNext
> > Loop
> > ...
> >
> > Se det giver mig en korrekt liste af formands-id'er, fx '17',
> > '23' og '138'. Men jeg skal jo ikke liste id'eerne men liste de
> > tilsvarende fornavne og efternavne, som findes i den anden tabel
> > (kunder).
> >
> > Hvordan kan jeg under søgningen i Stamdata samtidig søge i Kunde
> > for at finde nr. 17 for- og efternavn uden at ødelægge den
> > fortsatte søgning i Stramdata?
>
>
> Du skal have fat i et sql-mæssigt inner join.
>
> Der er et eksempel her:
> http://www.w3schools.com/sql/sql_join_inner.asp
>
> På ovenstående website, er der også eksempler på andre slags
joins.
> http://www.w3schools.com/sql/sql_join.asp
Tak Michael - så lærte jeg om joins. Det løste dog ikke helt mit
problem, da jeg ikke beskrev detaljerne i mine tabeller.
Se i Stamdata har jeg en række felter: formand, naestformand,
kasserer osv. Og alle disse felter indeholder nøgler til tabellen
Kunder. Og jeg skal hente dem alle sammen - dvs. have rigtige navne
på personerne.
Hvis jeg nøjes med formanden virker det perfekt at skrive:
strSQL = "SELECT * FROM Stamdata INNER JOIN Kunder ON
stamdata.formand=kunder.kundeid ORDER By Saeson desc"
..
Response.write "Formand:" & rs("fornavn") & rs("efternavn")
men hvis jeg prøver at tage næstformanden med lykkes det ikke.
Hvis jeg skriver:
strSQL = "SELECT * FROM Stamdata INNER JOIN Kunder ON
stamdata.formand=kunder.kundeid OR
stamdata.naestformand=kunder.kundeid ORDER By Saeson desc"
....
Response.write "Formand:" & rs("fornavn") & rs("efternavn")
Response.write "Næstmand:" & rs("fornavn") & rs("efternavn")
bliver både formanden og næstformanden udstyret med næstformandens
navn.
Og hvis jeg isf. 'OR' skriver 'AND' bliver der ikke fundet noget
match
kan du også hjælpe mig med denne nød?
mvh
/Jens
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Stig Johansen (20-06-2011)
| Kommentar Fra : Stig Johansen |
Dato : 20-06-11 10:44 |
|
Jens R. Rasmussen wrote:
> Tak Michael - så lærte jeg om joins. Det løste dog ikke helt mit
> problem, da jeg ikke beskrev detaljerne i mine tabeller.
>
> Se i Stamdata har jeg en række felter: formand, naestformand,
> kasserer osv. Og alle disse felter indeholder nøgler til tabellen
> Kunder. Og jeg skal hente dem alle sammen - dvs. have rigtige navne
> på personerne.
>
> Hvis jeg nøjes med formanden virker det perfekt at skrive:
> strSQL = "SELECT * FROM Stamdata INNER JOIN Kunder ON
> stamdata.formand=kunder.kundeid ORDER By Saeson desc"
> .
> Response.write "Formand:" & rs("fornavn") & rs("efternavn")
>
> men hvis jeg prøver at tage næstformanden med lykkes det ikke.
>
> Hvis jeg skriver:
> strSQL = "SELECT * FROM Stamdata INNER JOIN Kunder ON
> stamdata.formand=kunder.kundeid OR
> stamdata.naestformand=kunder.kundeid ORDER By Saeson desc"
> ...
> Response.write "Formand:" & rs("fornavn") & rs("efternavn")
> Response.write "Næstmand:" & rs("fornavn") & rs("efternavn")
Lidt kort, men du skal søge videre i joins.
1) Du skal tildele et alias, eks:
S = Stamdata
KF = Kunder(formand)
KN = Kunder(næstformand).
Nu kan du skrive:
SQL=
SELECT S.formand,KF.fornavn AS KFfornavn, KF.efternavn as KFefternavn,
KN.fornavn AS KNfornavn, KN.efternavn as KNefternavn
FROM Stamdata S
INNER JOIN Kunder KF ON stamdata.formand=KF.kundeid
INNER JOIN Kunder KN ON stamdata.naestformand=KN.kundeid
..... osv
Hvis der ikke altid findes relationer skal du muligvis ud i en LEFT OUTER
JOIN
Felterne burde nu kunne tilgås med:
Response.write "Formand:" & rs("KFfornavn") & rs("KFefternavn")
Response.write "Næstmand:" & rs("KNfornavn") & rs("KNefternavn")
--
Med venlig hilsen
Stig Johansen
| |
Jens R. Rasmussen (20-06-2011)
| Kommentar Fra : Jens R. Rasmussen |
Dato : 20-06-11 21:20 |
|
Stig Johansen wrote in dk.edb.internet.webdesign.serverside.asp:
> Jens R. Rasmussen wrote:
>
> > Tak Michael - så lærte jeg om joins. Det løste dog ikke helt mit
> > problem, da jeg ikke beskrev detaljerne i mine tabeller.
> >
> > Se i Stamdata har jeg en række felter: formand, naestformand,
> > kasserer osv. Og alle disse felter indeholder nøgler til tabellen
> > Kunder. Og jeg skal hente dem alle sammen - dvs. have rigtige navne
> > på personerne.
> >
> > Hvis jeg nøjes med formanden virker det perfekt at skrive:
> > strSQL = "SELECT * FROM Stamdata INNER JOIN Kunder ON
> > stamdata.formand=kunder.kundeid ORDER By Saeson desc"
> > .
> > Response.write "Formand:" & rs("fornavn") & rs("efternavn")
> >
> > men hvis jeg prøver at tage næstformanden med lykkes det ikke.
> >
> > Hvis jeg skriver:
> > strSQL = "SELECT * FROM Stamdata INNER JOIN Kunder ON
> > stamdata.formand=kunder.kundeid OR
> > stamdata.naestformand=kunder.kundeid ORDER By Saeson desc"
> > ...
> > Response.write "Formand:" & rs("fornavn") & rs("efternavn")
> > Response.write "Næstmand:" & rs("fornavn") & rs("efternavn")
>
> Lidt kort, men du skal søge videre i joins.
>
> 1) Du skal tildele et alias, eks:
> S = Stamdata
> KF = Kunder(formand)
> KN = Kunder(næstformand).
>
> Nu kan du skrive:
> SQL=
> SELECT S.formand,KF.fornavn AS KFfornavn, KF.efternavn as KFefternavn,
> KN.fornavn AS KNfornavn, KN.efternavn as KNefternavn
> FROM Stamdata S
> INNER JOIN Kunder KF ON stamdata.formand=KF.kundeid
> INNER JOIN Kunder KN ON stamdata.naestformand=KN.kundeid
> ..... osv
>
> Hvis der ikke altid findes relationer skal du muligvis ud i en LEFT OUTER
> JOIN
>
> Felterne burde nu kunne tilgås med:
>
> Response.write "Formand:" & rs("KFfornavn") & rs("KFefternavn")
> Response.write "Næstmand:" & rs("KNfornavn") & rs("KNefternavn")
>
>
> --
> Med venlig hilsen
> Stig Johansen
Hej Stig og tak for din hjælp. Det er pinligt så lidt jeg ved, men måske vil
du bære over og alligevel svare på et par uddybende spørgsmål til din kode?
1) Når jeg laver de 3 første aliasser
S=Stamdata
KF=Kunder(formand)
KN=Kunder(Naestformand)
så skal jeg ikke have parenteserne og deres indhold med, vel?
2) I SELECT søger du først på S.formand. Her kunne godt stå * - eller
kolonnen Saeson - altså S.saeson, ikk? Saeson er nøglen i Stamdata og det
felt som udskriften sidenhen skal sorteres efter.
3) De nye aliasser du indfører med AS gør du kun for at lette min
udskrivning, ikk? For jeg kunne vel godt skrive rs("KF.fornavn") i stedet
for - altså uden aliasser?
4) I FROM skriver du Stamdata S og i INNER JOIN skriver du Kunder KF. Det
kan jeg ikke lige intuitivt greje. Hvorfor skal både tabellen og dens
aliasser nævner efter hinanden med mellemrum imellem? Er det er
sammenskrivning af
From Stamdata
From S
INNER JOIN Kunder ON stamdata.formand=KF.Kunderid
INNER JOIN KF ON stamdata.formand=KF.Kunderid
... ?
mvh
/Jens
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Stig Johansen (21-06-2011)
| Kommentar Fra : Stig Johansen |
Dato : 21-06-11 12:30 |
|
Jens R. Rasmussen wrote:
> Hej Stig og tak for din hjælp. Det er pinligt så lidt jeg ved,
Intet er pinligt, kun at undlade at spørge.
> men måske
> vil du bære over og alligevel svare på et par uddybende spørgsmål til din
> kode?
Ja, men husk det er ud fra hvordan jeg 'plejer' at lave tingene.
> 1) Når jeg laver de 3 første aliasser
> S=Stamdata
> KF=Kunder(formand)
> KN=Kunder(Naestformand)
>
> så skal jeg ikke have parenteserne og deres indhold med, vel?
Jeg er ikke lige med på hvad du mener med paranteser, men:
Nogle databaser vil have paranteser om flere joins, andre vil ikke.
Jeg husker ikke hvilke der VIL, og hvilke der IKKE vil, så du må prøve dig
frem.
> 2) I SELECT søger du først på S.formand. Her kunne godt stå * - eller
> kolonnen Saeson - altså S.saeson, ikk? Saeson er nøglen i Stamdata og det
> felt som udskriften sidenhen skal sorteres efter.
Et generelt svar.
Der er 2 ting i dette spørgsmål.
1) At bruge * (generelt)
2) 'Tvetydigheden'.
Overordnet er det *meget* dårlig karma at bruge * hvis man kun skal bruge
eet felt.
Hvis Stamdata består af 100 felter, vil databasen returnere samtlige (dvs.
100 felter ) ved en select *.
Dvs. hvis du har 1000 records, vil der returneres 100.000 feltværdier,
hvorimod en Select formand FROM.. kun vil returnere dette ene felt dvs 1000
feltværdier.
'Tvetydigheden' handler om samme feltnavn i forskellige tabeller.
Når du skal dobbelt joine Kunder, og bruge hhv. fornavn og efternavn, vil
databasen (uden alias) generere 2* fornavn og 2* efternavn, og derfor kan
man ikke finde 'fornavn'.
Derfor Alias, hvor jeg (og sikkert alle) bruger 1/2 bogstavs aliaser.
> 3) De nye aliasser du indfører med AS gør du kun for at lette min
> udskrivning, ikk? For jeg kunne vel godt skrive rs("KF.fornavn") i stedet
> for - altså uden aliasser?
Der må jeg være svar skyldig, for som sagt er det 'plejer at gøre'.
'Plejer' er SQL compliant, og virker i de databaser jeg kender til, og har
ikke til hensigt at udforske 'spidsfindigheder'.
> 4) I FROM skriver du Stamdata S og i INNER JOIN skriver du Kunder KF. Det
> kan jeg ikke lige intuitivt greje. Hvorfor skal både tabellen og dens
> aliasser nævner efter hinanden med mellemrum imellem? Er det er
> sammenskrivning af
> From Stamdata
> From S
Nej.
S er et alias til Stamdata, så Stamdata S er (nogenlunde) det samme som
Stamdata AS S.
Men igen er der nogle databaser der vil have:
Stamdata AS S
og andre der vil have
Stamdata S
Igen kan jeg ikke huske hvem der vil have hvad, men det er p*sse irriterende
med disse små forskelle (som med 'HTML')
> INNER JOIN Kunder ON stamdata.formand=KF.Kunderid
> INNER JOIN KF ON stamdata.formand=KF.Kunderid
Det er vist ikke noget jeg har skrevet...
--
Med venlig hilsen
Stig Johansen
| |
Jens R. Rasmussen (27-06-2011)
| Kommentar Fra : Jens R. Rasmussen |
Dato : 27-06-11 21:21 |
|
Jeg har prøvet men det går ikke så godt
Hvis jeg skriver
S = Stamdata
KF = Kunder(formand)
KN = Kunder(naestformand)
....
får jeg fejlmeddelelseni 2. linje: "Typer stemmer ikke overens: 'Kunder'"
Hvis jeg undlader parenteserne og skriver
S = Stamdata
KF = Kunder
KN = Kunder
strSQL= "SELECT S.formand, KF.fornavn AS KFfornavn, KF.efternavn as
KFefternavn, KN.fornavn AS KNfornavn, KN.efternavn as KNefternavn FROM
Stamdata S INNER JOIN Kunder KF ON stamdata.formand=KF.kundeid INNER JOIN
Kunder, KN ON stamdata.naestformand=KN.kundeid ORDER By Saeson desc"
får jeg fejlmeddelelsen "Der er en syntaksfejl, fordi der mangler en operator.
i forespørgselsudtrykket "stamdata.formand=KF.kundeid INNER JOIN Kunder"."
Da jeg langtfra er god til inner joins ved jeg ikke rigtigt hvad der er galt.
Ved du det, stig?
I stamdata har jeg fx
Saeson = 2010/2011
Formand = 85
....
Og i Kunder har jeg:
Kundid = 85
Fornavn = Niels
Efternavn = Nehrkorn
....
mvh
/Jens
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Leif Neland (28-06-2011)
| Kommentar Fra : Leif Neland |
Dato : 28-06-11 00:53 |
|
Den 27-06-2011 22:20, Jens R. Rasmussen skrev:
> Jeg har prøvet men det går ikke så godt
>
> Hvis jeg skriver
> S = Stamdata
> KF = Kunder(formand)
> KN = Kunder(naestformand)
> ...
>
> får jeg fejlmeddelelseni 2. linje: "Typer stemmer ikke overens: 'Kunder'"
>
> Hvis jeg undlader parenteserne og skriver
> S = Stamdata
> KF = Kunder
> KN = Kunder
> strSQL= "SELECT S.formand, KF.fornavn AS KFfornavn, KF.efternavn as
> KFefternavn, KN.fornavn AS KNfornavn, KN.efternavn as KNefternavn FROM
> Stamdata S INNER JOIN Kunder KF ON stamdata.formand=KF.kundeid INNER JOIN
> Kunder, KN ON stamdata.naestformand=KN.kundeid ORDER By Saeson desc"
>
> får jeg fejlmeddelelsen "Der er en syntaksfejl, fordi der mangler en operator.
> i forespørgselsudtrykket "stamdata.formand=KF.kundeid INNER JOIN Kunder"."
>
Når du har sagt "FROM Stamdata S", er der derefter i sætningen ikke
nogen tabel, der hedder Stamdata; den hedder S.
Ego skal du ikke skrive "ON stamdata.formand=KF.kundeid" men "ON
S.formand=KF.kundeid"
Leif
--
Bevar P2, luk P3, der er nok P3'er i forvejen.
| |
Jens R. Rasmussen (28-06-2011)
| Kommentar Fra : Jens R. Rasmussen |
Dato : 28-06-11 10:02 |
|
Leif Neland wrote in dk.edb.internet.webdesign.serverside.asp:
> Den 27-06-2011 22:20, Jens R. Rasmussen skrev:
> > Jeg har prøvet men det går ikke så godt
> >
> > Hvis jeg skriver
> > S = Stamdata
> > KF = Kunder(formand)
> > KN = Kunder(naestformand)
> > ...
> >
> > får jeg fejlmeddelelseni 2. linje: "Typer stemmer ikke overens: 'Kunder'"
> >
> > Hvis jeg undlader parenteserne og skriver
> > S = Stamdata
> > KF = Kunder
> > KN = Kunder
> > strSQL= "SELECT S.formand, KF.fornavn AS KFfornavn, KF.efternavn as
> > KFefternavn, KN.fornavn AS KNfornavn, KN.efternavn as KNefternavn FROM
> > Stamdata S INNER JOIN Kunder KF ON stamdata.formand=KF.kundeid INNER JOIN
> > Kunder, KN ON stamdata.naestformand=KN.kundeid ORDER By Saeson desc"
> >
> > får jeg fejlmeddelelsen "Der er en syntaksfejl, fordi der mangler en operator.
> > i forespørgselsudtrykket "stamdata.formand=KF.kundeid INNER JOIN Kunder"."
> >
> Når du har sagt "FROM Stamdata S", er der derefter i sætningen ikke
> nogen tabel, der hedder Stamdata; den hedder S.
>
> Ego skal du ikke skrive "ON stamdata.formand=KF.kundeid" men "ON
> S.formand=KF.kundeid"
>
> Leif
> --
> Bevar P2, luk P3, der er nok P3'er i forvejen.
Hej igen
har rettet som du skriver til:
S = Stamdata
KF = Kunder
KN = Kunder
strSQL= "SELECT S.formand, KF.fornavn AS KFfornavn, KF.efternavn as KFefternavn,
KN.fornavn AS KNfornavn, KN.efternavn as KNefternavn FROM Stamdata S INNER JOIN
Kunder KF ON S.formand=KF.kundeid INNER JOIN Kunder, KN ON
S.naestformand=KN.kundeid ORDER By Saeson desc"
set rs = Conn.Execute(strSQL)
men får stadig samme fejlmeddelelse
<Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket
"S.formand=KF.kundeid INNER JOIN Kunder".>
Kan du se hvad det er for en operator der mangler?
mvh
/Jens
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Leif Neland (28-06-2011)
| Kommentar Fra : Leif Neland |
Dato : 28-06-11 11:24 |
|
"Jens R. Rasmussen" <Jens.R.Rasmussen@uni-c.dk> skrev i en meddelelse
news:4e0998a5$0$314$14726298@news.sunsite.dk...
> strSQL= "SELECT S.formand, KF.fornavn AS KFfornavn, KF.efternavn as
> KFefternavn,
> KN.fornavn AS KNfornavn, KN.efternavn as KNefternavn FROM Stamdata S INNER
> JOIN
> Kunder KF ON S.formand=KF.kundeid INNER JOIN Kunder, KN ON
> S.naestformand=KN.kundeid ORDER By Saeson desc"
> set rs = Conn.Execute(strSQL)
>
> men får stadig samme fejlmeddelelse
> <Der er en syntaksfejl, fordi der mangler en operator. i
> forespørgselsudtrykket
> "S.formand=KF.kundeid INNER JOIN Kunder".>
>
> Kan du se hvad det er for en operator der mangler?
>
Ja, fejlen er lige der, hvor citatet i fejlmeddelelsen slutter.
"S.formand=KF.kundeid INNER JOIN Kunder, KN ON"
Der skal ikke være komma imellem Kunder og KN, sql tror du vil starte en ny
sætning eller noget; det er tivertfald forkert med komma der
Leif
> mvh
> /Jens
>
> --
> Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
> - Pædagogiske tutorials på dansk
> - Kom godt i gang med koderne
> KLIK HER! => http://www.html.dk/tutorials
| |
Jens R. Rasmussen (28-06-2011)
| Kommentar Fra : Jens R. Rasmussen |
Dato : 28-06-11 13:23 |
|
Leif Neland wrote in dk.edb.internet.webdesign.serverside.asp:
> "Jens R. Rasmussen" <Jens.R.Rasmussen@uni-c.dk> skrev i en meddelelse
> news:4e0998a5$0$314$14726298@news.sunsite.dk...
>
> > strSQL= "SELECT S.formand, KF.fornavn AS KFfornavn, KF.efternavn as
> > KFefternavn,
> > KN.fornavn AS KNfornavn, KN.efternavn as KNefternavn FROM Stamdata S INNER
> > JOIN
> > Kunder KF ON S.formand=KF.kundeid INNER JOIN Kunder, KN ON
> > S.naestformand=KN.kundeid ORDER By Saeson desc"
> > set rs = Conn.Execute(strSQL)
> >
> > men får stadig samme fejlmeddelelse
> > <Der er en syntaksfejl, fordi der mangler en operator. i
> > forespørgselsudtrykket
> > "S.formand=KF.kundeid INNER JOIN Kunder".>
> >
> > Kan du se hvad det er for en operator der mangler?
> >
>
> Ja, fejlen er lige der, hvor citatet i fejlmeddelelsen slutter.
>
> "S.formand=KF.kundeid INNER JOIN Kunder, KN ON"
>
> Der skal ikke være komma imellem Kunder og KN, sql tror du vil starte en ny
> sætning eller noget; det er tivertfald forkert med komma der
>
> Leif
>
> > mvh
> > /Jens
> >
> > --
> > Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
> > - Pædagogiske tutorials på dansk
> > - Kom godt i gang med koderne
> > KLIK HER! => http://www.html.dk/tutorials
>
>
jeg får desværre nøjagtig samme fejlmeddelelses med og uden komma - så der
må være mindst en fejl mere i min sætning.
Jeg har 2 databaser (access)Stamdata og Kunder, som ser sådan ud:
Stamdata
saeson (nøglefelt)
Formand
Naestformand
....
fx med data
saeson=2010/2011
formand = 111
....
og databasen kunder med
kundeid (nøglefelt)
fornavn
efternavn
....
fx
kundeid=111,
fornavn = niels
efternavn = jensen
.....
og det er navnenen på formand, næstformand, kasserer .... jeg forgæves søger at
få frem ved at give nøglekoderne til kunde-databsen, som jeg slår dem op i
stamdatabasen sæson for sæson.
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Leif Neland (28-06-2011)
| Kommentar Fra : Leif Neland |
Dato : 28-06-11 13:59 |
|
"Jens R. Rasmussen" <Jens.R.Rasmussen@uni-c.dk> skrev i en meddelelse
news:4e09c797$0$315$14726298@news.sunsite.dk...
> Leif Neland wrote in dk.edb.internet.webdesign.serverside.asp:
>> "Jens R. Rasmussen" <Jens.R.Rasmussen@uni-c.dk> skrev i en meddelelse
>> news:4e0998a5$0$314$14726298@news.sunsite.dk...
>>
>> > strSQL= "SELECT S.formand, KF.fornavn AS KFfornavn, KF.efternavn as
>> > KFefternavn,
>> > KN.fornavn AS KNfornavn, KN.efternavn as KNefternavn FROM Stamdata S
>> > INNER
>> > JOIN
>> > Kunder KF ON S.formand=KF.kundeid INNER JOIN Kunder, KN ON
>> > S.naestformand=KN.kundeid ORDER By Saeson desc"
>> > set rs = Conn.Execute(strSQL)
>> >
>> > men får stadig samme fejlmeddelelse
>> > <Der er en syntaksfejl, fordi der mangler en operator. i
>> > forespørgselsudtrykket
>> > "S.formand=KF.kundeid INNER JOIN Kunder".>
>> >
>> > Kan du se hvad det er for en operator der mangler?
>> >
>>
>> Ja, fejlen er lige der, hvor citatet i fejlmeddelelsen slutter.
>>
>> "S.formand=KF.kundeid INNER JOIN Kunder, KN ON"
>>
>> Der skal ikke være komma imellem Kunder og KN, sql tror du vil starte en
>> ny
>> sætning eller noget; det er tivertfald forkert med komma der
>>
>> Leif
>>
>> > mvh
>> > /Jens
>> >
>> > --
>> > Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
>> > - Pædagogiske tutorials på dansk
>> > - Kom godt i gang med koderne
>> > KLIK HER! => http://www.html.dk/tutorials
>>
>>
>
> jeg får desværre nøjagtig samme fejlmeddelelses med og uden komma - så
> der
> må være mindst en fejl mere i min sætning.
>
> Jeg har 2 databaser (access)Stamdata og Kunder, som ser sådan ud:
Underligt. Når jeg klipper din sætning ind i query-vinduet i Enterprise
Manager får jeg fejlmeddelelsen
"Error in join expression.
Unable to parse query text."
Fjerner jeg kommaet, accepteres sætningen, der omformatteres til
SELECT S.formand, KF.fornavn AS KFfornavn, KF.efternavn AS KFefternavn,
KN.fornavn AS KNfornavn, KN.efternavn AS KNefternavn
FROM Stamdata S INNER JOIN
Kunder KF ON S.formand = KF.kundeid INNER JOIN
Kunder KN ON S.naestformand = KN.kundeid
ORDER BY Saeson DESC
Den kan naturligvis ikke køres, da jeg ikke har oprettet tabellerne.
Leif
| |
Jens R. Rasmussen (28-06-2011)
| Kommentar Fra : Jens R. Rasmussen |
Dato : 28-06-11 20:22 |
|
Leif Neland wrote in dk.edb.internet.webdesign.serverside.asp:
> "Jens R. Rasmussen" <Jens.R.Rasmussen@uni-c.dk> skrev i en meddelelse
> news:4e09c797$0$315$14726298@news.sunsite.dk...
> > Leif Neland wrote in dk.edb.internet.webdesign.serverside.asp:
> >> "Jens R. Rasmussen" <Jens.R.Rasmussen@uni-c.dk> skrev i en meddelelse
> >> news:4e0998a5$0$314$14726298@news.sunsite.dk...
> >>
> >> > strSQL= "SELECT S.formand, KF.fornavn AS KFfornavn, KF.efternavn as
> >> > KFefternavn,
> >> > KN.fornavn AS KNfornavn, KN.efternavn as KNefternavn FROM Stamdata S
> >> > INNER
> >> > JOIN
> >> > Kunder KF ON S.formand=KF.kundeid INNER JOIN Kunder, KN ON
> >> > S.naestformand=KN.kundeid ORDER By Saeson desc"
> >> > set rs = Conn.Execute(strSQL)
> >> >
> >> > men får stadig samme fejlmeddelelse
> >> > <Der er en syntaksfejl, fordi der mangler en operator. i
> >> > forespørgselsudtrykket
> >> > "S.formand=KF.kundeid INNER JOIN Kunder".>
> >> >
> >> > Kan du se hvad det er for en operator der mangler?
> >> >
> >>
> >> Ja, fejlen er lige der, hvor citatet i fejlmeddelelsen slutter.
> >>
> >> "S.formand=KF.kundeid INNER JOIN Kunder, KN ON"
> >>
> >> Der skal ikke være komma imellem Kunder og KN, sql tror du vil starte en
> >> ny
> >> sætning eller noget; det er tivertfald forkert med komma der
> >>
> >> Leif
> >>
> >> > mvh
> >> > /Jens
> >> >
> >> > --
> >> > Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
> >> > - Pædagogiske tutorials på dansk
> >> > - Kom godt i gang med koderne
> >> > KLIK HER! => http://www.html.dk/tutorials
> >>
> >>
> >
> > jeg får desværre nøjagtig samme fejlmeddelelses med og uden komma - så
> > der
> > må være mindst en fejl mere i min sætning.
> >
> > Jeg har 2 databaser (access)Stamdata og Kunder, som ser sådan ud:
>
> Underligt. Når jeg klipper din sætning ind i query-vinduet i Enterprise
> Manager får jeg fejlmeddelelsen
> "Error in join expression.
> Unable to parse query text."
>
> Fjerner jeg kommaet, accepteres sætningen, der omformatteres til
>
> SELECT S.formand, KF.fornavn AS KFfornavn, KF.efternavn AS KFefternavn,
> KN.fornavn AS KNfornavn, KN.efternavn AS KNefternavn
> FROM Stamdata S INNER JOIN
> Kunder KF ON S.formand = KF.kundeid INNER JOIN
> Kunder KN ON S.naestformand = KN.kundeid
> ORDER BY Saeson DESC
>
> Den kan naturligvis ikke køres, da jeg ikke har oprettet tabellerne.
>
> Leif
>
>
Mærkeligt. Hvis jeg begynder helt forfra og KUN vil liste formanden i hver
sæson, så skriver jeg og det virker perfekt:
strSQL= "SELECT Kunder.Fornavn, Kunder.Efternavn, Stamdata.Saeson FROM Stamdata
INNER JOIN Kunder ON Kunder.Kundeid = Stamdata.Formand ORDER BY Stamdata.Saeson
Desc"
set rs = Conn.Execute(strSQL)
If rs.eof then
Response.write "Der er ingen gamle lukkede arrangementer i databasen>"
Else
DO WHILE Not rs.eof
Response.write "Sæson: " & rs("Saeson") & "<br />"
Response.write "Formand: " & rs("fornavn") & " " & rs("Efternavn") &
"<br />"
Response.write "<br />"
rs.MoveNext
Loop
End if
Her får jeg en fin udskrift med
Sæson 2011/2010:
Formand: Niels jensen
Sæson 2020/209:
Formand: peter Hansen
osv.....
men nu vil jeg gerne have næstformanden med, der ligesom formanden ligger i
Stamdatabasen under samme nøgle som formanden. Altså Stamdatabasen ser således
ud
Saeson (nøgle), Formand, Naestformand, Kasserer, .....
Hvuilke ændringer kræver det?
mvh
/jens
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Leif Neland (29-06-2011)
| Kommentar Fra : Leif Neland |
Dato : 29-06-11 04:23 |
|
Den 28-06-2011 21:22, Jens R. Rasmussen skrev:
> men nu vil jeg gerne have næstformanden med, der ligesom formanden ligger i
> Stamdatabasen under samme nøgle som formanden. Altså Stamdatabasen ser således
> ud
>
> Saeson (nøgle), Formand, Naestformand, Kasserer, .....
>
> Hvuilke ændringer kræver det?
>
> mvh
> /jens
>
SELECT S.formand, KF.fornavn AS KFfornavn, KF.efternavn AS
KFefternavn, KN.fornavn AS KNfornavn, KN.efternavn AS KNefternavn
FROM Stamdata S LEFT OUTER JOIN
Kunder KF ON S.formand = KF.kundeid LEFT OUTER JOIN
Kunder KN ON S.naestformand = KN.kundeid
ORDER BY Saeson DESC
Det giver så mulighed for at der er Stamdata uden tilhørende formand
eller naestformand
Min enterprise manager finder ingen syntaxfejl; så prøv lige igen
Leif
| |
Jens R. Rasmussen (29-06-2011)
| Kommentar Fra : Jens R. Rasmussen |
Dato : 29-06-11 09:35 |
|
Leif Neland wrote in dk.edb.internet.webdesign.serverside.asp:
> Den 28-06-2011 21:22, Jens R. Rasmussen skrev:
> > men nu vil jeg gerne have næstformanden med, der ligesom formanden ligger i
> > Stamdatabasen under samme nøgle som formanden. Altså Stamdatabasen ser således
> > ud
> >
> > Saeson (nøgle), Formand, Naestformand, Kasserer, .....
> >
> > Hvuilke ændringer kræver det?
> >
> > mvh
> > /jens
> >
> SELECT S.formand, KF.fornavn AS KFfornavn, KF.efternavn AS
> KFefternavn, KN.fornavn AS KNfornavn, KN.efternavn AS KNefternavn
> FROM Stamdata S LEFT OUTER JOIN
> Kunder KF ON S.formand = KF.kundeid LEFT OUTER JOIN
> Kunder KN ON S.naestformand = KN.kundeid
> ORDER BY Saeson DESC
>
> Det giver så mulighed for at der er Stamdata uden tilhørende formand
> eller naestformand
>
> Min enterprise manager finder ingen syntaxfejl; så prøv lige igen
>
> Leif
Hej leif/
jeg prøver igen - men sig mig lige: Hvormange af aliaserne er nødvendige og hvilke
er bare pladsbesparende? For i det jeg skrev før er der INGEN aliasser og det
virker (men kun for formanden . Er det nødvendigt med aliasser, når man fra 2
felter i samme record i Stamdatabaserecorden, skal ind i 2 forskellige records i
kundedatabasen? Altså når jeg ud over formanden også vil vise naestformandes navn?
Jens
Og måske har du fanget en fejl ved at jeg bruger INNER jopin for der e
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Leif Neland (29-06-2011)
| Kommentar Fra : Leif Neland |
Dato : 29-06-11 11:19 |
|
"Jens R. Rasmussen" <Jens.R.Rasmussen@uni-c.dk> skrev i en meddelelse
news:4e0ae39f$0$313$14726298@news.sunsite.dk...
> jeg prøver igen - men sig mig lige: Hvormange af aliaserne er nødvendige
> og hvilke
> er bare pladsbesparende? For i det jeg skrev før er der INGEN aliasser og
> det
> virker (men kun for formanden . Er det nødvendigt med aliasser, når
> man fra 2
> felter i samme record i Stamdatabaserecorden, skal ind i 2 forskellige
> records i
> kundedatabasen? Altså når jeg ud over formanden også vil vise
> naestformandes navn?
>
Det er *nødvendigt* at bruge alias på tabeller, når når du bruger den samme
tabel flere gange; hvordan skulle sql ellers vide, hvilken af de "instances"
af tabellen, du mener.
Det er *nødvendigt* at bruge alias på felter i selectsætningen, hvis der er
det samme feltnavn i flere tabeller.
Det er ikke nødvendigt. men det kan øge læsbarheden at bruge alias på
tabelnavne, hvis de er lange eller komplicerede.
F.ex drupal_cykelhandel_engros_leverandører AS L
Leif.
| |
Stig Johansen (04-07-2011)
| Kommentar Fra : Stig Johansen |
Dato : 04-07-11 12:51 |
|
Leif Neland wrote:
> Min enterprise manager finder ingen syntaxfejl; så prøv lige igen
Leif,
Jeg har desværre ikke min 'infrastruktur' ved hånden, men bemærk at Jens
bruger Access, og du bruger 'Enterprise manager' (Query Analyzer?)
Jeg skrev lidt med paranteser, men kuh i overordnede vendinger, da jeg ikke
kan efterprøve det, med nogle databaser _vil_ have paranteser:
SELECT ......
FROM .....
(
(INNER/LEFT OUTER JOIN ....
(INNER/LEFT OUTER JOIN ....)
)
)
Mener i øvrigt også at eks. MSSQL 7.0 ville have disse parenteser, muligvis
også 6.5 (som i virkeligheden var MS's "køb" af Sybase).
Men John, prøv dig frem med paranteser, det burde være ligetil.
Leif har forklaret de korrekte syntakser for Alias'er, og begrundet dem.
--
Med venlig hilsen
Stig Johansen
| |
Stig Johansen (04-07-2011)
| Kommentar Fra : Stig Johansen |
Dato : 04-07-11 13:05 |
|
Stig Johansen wrote:
> Mener i øvrigt også at eks. MSSQL 7.0 ville have disse parenteser,
> muligvis også 6.5 (som i virkeligheden var MS's "køb" af Sybase).
Lavede en henvisning til:
http://technet.microsoft.com/en-us/library/cc917601.aspx
som forklarer visse forskelle mellem Access og MS SQLServer.
Måske kan svaret findes der.
--
Med venlig hilsen
Stig Johansen
| |
Jens R. Rasmussen (04-07-2011)
| Kommentar Fra : Jens R. Rasmussen |
Dato : 04-07-11 20:52 |
|
Stig Johansen wrote in dk.edb.internet.webdesign.serverside.asp:
> Stig Johansen wrote:
>
> > Mener i øvrigt også at eks. MSSQL 7.0 ville have disse parenteser,
> > muligvis også 6.5 (som i virkeligheden var MS's "køb" af Sybase).
>
> Lavede en henvisning til:
> http://technet.microsoft.com/en-us/library/cc917601.aspx
>
> som forklarer visse forskelle mellem Access og MS SQLServer.
>
> Måske kan svaret findes der.
>
> --
> Med venlig hilsen
> Stig Johansen
Undskyld det sene svar - jeg har været væk et par dage. Men er nu
tilbage. Endnu mere opsat på at få problemet løst.
For at indkredse fejlen vil jeg nu i første omgang kun liste formanden
gennem tiderne (altså glem naestformand, kasserer...). Og det går fint
når jeg skriver:
1)
strSQL= "SELECT Kunder.Fornavn, Kunder.Efternavn, Stamdata.Saeson FROM
(Stamdata INNER JOIN Kunder ON Kunder.Kundeid = Stamdata.Formand) ORDER
BY Stamdata.Saeson Desc"
set rs = Conn.Execute(strSQL)
DO WHILE Not rs.eof
Response.write "Sæson: " & rs("Saeson") & "<br />"
Response.write "Formand: " & rs("fornavn") & " " &
rs("Efternavn") & "<br />"
Response.write "<br />"
rs.MoveNext
Loop
bemærk at jeg endnu ikke bruger aliasser. Som sagt kommer der et
perfekt side ud med formandens navn gennem tiderne.
2) Nu vil jeg så prøve at få samme resultat - stadig KUN formanden -
men med brug af aliasser.
Hvis jeg skriver
KF = kunder(formand) får jeg syntaksfejlen "Der opstod en Microsoft
VBScript-kørselsfejl (0x800A000D) Typer stemmer ikke overens: 'Kunder'"
Altså holder jeg mig til aliasdefinitionen
KF = Kunder, som ikke giver nogen syntaksfejl.
3) Når jeg så i SQL-sætningen forsøger at erstatte alle kunder.xx med
KF.xx - altså skriver:
strSQL= "SELECT KF.Fornavn, KF.Efternavn, Stamdata.Saeson FROM
(Stamdata INNER JOIN Kunder ON KF.Kundeid = Stamdata.Formand) ORDER BY
Stamdata.Saeson Desc"
får jeg fejlmeddelelsen: "Microsoft JET Database Engine (0x80040E14)
Der er en syntaksfejl i JOIN-handlingen."
4) Og går jeg skridtet videre og også erstatter Kunder med KF, altså
skriver:
KF = Kunder
strSQL= "SELECT KF.Fornavn, KF.Efternavn, Stamdata.Saeson FROM
(Stamdata INNER JOIN KF ON KF.Kundeid = Stamdata.Formand) ORDER BY
Stamdata.Saeson Desc"
Får jeg fejlen "Microsoft Jet-databasemotoren kan ikke finde
inputtabellen eller forespørgslen "KF". Kontroller, at den findes, og
at navnet er stavet korrekt. "
Det er sikkert min alias-syntaks der er skrupskør. kan I gennemskue
fejlene?
på forhånd tak
/jens
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Leif Neland (04-07-2011)
| Kommentar Fra : Leif Neland |
Dato : 04-07-11 21:23 |
|
Den 04-07-2011 21:52, Jens R. Rasmussen skrev:
>
> For at indkredse fejlen vil jeg nu i første omgang kun liste formanden
> gennem tiderne (altså glem naestformand, kasserer...). Og det går fint
> når jeg skriver:
>
> 1)
> strSQL= "SELECT Kunder.Fornavn, Kunder.Efternavn, Stamdata.Saeson FROM
> (Stamdata INNER JOIN Kunder ON Kunder.Kundeid = Stamdata.Formand) ORDER
> BY Stamdata.Saeson Desc"
> set rs = Conn.Execute(strSQL)
> DO WHILE Not rs.eof
> Response.write "Sæson: "& rs("Saeson")& "<br />"
> Response.write "Formand: "& rs("fornavn")& " "&
> rs("Efternavn")& "<br />"
> Response.write "<br />"
> rs.MoveNext
> Loop
>
> bemærk at jeg endnu ikke bruger aliasser. Som sagt kommer der et
> perfekt side ud med formandens navn gennem tiderne.
>
> 2) Nu vil jeg så prøve at få samme resultat - stadig KUN formanden -
> men med brug af aliasser.
>
> Hvis jeg skriver
> KF = kunder(formand) får jeg syntaksfejlen "Der opstod en Microsoft
> VBScript-kørselsfejl (0x800A000D) Typer stemmer ikke overens: 'Kunder'"
> Altså holder jeg mig til aliasdefinitionen
> KF = Kunder, som ikke giver nogen syntaksfejl.
Må vi lige få den sætning?
>
> 3) Når jeg så i SQL-sætningen forsøger at erstatte alle kunder.xx med
> KF.xx - altså skriver:
> strSQL= "SELECT KF.Fornavn, KF.Efternavn, Stamdata.Saeson FROM
> (Stamdata INNER JOIN Kunder ON KF.Kundeid = Stamdata.Formand) ORDER BY
> Stamdata.Saeson Desc"
> får jeg fejlmeddelelsen: "Microsoft JET Database Engine (0x80040E14)
> Der er en syntaksfejl i JOIN-handlingen."
Du fortæller ikke at KF er alias til Kunder
Det skal være "... INNER JOIN Kunder KF on KF.Kundeid..."
>
> 4) Og går jeg skridtet videre og også erstatter Kunder med KF, altså
> skriver:
> KF = Kunder
Her sætter du en asp-variabel KF lig en asp-variabel, der hedder Kunder.
Det har intet med den streng, du sender til SQL.
> strSQL= "SELECT KF.Fornavn, KF.Efternavn, Stamdata.Saeson FROM
> (Stamdata INNER JOIN KF ON KF.Kundeid = Stamdata.Formand) ORDER BY
> Stamdata.Saeson Desc"
>
> Får jeg fejlen "Microsoft Jet-databasemotoren kan ikke finde
> inputtabellen eller forespørgslen "KF". Kontroller, at den findes, og
> at navnet er stavet korrekt. "
Ja, du bruger en tabel, der hedder KF, der ikke findes.
Du bruger ikke Kunder. Samme fejl som i 3.
> Det er sikkert min alias-syntaks der er skrupskør. kan I gennemskue
> fejlene?
>
Ja til begge dele
Leif
--
Bevar P2, luk P3, der er nok P3'er i forvejen.
| |
Jens R. Rasmussen (04-07-2011)
| Kommentar Fra : Jens R. Rasmussen |
Dato : 04-07-11 21:43 |
|
Leif Neland wrote in dk.edb.internet.webdesign.serverside.asp:
> Den 04-07-2011 21:52, Jens R. Rasmussen skrev:
>
> >
> > For at indkredse fejlen vil jeg nu i første omgang kun liste formanden
> > gennem tiderne (altså glem naestformand, kasserer...). Og det går fint
> > når jeg skriver:
> >
> > 1)
> > strSQL= "SELECT Kunder.Fornavn, Kunder.Efternavn, Stamdata.Saeson FROM
> > (Stamdata INNER JOIN Kunder ON Kunder.Kundeid = Stamdata.Formand) ORDER
> > BY Stamdata.Saeson Desc"
> > set rs = Conn.Execute(strSQL)
> > DO WHILE Not rs.eof
> > Response.write "Sæson: "& rs("Saeson")& "<br />"
> > Response.write "Formand: "& rs("fornavn")& " "&
> > rs("Efternavn")& "<br />"
> > Response.write "<br />"
> > rs.MoveNext
> > Loop
> >
> > bemærk at jeg endnu ikke bruger aliasser. Som sagt kommer der et
> > perfekt side ud med formandens navn gennem tiderne.
> >
> > 2) Nu vil jeg så prøve at få samme resultat - stadig KUN formanden -
> > men med brug af aliasser.
> >
> > Hvis jeg skriver
> > KF = kunder(formand) får jeg syntaksfejlen "Der opstod en Microsoft
> > VBScript-kørselsfejl (0x800A000D) Typer stemmer ikke overens: 'Kunder'"
> > Altså holder jeg mig til aliasdefinitionen
> > KF = Kunder, som ikke giver nogen syntaksfejl.
>
> Må vi lige få den sætning?
>
> >
> > 3) Når jeg så i SQL-sætningen forsøger at erstatte alle kunder.xx med
> > KF.xx - altså skriver:
> > strSQL= "SELECT KF.Fornavn, KF.Efternavn, Stamdata.Saeson FROM
> > (Stamdata INNER JOIN Kunder ON KF.Kundeid = Stamdata.Formand) ORDER BY
> > Stamdata.Saeson Desc"
> > får jeg fejlmeddelelsen: "Microsoft JET Database Engine (0x80040E14)
> > Der er en syntaksfejl i JOIN-handlingen."
>
> Du fortæller ikke at KF er alias til Kunder
> Det skal være "... INNER JOIN Kunder KF on KF.Kundeid..."
>
> >
> > 4) Og går jeg skridtet videre og også erstatter Kunder med KF, altså
> > skriver:
> > KF = Kunder
> Her sætter du en asp-variabel KF lig en asp-variabel, der hedder Kunder.
> Det har intet med den streng, du sender til SQL.
>
> > strSQL= "SELECT KF.Fornavn, KF.Efternavn, Stamdata.Saeson FROM
> > (Stamdata INNER JOIN KF ON KF.Kundeid = Stamdata.Formand) ORDER BY
> > Stamdata.Saeson Desc"
>
>
> >
> > Får jeg fejlen "Microsoft Jet-databasemotoren kan ikke finde
> > inputtabellen eller forespørgslen "KF". Kontroller, at den findes, og
> > at navnet er stavet korrekt. "
> Ja, du bruger en tabel, der hedder KF, der ikke findes.
> Du bruger ikke Kunder. Samme fejl som i 3.
>
> > Det er sikkert min alias-syntaks der er skrupskør. kan I gennemskue
> > fejlene?
> >
> Ja til begge dele
>
> Leif
> --
> Bevar P2, luk P3, der er nok P3'er i forvejen.
tak leif - det virker.
Jeg troede, at jeg først skulle oprette et alias ved at skrive
KF = Kunder
før jeg kom til sql-sætningen
Nu har jeg sløjfet det og i SQL-sætningen gjort som du påpeger (skrive
Kunder KF). Det er åbenbart først i sql-sætningen at jeg definerer mit
alias på denne måde.
Nu vil jeg så forsøge at få naestformanden med. jeg håber ikke jeg skal
ulejlige dig igen. men tak itv.
/Jens
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Leif Neland (04-07-2011)
| Kommentar Fra : Leif Neland |
Dato : 04-07-11 21:55 |
|
Den 04-07-2011 22:43, Jens R. Rasmussen skrev:
>
> Jeg troede, at jeg først skulle oprette et alias ved at skrive
> KF = Kunder
> før jeg kom til sql-sætningen
Nej, du sender en komplet sætning til sql-serveren.
>
> Nu har jeg sløjfet det og i SQL-sætningen gjort som du påpeger (skrive
> Kunder KF). Det er åbenbart først i sql-sætningen at jeg definerer mit
> alias på denne måde.
>
> Nu vil jeg så forsøge at få naestformanden med. jeg håber ikke jeg skal
> ulejlige dig igen. men tak itv.
itv?
Anyway, den sætning har du også fået tidligere
Leif
--
Bevar P2, luk P3, der er nok P3'er i forvejen.
| |
Leif Neland (04-07-2011)
| Kommentar Fra : Leif Neland |
Dato : 04-07-11 21:41 |
|
Den 04-07-2011 21:52, Jens R. Rasmussen skrev:
>
> 2) Nu vil jeg så prøve at få samme resultat - stadig KUN formanden -
> men med brug af aliasser.
>
> Hvis jeg skriver
> KF = kunder(formand) får jeg syntaksfejlen "Der opstod en Microsoft
> VBScript-kørselsfejl (0x800A000D) Typer stemmer ikke overens: 'Kunder'"
> Altså holder jeg mig til aliasdefinitionen
> KF = Kunder, som ikke giver nogen syntaksfejl.
>
Oh! Åh! Ak!
Det er gået op for mig, hvor din vildfarelse består
> KF = kunder(formand)
Her prøver du at sætte asp-variablen KF lig resultatet af en
asp-funktion, der hedder kunder, med parametren variablen formand.
Ingenting af dette eksister (sandsynligvis). Sætningen er det rene vrøvl
Asp ved ikke, hvad der er af felter eller tabeller i databasen.
asp/webserveren og sqlserveren/processen er helt adskilte processer, og
kan ligge på hver sin maskine i hvert sit land.
I asp bygger du en tekststreng, du kaster i hovedet på sql-serveren, og
får data tilbage.
Alt hvad der foregår i asp før du kalder set rs = Conn.Execute(strSQL)
er sql-serveren irellevant (bortset fra at asp skal logge på sql-serveren).
Har du ikke et værktøj, et ide, så du kan skrive dit query, se
tabellerne grafisk, og få resultatet?
Leif
--
Bevar P2, luk P3, der er nok P3'er i forvejen.
| |
Jens R. Rasmussen (04-07-2011)
| Kommentar Fra : Jens R. Rasmussen |
Dato : 04-07-11 21:59 |
|
> Oh! Åh! Ak!
>
> Det er gået op for mig, hvor din vildfarelse består
>
> > KF = kunder(formand)
>
> Her prøver du at sætte asp-variablen KF lig resultatet af en
> asp-funktion, der hedder kunder, med parametren variablen formand.
> Ingenting af dette eksister (sandsynligvis). Sætningen er det rene vrøvl
>
> Asp ved ikke, hvad der er af felter eller tabeller i databasen.
> asp/webserveren og sqlserveren/processen er helt adskilte processer, og
> kan ligge på hver sin maskine i hvert sit land.
>
> I asp bygger du en tekststreng, du kaster i hovedet på sql-serveren, og
> får data tilbage.
>
> Alt hvad der foregår i asp før du kalder set rs = Conn.Execute(strSQL)
> er sql-serveren irellevant (bortset fra at asp skal logge på sql-serveren).
Jeg har klart misforstået det Stig skrev allerførst i denne lange tråd. Jeg
troede han bad mig skrive dette
> Har du ikke et værktøj, et ide, så du kan skrive dit query, se
> tabellerne grafisk, og få resultatet?
Næ - men det lyder som du har et link til et sådant værktøj?
mvh
/jens
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Leif Neland (04-07-2011)
| Kommentar Fra : Leif Neland |
Dato : 04-07-11 22:15 |
|
Den 04-07-2011 22:59, Jens R. Rasmussen skrev:
>> > Har du ikke et værktøj, et ide, så du kan skrive dit query, se
>> > tabellerne grafisk, og få resultatet?
> Næ - men det lyder som du har et link til et sådant værktøj?
>
Hedder det ikke Access?
Leif
--
Bevar P2, luk P3, der er nok P3'er i forvejen.
| |
Jens R. Rasmussen (04-07-2011)
| Kommentar Fra : Jens R. Rasmussen |
Dato : 04-07-11 23:22 |
|
Nu gik det lige så godt og jeg troede jeg kunne klare resten selv. Det kan jeg
desværre ikke. Øv
I min accessbase "Stamdata" har jeg felterne pr. record
Nøglefelt = Saeson = fx 2010/2011
Formand = fx 117
Naestformand = fx 85
Kasserer .... osv.
I min Accessdatabase "Kunder" har jeg tilsvarende felterne i hver record
Nøglefelt = kundeid = fx 117
Fornavn = fx jens
Efternavn = fx rasmussen
osv....
Efter meget møje og besvær har Stig og Leif hjulpet mig til at få listet formanden
fra alle sæsoner ved at skrive:
strSQL= "SELECT KF.Fornavn AS KFfornavn, KF.Efternavn AS KFefternavn,
Stamdata.Saeson FROM Stamdata INNER JOIN Kunder KF ON KF.Kundeid=Stamdata.Formand
ORDER BY Stamdata.Saeson Desc"
set rs = Conn.Execute(strSQL)
DO WHILE Not rs.eof
Response.write "Sæson: " & rs("Saeson") & "<br />"
Response.write "Formand: " & rs("KFFornavn") & " " & rs("KFEfternavn")
& "<br />"
Response.write "<br />"
rs.MoveNext
Loop
Og dette virker eksemplarisk!
Mit næste trin er også at få næstformand med i listningen. Fra Stamdata er det et
sideordnet felt til Formand - mens det i kunder er en anden record.
Jeg har prøvet at udvide strSQL-sætningen til:
strSQL= "SELECT KF.Fornavn AS KFfornavn, KF.Efternavn AS KFefternavn, KN.Fornavn
AS KNfornavn, KN.Efternavn AS KNefternavn, Stamdata.Saeson FROM Stamdata INNER
JOIN Kunder KF ON KF.Kundeid=Stamdata.Formand INNER JOIN Kunder KN ON
KN.Kundeid=Stamdata.Naestformand ORDER BY Stamdata.Saeson Desc"
Men det giver mig fejlmeddelelsen: Der er en syntaksfejl, fordi der mangler en
operator. i forespørgselsudtrykket "KF.Kundeid=Stamdata.Formand INNER JOIN Kunder
KN ON KN.Kundeid=Stamdata.Naestformand".
Inspireret af Stig har jeg forsøgt at sætte diverse parentser uden held. Det giver
andre fejlmeddelelser - så enten er det en anden fejl eller også har jeg ikke ramt
den korrekte parentes-sætning.
mvh
/Jens
Puha - det er sørme svært.
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Leif Neland (05-07-2011)
| Kommentar Fra : Leif Neland |
Dato : 05-07-11 07:28 |
|
Den 05-07-2011 00:22, Jens R. Rasmussen skrev:
> Mit næste trin er også at få næstformand med i listningen. Fra Stamdata er det et
> sideordnet felt til Formand - mens det i kunder er en anden record.
>
> Jeg har prøvet at udvide strSQL-sætningen til:
> strSQL= "SELECT KF.Fornavn AS KFfornavn, KF.Efternavn AS KFefternavn, KN.Fornavn
> AS KNfornavn, KN.Efternavn AS KNefternavn, Stamdata.Saeson FROM Stamdata INNER
> JOIN Kunder KF ON KF.Kundeid=Stamdata.Formand INNER JOIN Kunder KN ON
> KN.Kundeid=Stamdata.Naestformand ORDER BY Stamdata.Saeson Desc"
>
> Men det giver mig fejlmeddelelsen: Der er en syntaksfejl, fordi der mangler en
> operator. i forespørgselsudtrykket "KF.Kundeid=Stamdata.Formand INNER JOIN Kunder
> KN ON KN.Kundeid=Stamdata.Naestformand".
>
Enten er der en "Doh'"-oplevelse, vi mangler; et eller andet vi overser,
eller også er access ikke sql.
Både sqlmanager og mysql accepterer queriet.
Jeg har endda lavet tabellerne i en testdb, se resultatet her:
http://gupl.dk/62414/
> Inspireret af Stig har jeg forsøgt at sætte diverse parentser uden held. Det giver
> andre fejlmeddelelser - så enten er det en anden fejl eller også har jeg ikke ramt
> den korrekte parentes-sætning.
>
Kan du ikke arbejde i tabellerne direkte med access, så burde du kunne
få lavet dit query i gui point-and-click, og så få set queryet som
access vil have det.
http://www.techonthenet.com/access/queries/joins1.php
http://www.techonthenet.com/access/queries/view_sql.php
>
> Puha - det er sørme svært.
Ja, hvis access ikke opfører sig som standard sql kan det være tungt at
hjælpe...
Jeg har ikke access på mine maskiner
Leif
--
Bevar P2, luk P3, der er nok P3'er i forvejen.
| |
Stig Johansen (05-07-2011)
| Kommentar Fra : Stig Johansen |
Dato : 05-07-11 11:41 |
|
Leif Neland wrote:
> Den 05-07-2011 00:22, Jens R. Rasmussen skrev:
>>
>> Puha - det er sørme svært.
>
> Ja, hvis access ikke opfører sig som standard sql kan det være tungt at
> hjælpe...
>
> Jeg har ikke access på mine maskiner
He - Leif
Nej, Access opfører sig ikke _altid_ sql compliant, men har forskellige
spidsfindigheder.
Men når du skriver et 'gui', så har jeg et 'general sql query tool' liggende
et eller andet sted på en vmware.
Et sådant værktøj er uundværligt, da det netop viser hvad der sker som følge
af diverse sætninger.
Du kender QA, så lad mig nøjes med at sige det er en 'ASP-QA', dog primitiv,
og består kun af databasevalg same et textarea, analogt med QA.
Det vil være lidt besværligt at finde og poste, men hvis vi kan lave den
aftale at du (eller andre (Jens)) vil lægge kildeteksten tilgængelig, så er
jeg villig til at bruge et par timer på at finde det frem.
(Besværligt, da materialet ligger på en Win2K vmware, og jeg skriver fra en
Linux vmware, og det er ikke ligetil at copy/paste;)
--
Med venlig hilsen
Stig Johansen
| |
Stig Johansen (05-07-2011)
| Kommentar Fra : Stig Johansen |
Dato : 05-07-11 11:44 |
|
Stig Johansen wrote:
PS:
Hvis Jens lægger eksempeldata i CSV filer (eller xls-filer), kunne jeg godt
overtales til at dissekere problemstillingen, men jeg 'gider' ikke bruge
tid på at fabrikere tabeller/data.
--
Med venlig hilsen
Stig Johansen
| |
Jens R. Rasmussen (05-07-2011)
| Kommentar Fra : Jens R. Rasmussen |
Dato : 05-07-11 16:57 |
|
Stig Johansen wrote in dk.edb.internet.webdesign.serverside.asp:
> Stig Johansen wrote:
>
> PS:
> Hvis Jens lægger eksempeldata i CSV filer (eller xls-filer), kunne jeg godt
> overtales til at dissekere problemstillingen, men jeg 'gider' ikke bruge
> tid på at fabrikere tabeller/data.
>
> --
> Med venlig hilsen
> Stig Johansen
Så gerne - jeg har 2 xls-filer klar - en med Stamdata og en med Kunder.
Hvordan får du dem, får jeg kan vist ikke attache dem her i konferencen, vel?
mvh
/jens
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Stig Johansen (06-07-2011)
| Kommentar Fra : Stig Johansen |
Dato : 06-07-11 10:57 |
|
Jens R. Rasmussen wrote:
> Så gerne - jeg har 2 xls-filer klar - en med Stamdata og en med Kunder.
> Hvordan får du dem, får jeg kan vist ikke attache dem her i konferencen,
> vel?
Jeg går ud fra du har en hjemmeside, så læg dem der, og giv et link.
Nu vil jeg ikke komme ind på infrastrukturelle omstændigheder i detaljer,
men der hvor jeg normalt har adgang, er der af en eller anden mystisk grund
spærret for NNTP.
Det betyder jeg kan læse vha. html.dk/google groups, men du får mig aldrig
til at _skrive_ via disse interfaces.
Da jeg 'kun' har office 97, vil jeg nok foretrække at de bliver lagt som CSV
filer - "file save as..."
Hvis du gør det, kan jeg i ro og mag kigge på det, og vende tilbage når tid
er.
Det lyder nok lidt kryptisk, men det handler om, at mine skriblerier foregår
fra en vmware, der ligger på en lille usb-disk, så den har jeg med når jeg
kigger forbi knægten (aht NNTP).
--
Med venlig hilsen
Stig Johansen
| |
Stig Johansen (07-07-2011)
| Kommentar Fra : Stig Johansen |
Dato : 07-07-11 10:53 |
|
Jens R. Rasmussen wrote:
> Så gerne - jeg har 2 xls-filer klar - en med Stamdata og en med Kunder.
> Hvordan får du dem, får jeg kan vist ikke attache dem her i konferencen,
> vel?
Jeg lavede en reply vha Google, men det oprettede en ny tråd.
Svaret på 'alle dine problemer' findes i den tråd 16:20 i går.
--
Med venlig hilsen
Stig Johansen
| |
Leif Neland (05-07-2011)
| Kommentar Fra : Leif Neland |
Dato : 05-07-11 11:24 |
|
Den 05-07-2011 12:41, Stig Johansen skrev:
> Leif Neland wrote:
>
>> Den 05-07-2011 00:22, Jens R. Rasmussen skrev:
>>>
>>> Puha - det er sørme svært.
>>
>> Ja, hvis access ikke opfører sig som standard sql kan det være tungt at
>> hjælpe...
>>
>> Jeg har ikke access på mine maskiner
>
> He - Leif
>
> Nej, Access opfører sig ikke _altid_ sql compliant, men har forskellige
> spidsfindigheder.
>
> Men når du skriver et 'gui', så har jeg et 'general sql query tool' liggende
> et eller andet sted på en vmware.
Det nytter vel ikke med et "general" tool, hvis access opfører sig
nonstandard.
Men hvis man har en access-database, har man så ikke access? Der er jo
et gui, så vidt jeg kan se af de links, jeg har lagt tidligere i tråden.
Leif
| |
Stig Johansen (05-07-2011)
| Kommentar Fra : Stig Johansen |
Dato : 05-07-11 12:40 |
|
Leif Neland wrote:
> Den 05-07-2011 12:41, Stig Johansen skrev:
>> Leif Neland wrote:
>>
>>> Den 05-07-2011 00:22, Jens R. Rasmussen skrev:
>>>>
>>>> Puha - det er sørme svært.
>>>
>>> Ja, hvis access ikke opfører sig som standard sql kan det være tungt at
>>> hjælpe...
>>>
>>> Jeg har ikke access på mine maskiner
>>
>> He - Leif
>>
>> Nej, Access opfører sig ikke _altid_ sql compliant, men har forskellige
>> spidsfindigheder.
>>
>> Men når du skriver et 'gui', så har jeg et 'general sql query tool'
>> liggende et eller andet sted på en vmware.
>
> Det nytter vel ikke med et "general" tool, hvis access opfører sig
> nonstandard.
>
> Men hvis man har en access-database, har man så ikke access? Der er jo
> et gui, så vidt jeg kan se af de links, jeg har lagt tidligere i tråden.
Nej til det første.
Man kan sagtens bruge Access(database) uden at have Access(programmet).
Access(programmet) har en 'query builder', men den fabrikerer de nok værste
tænkelige SQL'er du nogensinde vil se.
Hvis du kigger på det, så hav en af de der poser klar, der sidder i
flysæderne, som man også kan bruge til kryds og bolle ;)
Bruger man ren ODBC/ADO eller lign, så opfører den sig 'tilnærmelsesvist'
som en 'rigtig database', men Access har intet GUI til en ren 'Query
analyzer'.
Hint: Jeg har 'rodet' med databaseuafhængige systemer siden ca. '95, så hvis
jeg ikke mente der var behov for et sådat 'query tool', så havde jeg ikke
brugt tid på at skrive det
Hint2: Jeg har nogle andre tools, men de kører kun lokalt, og vil kræve
kopiering fra og tilbage fra serveren.
Hint3: MS Købte Open Access (integeret kontorpakke) og videreudviklede den.
De 'købte' senere (en licens til?) sybase, som er en decideret database.
MS's udfordring er at 'merge' disse to afarter, og rygter vil vide, at med
'god behandling' benyttes samme engine som til MS SQLServer (fra og med
Access 2K).
Access er ikke noget jeg bruger, men er typisk gratis tilgængeligt på
diverse webhoteller.
Performancewise kan den sagtens måle sig med andre 'databaser', hvis man
altså behandler den 'pænt'.
Dvs. Optimerede SQL-compliant SQL.
Myten om langsomheden opstår når man bruger alt andet end (fast) forward
read-only cursors.
'fast' er i den forbindelse relateret til MS SQLServer, hvor det virkelig
sparker røv, men er nok ikke implementeret i Access.
--
Med venlig hilsen
Stig Johansen
| |
Stig Johansen (05-07-2011)
| Kommentar Fra : Stig Johansen |
Dato : 05-07-11 12:41 |
|
Stig Johansen wrote:
PS:
Jeg ved ikke hvornår jeg kigger forbi igen, da kun er engang imellem.
--
Med venlig hilsen
Stig Johansen
| |
Leif Neland (05-07-2011)
| Kommentar Fra : Leif Neland |
Dato : 05-07-11 13:47 |
|
Den 05-07-2011 13:39, Stig Johansen skrev:
> Access(programmet) har en 'query builder', men den fabrikerer de nok værste
> tænkelige SQL'er du nogensinde vil se.
>
> Hvis du kigger på det, så hav en af de der poser klar, der sidder i
> flysæderne, som man også kan bruge til kryds og bolle ;)
Er det ikke bare at den omformulerer queryet til det, som serveren udfører?
F.ex. laver sql'en i enterprise manager ..from a,b where a.key=b.key om
til join on a.key=b.key, og logiske udtryk "pakkes ud", svhh bliver
a and (b or c) til (a and b) or (a and c).
Leif
| |
Stig Johansen (06-07-2011)
| Kommentar Fra : Stig Johansen |
Dato : 06-07-11 10:48 |
|
Leif Neland wrote:
> Den 05-07-2011 13:39, Stig Johansen skrev:
>
>> Access(programmet) har en 'query builder', men den fabrikerer de nok
>> værste tænkelige SQL'er du nogensinde vil se.
>>
>> Hvis du kigger på det, så hav en af de der poser klar, der sidder i
>> flysæderne, som man også kan bruge til kryds og bolle ;)
>
> Er det ikke bare at den omformulerer queryet til det, som serveren
> udfører?
Nej ikke sådan.
Access er ikke en client/server løsning, mere et integreret produkt.
'Programmet' er ikke en gui på linie med EM/QA, mere 'et kan alting produkt'
incl. forms/vbscript osv.. nærmest en af de der slags 4. generations
udviklingsværktøjer.
Programmet Access er ikke gratis eller frit tilgængeligt, det var ikke
engang en del af 'office pakken' men kostede klejner ed siden af.
Men når vi snakker brugen af Access (databasen), så hænger det sammen med,
at selve 'jetmotoren', som de kalder det, er en del af enhver windows
installation.
Det betyder at alle med windows har mulighed for at bygge, vedligeholde og
bruge Access 'databaser'.
Derfor henviste jeg til et 'general query tool', som vha. ASP kan udføre
disse opgave uagtet man ikke har 'programmet' Access.
--
Med venlig hilsen
Stig Johansen
| |
Leif Neland (05-07-2011)
| Kommentar Fra : Leif Neland |
Dato : 05-07-11 07:40 |
|
Den 05-07-2011 00:22, Jens R. Rasmussen skrev:
> Jeg har prøvet at udvide strSQL-sætningen til:
> strSQL= "SELECT KF.Fornavn AS KFfornavn, KF.Efternavn AS KFefternavn, KN.Fornavn
> AS KNfornavn, KN.Efternavn AS KNefternavn, Stamdata.Saeson FROM Stamdata INNER
> JOIN Kunder KF ON KF.Kundeid=Stamdata.Formand INNER JOIN Kunder KN ON
> KN.Kundeid=Stamdata.Naestformand ORDER BY Stamdata.Saeson Desc"
>
> Men det giver mig fejlmeddelelsen: Der er en syntaksfejl, fordi der mangler en
> operator. i forespørgselsudtrykket "KF.Kundeid=Stamdata.Formand INNER JOIN Kunder
> KN ON KN.Kundeid=Stamdata.Naestformand".
>
En ækvivalent sætning er
SELECT KF.Fornavn AS KFfornavn, KF.Efternavn AS KFefternavn,
KN.Fornavn AS KNfornavn, KN.Efternavn AS KNefternavn, Stamdata.Saeson
FROM Stamdata,Kunder KF,Kunder KN
WHERE KF.Kundeid=Stamdata.Formand AND KN.Kundeid=Stamdata.Naestformand
ORDER BY Stamdata.Saeson Desc
Men den laver sqlmanager om til inner join med det samme.
Prøv med
SELECT KF.Fornavn AS KFfornavn, KF.Efternavn AS KFefternavn,
KN.Fornavn AS KNfornavn, KN.Efternavn AS KNefternavn, Stamdata.Saeson
FROM Stamdata LEFT OUTER JOIN
Kunder KF ON KF.Kundeid = Stamdata.Formand LEFT
OUTER JOIN
Kunder KN ON KN.Kundeid = Stamdata.Naestformand
ORDER BY Stamdata.Saeson DESC
Så får du også de begivenheder, hvor der ikke er formand eller
næstformand på; det er det sikreste...
Leif
--
Bevar P2, luk P3, der er nok P3'er i forvejen.
| |
Jens R. Rasmussen (05-07-2011)
| Kommentar Fra : Jens R. Rasmussen |
Dato : 05-07-11 16:49 |
|
Leif Neland wrote in dk.edb.internet.webdesign.serverside.asp:
> Prøv med
> SELECT KF.Fornavn AS KFfornavn, KF.Efternavn AS KFefternavn,
> KN.Fornavn AS KNfornavn, KN.Efternavn AS KNefternavn, Stamdata.Saeson
> FROM Stamdata LEFT OUTER JOIN
> Kunder KF ON KF.Kundeid = Stamdata.Formand LEFT
> OUTER JOIN
> Kunder KN ON KN.Kundeid = Stamdata.Naestformand
> ORDER BY Stamdata.Saeson DESC
>
> Så får du også de begivenheder, hvor der ikke er formand eller
> næstformand på; det er det sikreste...
fejlmeddelelsen er den 'klassiske', som jeg får hver gang:
Microsoft JET Database Engine (0x80040E14)
Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket
"KF.Kundeid = Stamdata.Formand LEFT OUTER JOIN Kunder KN ON KN.Kundeid =
Stamdata.Naestformand".
Desværre
/Jens
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Leif Neland (06-07-2011)
| Kommentar Fra : Leif Neland |
Dato : 06-07-11 12:35 |
|
"Jens R. Rasmussen" <Jens.R.Rasmussen@uni-c.dk> skrev i en meddelelse
news:4e133281$0$308$14726298@news.sunsite.dk...
> Leif Neland wrote in dk.edb.internet.webdesign.serverside.asp:
>> Prøv med
>> SELECT KF.Fornavn AS KFfornavn, KF.Efternavn AS KFefternavn,
>
> fejlmeddelelsen er den 'klassiske', som jeg får hver gang:
>
> Microsoft JET Database Engine (0x80040E14)
> Der er en syntaksfejl, fordi der mangler en operator. i
> forespørgselsudtrykket
> "KF.Kundeid = Stamdata.Formand LEFT OUTER JOIN Kunder KN ON KN.Kundeid =
> Stamdata.Naestformand".
>
> Desværre
> /Jens
Hvad siger den så til
SELECT KF.Fornavn AS KFfornavn, KF.Efternavn AS KFefternavn,
KN.Fornavn AS KNfornavn, KN.Efternavn AS KNefternavn, Stamdata.Saeson
FROM Stamdata,Kunder KF,Kunder KN
WHERE KF.Kundeid=Stamdata.Formand AND KN.Kundeid=Stamdata.Naestformand
ORDER BY Stamdata.Saeson Desc
Hvis det virker, så må du leve med at der *skal* være både formand og
næstformand.
| |
Jens R. Rasmussen (07-07-2011)
| Kommentar Fra : Jens R. Rasmussen |
Dato : 07-07-11 22:11 |
|
Leif Neland wrote in dk.edb.internet.webdesign.serverside.asp:
> Hvad siger den så til
> SELECT KF.Fornavn AS KFfornavn, KF.Efternavn AS KFefternavn,
> KN.Fornavn AS KNfornavn, KN.Efternavn AS KNefternavn, Stamdata.Saeson
> FROM Stamdata,Kunder KF,Kunder KN
> WHERE KF.Kundeid=Stamdata.Formand AND KN.Kundeid=Stamdata.Naestformand
> ORDER BY Stamdata.Saeson Desc
>
> Hvis det virker, så må du leve med at der *skal* være både formand og
> næstformand.
Hurra. Det virker, Leif. Tak for det. Selvfølgelig er det fortsat en
'interessant' gåde hvorfor jeg ikke kunne bruge joins - altså hvad der var
galt. Men lige nu vil jeg glæde mig over at vi kom i mål. Nu burde det ikke
være nogen sag at udvide dette til kasserer, sekretær, ...
Tak nok en gang.
mvh den taknemmelige
/Jens
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Stig Johansen (08-07-2011)
| Kommentar Fra : Stig Johansen |
Dato : 08-07-11 09:56 |
|
Jens R. Rasmussen wrote:
> Hurra. Det virker, Leif. Tak for det. Selvfølgelig er det fortsat en
> 'interessant' gåde hvorfor jeg ikke kunne bruge joins - altså hvad der var
> galt.
Paranteserne - du, paranteserne (i Access).
> Men lige nu vil jeg glæde mig over at vi kom i mål. Nu burde det
> ikke være nogen sag at udvide dette til kasserer, sekretær, ...
Fra mit andet indlæg:
.....
SELECT
KF.Fornavn AS KFfornavn, KF.Efternavn AS KFefternavn,
KN.Fornavn AS KNfornavn, KN.Efternavn AS KNefternavn,
KS.Fornavn AS KSfornavn, KS.Efternavn AS KSefternavn,
S.Saeson
FROM
(( Stamdata S
INNER JOIN Kunder KF ON KF.Kundeid=S.Formand )
INNER JOIN Kunder KN ON KN.Kundeid=S.Naestformand)
INNER JOIN Kunder KS ON KS.Kundeid=S.Kasserer
ORDER BY S.Saeson Desc
.....
Her er kasserer med, men ikke sekretær.
Opstiller du det på den måde burde det være ligetil at tilføje sekretær med
tilhørende paranteser.
Hint i ASP:
SQL = 'SELECT' + _
'KF...osv' + _
osv.
Ved at bruge flere linier, får man et meget bedre overblik over SQL'et.
--
Med venlig hilsen
Stig Johansen
| |
|
|