Avatar billede padrino Nybegynder
13. marts 2006 - 18:43 Der er 20 kommentarer og
1 løsning

Problemer med INSERT og UNION

Hej..

Jeg har lidt problemer med at få en SQL-sætning til at virke.
I tabellen har jeg kolonnen "Beskrivelse", som kan indeholde en masse forskellige beskrivelser. Jeg vil have alle poster med beskrivelsen "Chumphon Scholarship Program" og "Linguas School i Rio", som hver har en pris (kolonne: "Beløb") på henholdsvis kr.50 og kr.75 (Disse priser er ikke noget der direkte involvere mit spg.).

Jeg har lavet følgende SQL forespørgsel i Access97, som virker fint:
SELECT Reservationer.Reservationsnummer, Udgifter.Antal, Udgifter.Beskrivelse, Udgifter.Beløb, Format([Reservationer].[Reservationsdato], 'dd-mm-yyyy') As Reservationsdato, Format([Reservationer].[Afrejsedato], 'dd-mm-yyyy') AS Afrejsedato,  Udgifter.Deltagernummer
FROM (Reservationer LEFT JOIN Deltagerliste ON Reservationer.Reservationsnummer = Deltagerliste.Reservationsnummer) LEFT JOIN Udgifter ON Deltagerliste.Deltagernummer = Udgifter.Deltagernummer
WHERE (((Reservationer.Annulleret) Is Null)) AND (((Udgifter.Beskrivelse) = "Chumphon Scholarship Program"))
UNION
SELECT Reservationer.Reservationsnummer, Udgifter.Antal, Udgifter.Beskrivelse, Udgifter.Beløb, Format([Reservationer].[Reservationsdato], 'dd-mm-yyyy') As Reservationsdato, Format([Reservationer].[Afrejsedato], 'dd-mm-yyyy') AS Afrejsedato, Udgifter.Deltagernummer
FROM (Reservationer LEFT JOIN Deltagerliste ON Reservationer.Reservationsnummer = Deltagerliste.Reservationsnummer) LEFT JOIN Udgifter ON Deltagerliste.Deltagernummer = Udgifter.Deltagernummer
WHERE (((Udgifter.Beskrivelse) = "Linguas School i Rio"))
GROUP BY Reservationer.Reservationsnummer, Udgifter.Antal, Udgifter.Beskrivelse, Udgifter.Beløb, Reservationer.Reservationsdato, Reservationer.Afrejsedato, Udgifter.Deltagernummer
ORDER BY Reservationer.Reservationsnummer;

Det er disse kolonner, som jeg er interesseret i at lægge over en i midlertidig tabel som jeg så kan lave en rapport ud fra:
Reservationsnummer, Antal, Beskrivelse, Beløb, Reservationsdato, Afrejsedato, Deltagernummer.

Her er så min kode, som jeg ikke kan få til at virke:
Dim SQL As String

SQL = "INSERT INTO TempHelpprogramTable "
SQL = SQL & "SELECT Reservationer.Reservationsnummer, Udgifter.Antal, Udgifter.Beskrivelse, Udgifter.Beløb, Format([Reservationer].[Reservationsdato], 'dd-mm-yyyy') As Reservationsdato, Format([Reservationer].[Afrejsedato], 'dd-mm-yyyy') AS Afrejsedato, Udgifter.Deltagernummer "
SQL = SQL & "FROM (Reservationer LEFT JOIN Deltagerliste ON Reservationer.Reservationsnummer = Deltagerliste.Reservationsnummer) LEFT JOIN Udgifter ON Deltagerliste.Deltagernummer = Udgifter.Deltagernummer "
SQL = SQL & "WHERE (((Reservationer.Annulleret) Is Null)) AND (((Udgifter.Beskrivelse) = 'Chumphon Scholarship Program')) "
SQL = SQL & "UNION "
SQL = SQL & "SELECT Reservationer.Reservationsnummer, Udgifter.Antal, Udgifter.Beskrivelse, Udgifter.Beløb, Format([Reservationer].[Reservationsdato], 'dd-mm-yyyy') As Reservationsdato, Format([Reservationer].[Afrejsedato], 'dd-mm-yyyy') AS Afrejsedato, Udgifter.Deltagernummer "
SQL = SQL & "FROM (Reservationer LEFT JOIN Deltagerliste ON Reservationer.Reservationsnummer = Deltagerliste.Reservationsnummer) LEFT JOIN Udgifter ON Deltagerliste.Deltagernummer = Udgifter.Deltagernummer "
SQL = SQL & "WHERE (((Udgifter.Beskrivelse) = 'Linguas School i Rio')) "
SQL = SQL & "GROUP BY Reservationer.Reservationsnummer, Udgifter.Antal, Udgifter.Beskrivelse, Udgifter.Beløb, Reservationer.Reservationsdato, Reservationer.Afrejsedato, Udgifter.Deltagernummer "
SQL = SQL & "ORDER BY Reservationer.Reservationsnummer"

DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM TempHelpprogramTable"
DoCmd.RunSQL SQL
DoCmd.SetWarnings True

Jeg har prøvet med forskellige eksempler her fra eksperten, men har ikke kunnet finde noget der virker. Og jeg har rodet lidt frem og tilbage med Queries i Access (SQL,Design View), men uden held. Så jeg vil meget gerne have inputs. Hvad er det jeg gør forkert/mangler?
Avatar billede terry Ekspert
13. marts 2006 - 19:48 #1
difficult to see what the problem is, if you can send your dB it may be easier to see

eksperten@NOSPAMsanthell.dk

remove NOSPAM
Avatar billede terry Ekspert
13. marts 2006 - 19:49 #2
If you can send it then I'll try and get time this evening to take a look, but if anyone else is interesed in helping then thats fine
Avatar billede fdata Forsker
13. marts 2006 - 20:29 #3
Det virker voldsomt med en UNION (er der noget, jeg har overset?)
Kan du ikke bruge en OR:
SQL = "INSERT INTO TempHelpprogramTable "
SQL = SQL & " SELECT Reservationer.Reservationsnummer, Udgifter.Antal, Udgifter.Beskrivelse, Udgifter.Beløb, Format([Reservationer].[Reservationsdato], 'dd-mm-yyyy') As Reservationsdato, Format([Reservationer].[Afrejsedato], 'dd-mm-yyyy') AS Afrejsedato, Udgifter.Deltagernummer "
SQL = SQL & " FROM (Reservationer LEFT JOIN Deltagerliste ON Reservationer.Reservationsnummer = Deltagerliste.Reservationsnummer) LEFT JOIN Udgifter ON Deltagerliste.Deltagernummer = Udgifter.Deltagernummer "
SQL = SQL & " WHERE (Reservationer.Annulleret Is Null AND Udgifter.Beskrivelse = 'Chumphon Scholarship Program') OR (Udgifter.Beskrivelse = 'Linguas School i Rio') "
SQL = SQL & " GROUP BY Reservationer.Reservationsnummer, Udgifter.Antal, Udgifter.Beskrivelse, Udgifter.Beløb, Reservationer.Reservationsdato, Reservationer.Afrejsedato, Udgifter.Deltagernummer"
SQL = SQL & " ORDER BY Reservationer.Reservationsnummer"
Avatar billede padrino Nybegynder
13. marts 2006 - 21:03 #4
Det virker desværre ikke med OR - så får jeg enten 'Linguas School i Rio' eller 'Chumphon Scholarship Program'. Jeg vil have begge beskrivelser i samme kolonne...
Avatar billede terry Ekspert
14. marts 2006 - 08:30 #5
13/03-2006 19:48:18
Avatar billede terry Ekspert
14. marts 2006 - 08:30 #6
OK, didnt see you had sent me your dB, I'll take a look now.
Avatar billede terry Ekspert
14. marts 2006 - 09:13 #7
SQL = "INSERT INTO TempHelpprogramTable SELECT * FROM ("
SQL = SQL & "SELECT Reservationer.Reservationsnummer, Udgifter.Antal, Udgifter.Beskrivelse, Udgifter.Beløb, Format([Reservationer].[Reservationsdato], 'dd-mm-yyyy') As Reservationsdato, Format([Reservationer].[Afrejsedato], 'dd-mm-yyyy') AS Afrejsedato,  Udgifter.Deltagernummer "
SQL = SQL & "FROM (Reservationer LEFT JOIN Deltagerliste ON Reservationer.Reservationsnummer = Deltagerliste.Reservationsnummer) LEFT JOIN Udgifter ON Deltagerliste.Deltagernummer = Udgifter.Deltagernummer "
SQL = SQL & "WHERE (((Reservationer.Annulleret) Is Null)) AND (((Udgifter.Beskrivelse) = 'Chumphon Scholarship Program')) "
SQL = SQL & "UNION "
SQL = SQL & "SELECT Reservationer.Reservationsnummer, Udgifter.Antal, Udgifter.Beskrivelse, Udgifter.Beløb, Format([Reservationer].[Reservationsdato], 'dd-mm-yyyy') As Reservationsdato, Format([Reservationer].[Afrejsedato], 'dd-mm-yyyy') AS Afrejsedato, Udgifter.Deltagernummer "
SQL = SQL & "FROM (Reservationer LEFT JOIN Deltagerliste ON Reservationer.Reservationsnummer = Deltagerliste.Reservationsnummer) LEFT JOIN Udgifter ON Deltagerliste.Deltagernummer = Udgifter.Deltagernummer "
SQL = SQL & "WHERE (((Udgifter.Beskrivelse) = 'Linguas School i Rio')) "
SQL = SQL & "GROUP BY Reservationer.Reservationsnummer, Udgifter.Antal, Udgifter.Beskrivelse, Udgifter.Beløb, Reservationer.Reservationsdato, Reservationer.Afrejsedato, Udgifter.Deltagernummer "
SQL = SQL & "ORDER BY Reservationer.Reservationsnummer) T"
Avatar billede terry Ekspert
14. marts 2006 - 09:14 #8
Seems that Access isnt happy with INSERT when using UNION, so making a sub select gets around that.
Avatar billede fdata Forsker
14. marts 2006 - 23:44 #9
Øøøh.
Du skriver "så får jeg enten 'Linguas School i Rio' eller 'Chumphon Scholarship Program'". Nej. Du får da begge.
Ex: Tag alle kugler, der er røde ELLER blå. Det giver da alle røde og blå kugler!

"Jeg vil have begge beskrivelser i samme kolonne..." Det burde du da også få.
Avatar billede padrino Nybegynder
15. marts 2006 - 10:47 #10
My Bad, fdata... Ja, det virker fint i en Query med OR.. Men jeg havde nogle problemer med det i forbindelse med en anden forespørgsel, som skulle bruges sammen med det i mit spørgsmål. Du har selvfølgelig ret...
Avatar billede padrino Nybegynder
15. marts 2006 - 10:56 #11
Til Terry: Jeg kan ikke få dit svar til at virke. Fejl i From clause..
Avatar billede terry Ekspert
15. marts 2006 - 11:00 #12
Works here :o)

But if fdatas works then use that
Avatar billede padrino Nybegynder
15. marts 2006 - 11:22 #13
Kan det have noget med Access97, at gøre? Går ud fra, at du brugere en nyere version..?
Avatar billede terry Ekspert
15. marts 2006 - 11:43 #14
I'm using Access 2003 and its very possible that 97 has problems with the SQL.

I've sent you the dB converted back to 97, but it still may give problems.
Avatar billede terry Ekspert
15. marts 2006 - 11:46 #15
Seems I'm having problems with my emails accounts so it may take a while before you receive it
Avatar billede padrino Nybegynder
15. marts 2006 - 11:47 #16
Det blev til en kombination af begge jeres kommentare. Jeg droppede union og det virker nu med en OR-sætning og INSERT.
Tak for hjælpen
Avatar billede terry Ekspert
15. marts 2006 - 12:44 #17
fdata>If you want some of the points then drop a comment
Avatar billede terry Ekspert
15. marts 2006 - 12:46 #18
and thanks for the points padrino
Avatar billede fdata Forsker
15. marts 2006 - 19:16 #19
terry >>> No problem. Keep them for a rainy day  ;o)
Avatar billede terry Ekspert
15. marts 2006 - 19:42 #20
thanks fdata, hope we get some of that rain, this cold weather doesnt suit me at all :o)
Avatar billede fdata Forsker
15. marts 2006 - 19:51 #21
Spice of life. Without cold days we wouldn't appriciate the warm ones.
But you're right. We need som rain. The car looks horrible with all that salt on it  ;o)
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