Avatar billede jpi Mester
06. februar 2012 - 11:16 Der er 8 kommentarer og
1 løsning

SQL der ikke kan opdatere

Hej

Jeg har 2 tabeller: personer og datoer

Personer-tabellen indeholder to felter: ID og navn
Datoer-tabellen indeholder 2 felter: ID_person og dato

det er meningen at en person skal kunne have mange datoer i datoer-tabellen.

Jeg skal nu lave et udtræk, hvor hver person bliver vist med den yngste dato fra datoer-tabellen.

SQL-sætningen ser således ud:
SELECT datoer.ID_Person, Max(datoer.dato) AS MaxOfdato, personer.navn
FROM personer INNER JOIN datoer ON personer.ID = datoer.ID_Person
GROUP BY datoer.ID_Person, personer.navn;

Det virker fint, MEN... Jeg kan ikke ændre indholdet af navn-feltet i forespørgslen. Når jeg således viser indholdet i en formular kan navnet ikke ændres, hvilket det skal kunne.
Hvordan kan jeg få den til det ?
Avatar billede mugs Novice
06. februar 2012 - 16:22 #1
Du kan ikke ændre i posterne når du bruger Group By
Avatar billede jpi Mester
07. februar 2012 - 08:54 #2
Hvad skal man så bruge i stedet ?
Avatar billede mugs Novice
07. februar 2012 - 09:52 #3
Du er nødt til at fjerne grupperingen hvis du vil rette en post. Det er svært at sige hvilke muligheder du har, da jeg jo ikke kender din db, eller hvad du vil opnå.
Avatar billede jpi Mester
07. februar 2012 - 10:01 #4
Jeg har forsøgt at beskrive det i første post, men jeg prøver lige på en anden måde:

Jeg skal have en formular med oplysninger om en person. Langt de fleste data stammer fra en tilsvarende tabel, så dem er der ingen problemer med.
Men 'en af oplysningerne er en dato. Den skal findes i tabel, hvor der for hver person kan være mange datoer. Den skal så blot vise den nyeste/højeste dato. Formularen skal bruges til redigering af person data (undtagen datoen) der vil være skrivebeskyttet (skal ændres i en anden formular)

Giver det mening ?  :)
Avatar billede mugs Novice
07. februar 2012 - 10:34 #5
Hvis hver enkelt post er identificeret med et nr (nøgle), vil jeg da tro, at du kan arbejde med en fortløbende formular, der er sorteret faldende efter dato. Eller også vælge hvilken post du vil arbejde med (redigere), og derefter finden posten i en anden formular med denne:

DoCmd.OpenForm "Form2"
Forms!Form2!Felt1.SetFocus
DoCmd.FindRecord Me!Felt1

hor Felt1 identificerer posten.
Avatar billede jpi Mester
07. februar 2012 - 10:51 #6
Hvis jeg bare sætter det sammen i en formular får jeg den samme person vist en masse gange (antallet af gange er lig med antallet af datoer for hver enkelt person). Det er ikke rigtig brugbart...

Den anden løsning med en ekstra formular til editering vil jeg absolut også undgå, da det ikke er i tråd med resten af applikationen.

Er der en måde hvor man kan få en Forespørgsel til at vise persondata samt den nyeste dato fra den anden tabel (og hvor man kan editere i dataene ?) denne forespørgsel vil så kunne bruges i en formular...
Avatar billede mugs Novice
07. februar 2012 - 13:28 #7
Prøb evt en Distinct. Når du bruger den, får du kun een forekomst af hver post:

SELECT distinct datoer.ID_Person, Max(datoer.dato) AS MaxOfdato,o.s.v.

undlad grupperongen og sorter faldende efter dato. Ikke afprøvet, blot en ide.
Avatar billede jpi Mester
08. februar 2012 - 09:06 #8
Jeg får følgende fejl: You tried to execute a query that does not include the specified expression <name> as part of an aggregate function.

Bruger man Access' design-view og sætter "Max" på en af felterne kommer der netop GroupBy på resten af felterne...  :(
Avatar billede jpi Mester
21. februar 2012 - 07:59 #9
Ingen svar... lukker
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